新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32進入和退出睡眠模式例程

        STM32進入和退出睡眠模式例程

        作者: 時間:2012-10-22 來源:網絡 收藏

        1設計要求

        本文引用地址:http://www.104case.com/article/148329.htm

        要求系統按如下方式

        在系統啟動2秒后,將RTC在3秒鐘之后配置為產生一個報警事件,接著通過WFI指令使系統停機

        。如果要喚醒系統到正常,可通過按Key按鈕;否則,在3秒鐘后,會產生RTC報警中斷自動

        將系統喚醒。一旦停機模式,系統時鐘被配置成先前的狀態(在停機模式下,外部高速振蕩器

        HSE和PLL是不可用的)。經過一段延時之后,系統將再次停機狀態,并可按上述操作無限重復。

        2 硬件電路設計

        硬件電路采用與7.1小節應用實例一樣硬件電路,可見圖7-10。其中Key按鈕用于通過PB9產生一個外

        部中斷,LED1、LED2、LED3、LED4則用于顯示處理器所處的模式和中斷觸發情況。

        3 軟件程序設計

        根據任務要求,程序內容主要包括:

        (1) 配置GPIOB口,配置RTC,配置外部中斷;

        (2) 配置PB口第9個引腳作為外部中斷,下降延觸發;配置RTC報警中斷,上升沿觸發;

        (3) 兩個中斷服務子程序的內容分別是:切換LED2和LED3燈的狀態;

        整個工程包含3個源文件:F10x.s、stm32f10x_it.c和main.c,其中F10x.s為啟動代碼,

        所有中斷服務子程序均在stm32f10x_it.c中,其它函數則在main.c中。下面分別介紹相關的函數,

        具體程序清單見參考程序。

        函數SYSCLKConfig_STOP用于當處理器從停機模式喚醒之后,配置系統時鐘、使能HSE和PLL,并以

        PLL作為系統時鐘源。當處理器處理停機模式的時候,HSE、PLL是不可用的。

        函數GPIO_Configuration用于配置GPIO的PC6、PC7、PC8、PC9和PB9。

        函數EXTI_Configuration用于配置外部中斷線9(PB9)和17(RTC報警)。

        函數NVIC_Configuration配置NVIC及中斷向量表,這里主要是配置外部中斷線9和17。

        函數EXTI9_5_IRQHandler處理按鈕Key(PB9)所觸發的中斷,其主要作用是將LED2燈的狀態翻轉一次。

        函數RTCAlarm_IRQHandler處理RTC報警所觸發的中斷,其主要作用事將LED3 燈的狀態翻轉一次,

        如果設置了喚醒標志則清除之。

        運行過程:

        (1) 使用Keil uVision3 通過ULINK 2仿真器連接實驗板,打開實驗例程目錄PWR_TEST子目錄下的PWR.Uv2例程,編譯鏈接工程;

        (2) 選擇軟件調試模式,點擊MDK 的Debug菜單,選擇Start/Stop Debug Session項或Ctrl+F5鍵,在邏輯分析儀中添加GPIOC_ODR.6、GPIOC_ODR.7、GPIOC_ODR.8、GPIOC_ODR.9,點擊Run按鈕即可,在邏輯分析儀中看到如圖7-14,還可用Peripherals-General Port-GPIOB來模擬KEY按鈕的動作;

        (3) 選擇硬件調試模式,選擇Start/Stop Debug Session項或Ctrl+F5鍵,下載程序并運行,觀察LED燈的變化情況。注意,當目標系統進入停機模式之后,將無法使用仿真器進行調試了;

        (4) Debug模式,打開Flash菜單>Download,將程序下載到開發板的Flash中,按RESET鍵復位,觀察LED燈的情況,正常情況應為:系統處于運行模式時LED1亮、LED4滅;系統處于停機狀態時LED1滅、LED4亮;當按下KEY按鈕時LED2燈狀態發生反轉;當發生RTC報警時LED3狀態發生反轉。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 广州市| 汉川市| 河曲县| 鹤峰县| 寿宁县| 崇信县| 新余市| 南溪县| 阳原县| 五大连池市| 九龙坡区| 潜山县| 新密市| 重庆市| 尖扎县| 宁武县| 九龙城区| 昌黎县| 股票| 同德县| 遵义县| 德江县| 安义县| 土默特左旗| 阿拉善右旗| 定襄县| 星座| 成武县| 平陆县| 九寨沟县| 池州市| 白玉县| 汽车| 长汀县| 南充市| 育儿| 融水| 奉贤区| 宁都县| 松滋市| 邹平县|