STM32H743+CubeMX-定时器TIM输出PWM(PWM Generation模式)+ 中断
文章目錄
- 一、前言
- 二、CubeMX
- 2.1、Mode and Parameter Settings
- 2.2、NVIC Settings
- 2.3、生成代碼
- 三、代碼
- 3.1、tim.c
- 3.2、main.c
- 四、DEBUG
- 4.1、OC中斷回調(diào)函數(shù)的驗(yàn)證
- 4.2、定時(shí)器溢出中斷
- 五、細(xì)節(jié)補(bǔ)充
一、前言
STM32H743+CubeMX-定時(shí)器TIM輸出PWM(PWM Generation模式)
上一次完成了使用定時(shí)器TIM的PWM Generation模式輸出PWM波,沒(méi)有產(chǎn)生中斷。在實(shí)際項(xiàng)目上,有時(shí)候需要計(jì)算一共發(fā)了多少個(gè)PWM(相當(dāng)于脈沖)給步進(jìn)電機(jī),從而計(jì)算步進(jìn)電機(jī)的步距角,有時(shí)候也需要計(jì)算電平翻轉(zhuǎn)的次數(shù)。
二、CubeMX
2.1、Mode and Parameter Settings
TIM8的時(shí)鐘頻率是240M,當(dāng)Prescaler = 239時(shí),TIM8的時(shí)鐘頻率 = 240M / (239 + 1) = 1MHz。
Counter Period設(shè)置49999時(shí),定時(shí)器溢出中斷的頻率 = 1M / (49999 + 1) = 20Hz,周期T = 1 / 20 = 0.05s = 50ms
Pulse設(shè)置24999時(shí),OC中斷的頻率 = 1M / (24999 + 1) = 40Hz ,周期T = 1 / 40 = 0.025s = 25ms
根據(jù)示波器的波形,可以證明以上的計(jì)算是正確的。
2.2、NVIC Settings
TIM8 update interrupt : 更新:計(jì)數(shù)器上溢/下溢,計(jì)數(shù)器初始化(通過(guò)軟件或內(nèi)部/外部觸發(fā))
TIM8 capture compare interrupt : 輸出比較
2.3、生成代碼
三、代碼
3.1、tim.c
首先,在函數(shù)void MX_TIM8_Init(void)添加用戶代碼。目的是打開(kāi)定時(shí)器溢出中斷與OC中斷。
然后,添加OC中斷回調(diào)函數(shù)。值得注意的是,經(jīng)過(guò)實(shí)驗(yàn)證明:HAL_TIM_OC_DelayElapsedCallback與HAL_TIM_PWM_PulseFinishedCallback效果是一樣的,都是當(dāng)CNT寄存器的值 = CCR比較寄存器的值時(shí)就會(huì)進(jìn)入函數(shù)一次。所以,任意挑一個(gè)來(lái)使用即可。
3.2、main.c
還需要添加另外一個(gè)中斷回調(diào)函數(shù)HAL_TIM_PeriodElapsedCallback(),當(dāng)CNT寄存器的值 = ARR寄存器的值時(shí),進(jìn)入一次回調(diào)函數(shù)。
HAL_TIM_PeriodElapsedCallback()也可以放到tim.c里面,這個(gè)都可以的。
四、DEBUG
4.1、OC中斷回調(diào)函數(shù)的驗(yàn)證
HAL_TIM_OC_DelayElapsedCallback()與HAL_TIM_PWM_PulseFinishedCallback()都會(huì)獲取當(dāng)前CNT寄存器的值。目的是知道產(chǎn)生OC中斷時(shí),CNT寄存器當(dāng)前的值時(shí)多少,從而判斷究竟是OC中斷還是溢出中斷。
從Monitor的監(jiān)控看來(lái),Curr_CNT與OC_CNT一直都是24999,24999是CCR比較寄存器的值。并且從OC_Value與PWM_Value始終相等看來(lái),這兩個(gè)回調(diào)函數(shù)進(jìn)入的次數(shù)是一樣的。
所以,HAL_TIM_OC_DelayElapsedCallback與HAL_TIM_PWM_PulseFinishedCallback都是當(dāng)CNT的值24999等于CCR寄存器的值24999時(shí)進(jìn)入一次。
4.2、定時(shí)器溢出中斷
從Monitor監(jiān)控看來(lái),main_Value一直在遞增,main_CNT保持0,證明每一次定時(shí)器溢出時(shí),都會(huì)進(jìn)入此中斷。
main_CNT保持0的原因是溢出后會(huì)馬上復(fù)位CNT的值,然后才啟動(dòng)溢出中斷。
五、細(xì)節(jié)補(bǔ)充
總結(jié)
以上是生活随笔為你收集整理的STM32H743+CubeMX-定时器TIM输出PWM(PWM Generation模式)+ 中断的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何实现轮播图的内容的多少随div的大小
- 下一篇: python根据文件名打标签_使用pyt