国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32CubeMX教程8 TIM 通用定時器 - 輸出比較

這篇具有很好參考價值的文章主要介紹了STM32CubeMX教程8 TIM 通用定時器 - 輸出比較。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1、準(zhǔn)備材料

開發(fā)板(STM32F407G-DISC1)

STM32CubeMX軟件(Version 6.10.0)

keil μVision5 IDE(MDK-Arm)

ST-LINK/V2驅(qū)動

邏輯分析儀nanoDLA

2、實驗?zāi)繕?biāo)

使用STM32CubeMX軟件配置STM32F407通用定時器的輸出比較通道,并將其輸出到四個LED燈引腳實現(xiàn)LED燈流水燈效果

3、實驗流程

3.0、前提知識

STM32F407的定時器通道均可以實現(xiàn)輸出比較功能,輸出比較功能是利用當(dāng)前計數(shù)值CNT與捕獲/比較寄存器CRR的值作比較,如果值相等就會產(chǎn)生輸出比較結(jié)果,此時也會產(chǎn)生輸出比較完成中斷或DMA請求

定時器產(chǎn)生的輸出比較結(jié)果可以輸出到比較通道的具體引腳上,也可以直接內(nèi)部使用不輸出到引腳,具體輸出的電平由比較模式和輸出極性共同決定

輸出比較模式有①凍結(jié):保持當(dāng)前電平、②匹配時輸出有效電平、③匹配時輸出無效電平、④匹配時翻轉(zhuǎn)輸出電平、⑤強(qiáng)制輸出有效電平和⑥強(qiáng)制輸出無效電平 六種模式

有效電平可以手動設(shè)置為高/低電平

3.1、CubeMX相關(guān)配置

3.1.0、工程基本配置

打開STM32CubeMX軟件,單擊ACCESS TO MCU SELECTOR選擇開發(fā)板MCU(選擇你使用開發(fā)板的主控MCU型號),選中MCU型號后單擊頁面右上角Start Project開始工程,具體如下圖所示

開始工程之后在配置主頁面System Core/RCC中配置HSE/LSE晶振,在System Core/SYS中配置Debug模式,具體如下圖所示

詳細(xì)工程建立內(nèi)容讀者可以閱讀“STM32CubeMX教程1 工程建立”

3.1.1、時鐘樹配置

系統(tǒng)時鐘使用8MHz外部高速時鐘HSE,HCLK、PCLK1和PCLK2均設(shè)置為STM32F407能達(dá)到的最高時鐘頻率,具體如下圖所示

3.1.2、外設(shè)參數(shù)配置

在Pinout & Configuration頁面右邊芯片引腳預(yù)覽Pinout view中找到LED燈的四個控制引腳PD12、PD13、PD14和PD15,依次左鍵單擊并配置其功能為TIM4_CHx

然后在頁面左側(cè)功能分類欄目中點(diǎn)開Timers欄目,單擊欄目下的TIM4,并將其Channel1~4全部配置為Output Compare CHx

具體配置如下圖所示

然后對啟用的TIM4定時器的四個通道參數(shù)進(jìn)行設(shè)置,下面對重要參數(shù)介紹

Prescaler Counter Mode 、 Counter Period auto-reload preload 等計數(shù)器參數(shù)的設(shè)置與之前的實驗講解一致,這里不再贅述,周期設(shè)為500ms,不分頻不預(yù)裝載

Output Compare Channel x / Mode (輸出比較模式)均選擇了Toggle on match,即當(dāng)比較寄存器CCR的值和當(dāng)前定時器計數(shù)值CNT匹配時翻轉(zhuǎn)通道引腳輸出狀態(tài)

四個通道從上到下其 Pulse (比較寄存器的值CCR)依次為999、1999、2999和3999,這表示在一個時鐘500ms周期內(nèi),通道1、2、3和4分別在100ms、200ms、300ms和400ms的時候翻轉(zhuǎn)其對應(yīng)通道引腳的狀態(tài)

輸出比較四個通道 Output compare preload (輸出比較預(yù)裝載)均為Disable, CH Polarity (通道輸出有效狀態(tài))均為高電平,輸出比較的其他模式如其字面意思較為好理解,這里不再過多闡述,具體的參數(shù)配置如下圖所示

