stm32的低功耗模式共有三個:
在專案中綜合選擇了停止模式,在該模式下使用兩種喚醒方式:
為了盡可能的降低功耗,需要進行io口的配置,防止它們處於浮空狀態,增大電流。stm32在復位後的io口預設處於浮空輸入狀態,因此一定要對它們進行配置。實際過程中發現,同一配置成模擬輸入狀態和分別配置成上拉輸入或下拉輸入的功耗相同。因此為了精簡**,可統一配置成模擬輸入。
void
disableperiph
(void
)
使用外部中斷喚醒停止模式下的stm32,需要將該io口配置到相應的中斷線上。需要注意的是,wkup按鍵與key0與key1不同的是,它是高電平有效,喚醒低功耗,因此在設定時設定為下拉模式。
gpio_inittypedef gpio_initstructure;
nvic_inittypedef nvic_initstructure;
exti_inittypedef exti_initstructure;
//使能gpioa和復用使用
rcc_apb2periphclockcmd
(rcc_apb2periph_gpioa|rcc_apb2periph_afio, enable);
gpio_initstructure.gpio_pin=gpio_pin_0;
//pa0
gpio_initstructure.gpio_mode =gpio_mode_ipd;
//下拉輸入
gpio_init
(gpioa,
&gpio_initstructure)
;//將pa0連線到中斷事件a
gpio_extilineconfig
(gpio_portsourcegpioa, gpio_pinsource0)
; exti_initstructure.exti_line=exti_line0;
exti_initstructure.exti_mode= exti_mode_interrupt;
exti_initstructure.exti_trigger=exti_trigger_rising;
exti_initstructure.exti_linecmd= enable;
exti_init
(&exti_initstructure)
;//初始化外部中斷
nvic_initstructure.nvic_irqchannel=exti0_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority=2;
nvic_initstructure.nvic_irqchannelsubpriority=1;
nvic_initstructure.nvic_irqchannelcmd=enable;
nvic_init
(&nvic_initstructure)
;
gpio_inittypedef gpio_initstructure;
nvic_inittypedef nvic_initstructure;
exti_inittypedef exti_initstructure;
//使能gpioa和復用使用
rcc_apb2periphclockcmd
(rcc_apb2periph_gpioa|rcc_apb2periph_afio, enable);
gpio_initstructure.gpio_pin = gpio_pin_10;
//pa10
gpio_initstructure.gpio_mode = gpio_mode_ipd;
//下拉輸入
gpio_init
(gpioa,
&gpio_initstructure);//
//rx連線至pa10
gpio_extilineconfig
(gpio_portsourcegpioa,gpio_pinsource10)
; exti_initstructure.exti_line=exti_line10;
exti_initstructure.exti_mode = exti_mode_interrupt;
exti_initstructure.exti_trigger = exti_trigger_rising;
exti_initstructure.exti_linecmd = enable;
exti_init
(&exti_initstructure)
;
nvic_initstructure.nvic_irqchannel=exti15_10_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority=2;
nvic_initstructure.nvic_irqchannelsubpriority=2;
nvic_initstructure.nvic_irqchannelcmd=enable;
nvic_init
(&nvic_initstructure)
;
進入停止模式,除了配置對上述進行配置後,記得使能電源管理時鐘:
rcc_apb1periphclockcmd
(rcc_apb1periph_pwr, enable)
;
然後就可以進入低功耗模式:
pwr_enterstopmode
(pwr_regulator_lowpower,pwr_stopentry_wfi)
;
對於停止模式,低功耗模式喚醒進入外部中斷服務子程式。執行完中斷服務子程式後,會返回至進入低功耗模式的下一語句繼續執行;而對於待機模式,當低功耗喚醒後,相當於復位,從程式的main開始執行。
在低功耗中斷,需要重新配置系統的時鐘,否則會系統選用hsi(內部高速時鐘,8m)執行。
void
exti0_irqhandler
(void
)void
exti15_10_irqhandler
(void
)
pwr_enterstopmode
(pwr_regulator_lowpower,pwr_stopentry_wfi)
;/*串列埠喚醒後向下執行*/
rs485_config
(9600);
delay_init()
;
串列埠的初始化記得放在主函式的進入低功耗模式後面,不要放在中斷服務子程式裡,儘管能夠正常執行,但在串列埠通訊中無法正常通訊。
後續的通訊過程,或是執行完任務再次進入低功耗,最好在while(1)裡執行。
STM32外部中斷模擬UART串列埠
串列埠資料幀傳送格式 1個起始位 8個資料位 1個停止位 思路 1.pa9做普通io推挽輸出,按照傳送格式用延時暫時作為該位的傳輸時間,波特率為9600 2.pa10做浮空輸入,外部共享中斷使用 可用其餘外部中斷 每接收到乙個資料就進中斷一次,迴圈接收判斷,當接收到 r n將接收標誌置為0x8000...
STM32外部中斷
一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...
stm32外部中斷
外部中斷程式配置流程 rcc 時鐘配置 void rcc configuration void 時鐘配置 開啟各路時鐘 rcc apb2periphclockcmd rcc apb2periph usart1 rcc apb2periph gpioa rcc apb2periph afio,enab...