李建波 張永亮 梁振華
摘要:介紹了嵌入式芯片STM32圖形化配置軟件STM32CubeMX,以定時(shí)器2為例,信號(hào)源為內(nèi)部時(shí)鐘,當(dāng)計(jì)數(shù)溢出時(shí)產(chǎn)生定時(shí)器中斷。通過分析STM32CubeMX定時(shí)器中斷處理機(jī)制,并進(jìn)行軟件仿真和硬件實(shí)驗(yàn),從技術(shù)上為開發(fā)者提供幫助。
關(guān)鍵詞:定時(shí)器中斷;中斷回調(diào)函數(shù);STM32CubeMX
中圖分類號(hào):TH85+1 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)08-0248-02
1 簡介
STM32CubeMX是ST意法半導(dǎo)體近幾年來大力推薦的STM32芯片圖形化配置工具,允許用戶使用圖形化向?qū)蒀初始化代碼,可以大大減輕開發(fā)工作、時(shí)間和費(fèi)用[1-2]。 聊城大學(xué)物理科學(xué)與信息工程學(xué)院羅清龍等對(duì)如何將STM32CubeMX引入本科嵌入式實(shí)驗(yàn)教學(xué)改革進(jìn)行了實(shí)踐[3],廣東機(jī)電職業(yè)技術(shù)學(xué)院電子與通信學(xué)院李建波等分析了將STM32CubeMX引入高職嵌入式系統(tǒng)設(shè)計(jì)課程教學(xué)中[4],西安工程大學(xué)電子信息學(xué)院羅瑤等將STM32CubeMX用在高速USB通信模塊設(shè)計(jì)中[5]。
目前沒有發(fā)現(xiàn)文章對(duì)STM32CubeMX定時(shí)器中斷進(jìn)行分析,而定時(shí)器中斷是處理器實(shí)時(shí)處理事件的一種內(nèi)部機(jī)制,是很重要的一個(gè)環(huán)節(jié)。本文利用STM32CubeMx設(shè)置TIM4定時(shí)中斷功能,追蹤了定時(shí)中斷矢量,在定時(shí)中斷回調(diào)函數(shù)中編寫了服務(wù)代碼,并進(jìn)行了軟件仿真和硬件驗(yàn)證。
2 總體設(shè)計(jì)
利用STM32CubeMX軟件進(jìn)行定時(shí)器配置,生成代碼。打開工程進(jìn)入Keil開發(fā)環(huán)境,進(jìn)行定時(shí)器中斷代碼編輯、編譯,生成可執(zhí)行文件。在仿真軟件Proteus選擇STM32芯片,并裝載可執(zhí)行文件,進(jìn)行仿真觀察。利用ST-Link或JLink,將代碼下載到開發(fā)板,進(jìn)行硬件調(diào)試。
3 STM32CubeMX軟件
3.1選擇控制器
打開STM32CubeMX,點(diǎn)擊菜單欄File—New Project新建項(xiàng)目,輸入STM32F103C6,選擇STM32F103C6Tx芯片。在引腳配置界面,配置復(fù)位和時(shí)鐘控制RCC;進(jìn)行時(shí)鐘配置,系統(tǒng)時(shí)鐘為8MHz;配置系統(tǒng)模式SYS Mode and Configuration;將PB9配制成GPIO_Output輸出模式。
3.2 配置TIM2
在引腳配置界面,類別Categories中選擇TIM2,在TIM2I作模式Mode配置時(shí)鐘源為內(nèi)部時(shí)鐘,在設(shè)置Configuration中參數(shù)設(shè)置Parameter Setting中,配置分配系數(shù)為7999,計(jì)數(shù)周期為999,如圖l所示。
定時(shí)器中斷頻率:
ft2=fosc/((Prescaler+ l)*( Counter Pe riod+l))
f0。系統(tǒng)時(shí)鐘為8MHz,Prescaler為7999,Counter Period為999,代入公式1,得到
f1=8000000/《7999+1)*(999+1))=1Hz
定時(shí)器中斷周期:Tt2=1/ft2=ls,周期為1秒。
3.3設(shè)置定時(shí)器中斷
在定時(shí)器模式和配置一Configuration配置窗口,選擇嵌套向量中斷控制器設(shè)置NVIC Settings,勾選TIM2 global inter-rupts。如果定時(shí)周期到,則進(jìn)入定時(shí)器中斷函數(shù)。
3.4生成代碼
選擇菜單欄Project,點(diǎn)擊Generate Code,生成用戶代碼、復(fù)制庫文件,點(diǎn)擊Open Project即可進(jìn)入Keil編輯環(huán)境。
4 Keil開發(fā)環(huán)境
4.1中斷初始化
打開mam.c主文件,將鼠標(biāo)移動(dòng)到定時(shí)器初始化函數(shù)MX_TIM2_1nit0;點(diǎn)擊右鍵,查看定義:
void MX_TIM2_1nit(void){
TIM_ClockConfigTypeDef sClockSourceConfig={0};
TIM_MasterConfigTypeDef sMasterConfig=(0};
htim2.1nstance= TIM2;
htim2.Init.Prescaler= 7999;
htim2.Init.CounterMode= TIM—COUNTERMODE_UP;
htim2.Init.Period= 999;
htim2.Init.ClockDivision=TIM—CLO CKDIVISION_DIV l;
htim2. Init. AutoReloadPreload=TIM- AUTORELOAD_PRE-LOAD_DISABLE;
HAL_TIM_Base_lnit(&htim2);...)
可以看到分頻系數(shù)Ptescaler為7999,計(jì)數(shù)周期999。
4.2 定時(shí)器中斷函數(shù)
1)定時(shí)器2中斷函數(shù)
如果定時(shí)周期到,則進(jìn)入定時(shí)器2中斷函數(shù)voidTIM2_IRQHandler(void).
2)定時(shí)器中斷函數(shù)
在void TIM2_IRQHandler(void)中,調(diào)用了函數(shù)HAL_TIM_IRQHandler(&htim2);進(jìn)入該函數(shù)定義。因?yàn)楸容^長,只分析相關(guān)部分。
if
(_HAL_TIM_ GET- IT_SOURCE(htim,
TIM_IT_UP-DATE)!= RESET){
一HAL-- TIM_CLEAR_IT(htim, TIM_IT_UPDATE);