3.1.3、外設(shè)中斷配置

在Pinout & Configuration頁面左邊System Core/NVIC中勾選TIM4全局中斷,然后選擇合適的中斷優(yōu)先級即可

3.2、生成代碼

3.2.0、配置Project Manager頁面

單擊進(jìn)入Project Manager頁面,在左邊Project分欄中修改工程名稱、工程目錄和工具鏈,然后在Code Generator中勾選“Gnerate peripheral initialization as a pair of 'c/h' files per peripheral”,最后單擊頁面右上角GENERATE CODE生成工程,具體如下圖所示

詳細(xì)Project Manager配置內(nèi)容讀者可以閱讀“STM32CubeMX教程1 工程建立”實驗3.4.3小節(jié)

3.2.1、外設(shè)初始化函數(shù)調(diào)用流程

在生成的工程代碼主函數(shù)main()中調(diào)用了MX_TIM4_Init()函數(shù)完成了對TIM4基本定時器參數(shù),輸出比較通道1/2/3/4參數(shù)的配置

然后在HAL_TIM_OC_Init()函數(shù)中調(diào)用了HAL_TIM_OC_MspInit()函數(shù)對TIM4時鐘和中斷進(jìn)行了使能,并對中斷優(yōu)先級進(jìn)行了配置

最后在MX_TIM4_Init()函數(shù)末尾調(diào)用了HAL_TIM_MspPostInit()函數(shù)對TIM4的四個輸出比較通道引腳進(jìn)行了復(fù)用設(shè)置,從而完成了整個初始化過程

如下圖所示為TIM4輸出比較初始化的具體函數(shù)調(diào)用流程

3.2.2、外設(shè)中斷函數(shù)調(diào)用流程

再來看看輸出比較中斷回調(diào)函數(shù)流程,使能定時器全局中斷后在stm32f4xx_it.c中自動生成了TIM4的中斷處理函數(shù)TIM4_IRQHandler

TIM4_IRQHandler調(diào)用了HAL庫的定時器中斷處理函數(shù)HAL_TIM_IRQHandler,這個函數(shù)負(fù)責(zé)處理所有的定時器相關(guān)中斷

通過判斷中斷來源及相關(guān)寄存器,最終輸出比較事件完成的回調(diào)函數(shù)為HAL_TIM_OC_DelayElapsedCallback()(或者是HAL_TIM_PWM_PulseFinishedCallback()) (注釋1),該函數(shù)為虛函數(shù),需要用戶重新實現(xiàn)

如下圖所示為TIM4輸出比較中斷回調(diào)的具體函數(shù)調(diào)用流程

該實驗?zāi)繕?biāo)不需要動態(tài)修改輸出比較的參數(shù),因此筆者這里沒有重新在tim.c中重新實現(xiàn)該回調(diào)函數(shù)

需要提醒的是,輸出比較事件完成時會同時進(jìn)入HAL_TIM_OC_DelayElapsedCallback()和HAL_TIM_PWM_PulseFinishedCallback()兩個回調(diào)函數(shù)中,因此請注意此實驗確保注釋掉PWM輸出實驗中HAL_TIM_PWM_PulseFinishedCallback函數(shù)體內(nèi)動態(tài)修改占空比的代碼,否則將達(dá)不到預(yù)期效果

3.2.3、添加其他必要代碼

最后只需要在主函數(shù)中啟動定時器 (注釋2),啟動輸出比較通道就可以實現(xiàn)本實驗?zāi)繕?biāo),啟動代碼如下圖所示

源代碼如下

HAL_TIM_Base_Start(&htim4);
HAL_TIM_OC_Start(&htim4, TIM_CHANNEL_1);
HAL_TIM_OC_Start(&htim4, TIM_CHANNEL_2);
HAL_TIM_OC_Start_IT(&htim4, TIM_CHANNEL_3);
HAL_TIM_OC_Start_IT(&htim4, TIM_CHANNEL_4);

4、常用函數(shù)

/*啟動輸出比較通道*/
HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
 
/*停止輸出比較通道*/
HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
 
/*以中斷方式啟動輸出比較通道*/
HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
 
/*停止以中斷方式啟動的輸出比較通道*/
HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
 
/*輸出比較通道完成回調(diào)函數(shù)*/
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)

5、燒錄驗證

燒錄程序,上電單片機(jī)啟動后會發(fā)現(xiàn)開發(fā)板上的四個LED燈,按照綠、橙、紅和藍(lán)的順序依次點(diǎn)亮,然后不斷循環(huán),實際現(xiàn)象如下圖所示

使用邏輯分析儀監(jiān)測TIM4的四個輸出通道引腳,可以看出TIM4的四個通道輸出的電平翻轉(zhuǎn)周期均為500ms,并且4個通道間每個通道均間隔100ms相繼翻轉(zhuǎn)狀態(tài)

6、注釋詳解

注釋1:在生成PWM波的實驗中提到其使用的中斷回調(diào)函數(shù)HAL_TIM_PWM_PulseFinishedCallback也可以換成輸出比較完成的回調(diào)函數(shù)HAL_TIM_OC_DelayElapsedCallback,因為筆者發(fā)現(xiàn)在HAL庫的定時器中斷處理函數(shù)HAL_TIM_IRQHandler中,這兩個函數(shù)是同時調(diào)用的,也就是說調(diào)用函數(shù)1,函數(shù)2也會跟著調(diào)用,所以筆者認(rèn)為兩個都可以使用

注釋2:筆者發(fā)現(xiàn)在啟動輸出比較/輸入捕獲/PWM輸出時,可以不調(diào)用定時器啟動函數(shù),執(zhí)行HAL_TIM_xx_Start/HAL_TIM_xx_Start_IT函數(shù)時會自動啟動定時器;另外HAL_TIM_OC_Start/HAL_TIM_OC_Start_IT兩個輸出比較啟動函數(shù)和HAL_TIM_PWM_Start/HAL_TIM_PWM_Start_IT兩個PWM輸出啟動函數(shù),除了函數(shù)名和一些注釋外其函數(shù)體內(nèi)的代碼一模一樣文章來源地址http://www.zghlxwxcb.cn/news/detail-777167.html

到了這里,關(guān)于STM32CubeMX教程8 TIM 通用定時器 - 輸出比較的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32 HAL庫 STM32CubeMX -- TIM(定時器中斷)

    STM32 HAL庫 STM32CubeMX -- TIM(定時器中斷)

    STM32F1 系列中,除了一些特殊的型號,大部分F1有8 個定時器,分為 基本定時器,通用定時器和高級定時器 。 基本定時器TIM6 和TIM7 是一個16 位的只能向上計數(shù)的定時器,只能定時,沒有外部IO。 通用定時器TIM2/3/4/5 是一個16 位的可以向上/下計數(shù)的定時器,可以定時,可以輸出

    2024年02月16日
    瀏覽(18)
  • STM32中TIM定時器定時功能詳解(適用基本,通用,高級定時器)

    STM32中TIM定時器定時功能詳解(適用基本,通用,高級定時器)

    定時器有高級定時器、通用定時器、基本定時器三種類型。具體功能如下。 上面是每種定時器所具有的功能。 我們可以看到每種定時器都有一個定時功能,(可能是名字的由來吧)。當(dāng)然,每個定時器都可以來使用定時功能,但是我們往往在基本定時器和通用定時器上面使用

    2024年01月19日
    瀏覽(31)
  • STM32 HAL庫 STM32CubeMX -- TIM(定時器輸入捕獲)

    STM32 HAL庫 STM32CubeMX -- TIM(定時器輸入捕獲)

    輸入捕獲可以對 輸入的信號的上升沿、下降沿或者雙邊沿進(jìn)行捕獲 ,常用的有 測量輸入信號的脈寬 和 測量PWM 輸入信號的頻率 和 占空比 這兩種。 輸入捕獲的原理 就是,當(dāng)捕獲到信號的跳變沿的時候,把計數(shù)器CNT 的值鎖存到捕獲寄存器CCR 中,把前后兩次捕獲到的CCR 寄存

    2023年04月14日
    瀏覽(18)
  • STM32學(xué)習(xí)筆記 & 通用定時器TIM3~TIM5 13

    STM32學(xué)習(xí)筆記 & 通用定時器TIM3~TIM5 13

    通用定時器是一個通過可編程預(yù)分頻器驅(qū)動的 16 位自動裝載計數(shù)器構(gòu)成。 它適用于多種場合,包括測量輸入信號的脈沖長度 ( 輸入捕獲 ) 或者產(chǎn)生輸出波形 ( 輸出比較和PWM)。 使用定時器預(yù)分頻器和 RCC 時鐘控制器預(yù)分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間

    2024年02月05日
    瀏覽(19)
  • STM32:TIM定時器輸出比較(OC)

    STM32:TIM定時器輸出比較(OC)

    一、輸出比較簡介 1、輸出比較 OC(Output Comapre)輸出比較 輸出比較可以通過比較CNT(時基單元)和CCR(捕獲單元)寄存器值的關(guān)系,來對輸出電平進(jìn)行置1、置0或翻轉(zhuǎn)的操作,用于輸出一定頻率的占空比的PWM波形(CC是捕獲/比較的意思,R是Register,寄存器的意思),這個捕獲

    2024年02月05日
    瀏覽(24)
  • 野火STM32電機(jī)系列(五)Cubemx配置高級定時器TIM1

    野火STM32電機(jī)系列(五)Cubemx配置高級定時器TIM1

    鴿了一段時間,放心不會斷的哈,目前僅僅是顯示屏壞了,不影響后面項目 前文已經(jīng)配置了GPIO、編碼器 本節(jié)講解CubeMX高級定時器TIM1配置帶死區(qū)的6路互補(bǔ)的PWM 同時配置信號觸發(fā)后續(xù)ADC采集 板子引角的原理圖如下 對應(yīng)的: Motor1--U+--PA8--TIM1_CH1 Motor1--U---PB13--TIM1_CH1N Motor1--V+--

    2024年02月15日
    瀏覽(27)
  • STM32單片機(jī)(六)TIM定時器 -> 第三節(jié):TIM輸出比較

    STM32單片機(jī)(六)TIM定時器 -> 第三節(jié):TIM輸出比較

    ?? 專欄簡介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時才能融會貫通。 ?? 專欄適用人群 :適用于想要從零基礎(chǔ)開始學(xué)習(xí)入門單片機(jī),且有一定C語言基礎(chǔ)的的童鞋

    2024年02月09日
    瀏覽(30)
  • STM32使用CubeMx配置定時器輸出PWM

    STM32使用CubeMx配置定時器輸出PWM

    ????????項目中經(jīng)常使用到STM32來輸出PWM,每次配置過后過不了多久就會忘記,稍微需要對配置做出修改時都要翻很久的手冊,所以決定結(jié)合實例把PWM配置的詳細(xì)步驟記錄下來,這樣在下次配置時可以很快的撿起來。 ????????本文檔的行文結(jié)構(gòu)如下,首先,說明實際需

    2024年02月03日
    瀏覽(27)
  • STM32高級定時器輸出指定數(shù)量PWM(STM32CubeMx配置)

    STM32高級定時器輸出指定數(shù)量PWM(STM32CubeMx配置)

    高級定時器中有一個重復(fù)計數(shù)器,本實驗輸出指定個數(shù)PWM就是利用了重復(fù)計數(shù)器的特性,先來看看重復(fù)計數(shù)器的特性是什么: 計數(shù)器每次上溢或下溢都能使重復(fù)計數(shù)器減1,減到0時,再發(fā)生一次溢出就會產(chǎn)生更新事件 這是什么意思呢,這里舉個例子比如說我設(shè)定重復(fù)計數(shù)器的

    2024年02月02日
    瀏覽(22)
  • STM32F4使用高級定時器(TIM1和TIM8)輸出PWM問題

    STM32F4使用高級定時器(TIM1和TIM8)輸出PWM時要使用TIM_CtrlPWMOutputs使能PWM輸出,否則不會輸出PWM波形,這一點(diǎn)是和通用定時器輸出PWM不一樣的地方,通用定時器是不用配置TIM_CtrlPWMOutputs函數(shù)的。、

    2024年02月15日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包