日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32cubemx中文_用 STM32 通用定时器做微秒延时函数(STM32CubeMX版本)

發(fā)布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32cubemx中文_用 STM32 通用定时器做微秒延时函数(STM32CubeMX版本) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

? 在使用 DHT11 的時候,時序通信需要微秒來操作,STM32CubeMX 自帶一個系統(tǒng)時鐘,但是實現(xiàn)的是毫秒級別的。因此就自己用通用計時器實現(xiàn)一個。

文章目錄

環(huán)境:

  • 開發(fā)板:STM32F4探索者(正點原子)

1.配置定時器時鐘

  • 選擇時鐘源

這里選擇的是內(nèi)部時鐘,來自 RCC 的TIMxCLK,在通用定時器框圖中我們可以看到如下:

而我們可以在 STM32F4xx中文參考手冊中找到,TIM2 在外設(shè)總線1(APB1上),因此其時鐘為 84MHz,如下圖所示:

2.計數(shù)器時鐘頻率及計數(shù)模式

除了配置定時器的時鐘,還需要配置計數(shù)器時鐘頻率,我們要實現(xiàn)微秒延時,因此計數(shù)器時鐘頻率應(yīng)該是1MHz,

而要實現(xiàn)還需要以下3個參數(shù):

  • 預(yù)分頻系數(shù)

根據(jù)STM32F4xx中文參考手冊中的時鐘頻率計算,如下圖所示:

其中fCK_PSC就是通用定時器框圖中的CK_PSC, 即值為84MHz,而我們所要的計數(shù)器時鐘頻率1MHz

因此:

PSC[15:0] = (fCK_PSC/CK_CNT) - 1 = (84/1) - 1= 83

因此預(yù)分頻系數(shù)為 83

  • 計數(shù)器模式

計數(shù)器這里采用向下計數(shù)模式,也就是 如設(shè)置計數(shù)值為 1000,那么每隔一個微秒,就減一,一直減到 0

  • 自動重裝載值

雖然我們并不使用自動重裝載功能,但是,我們還是要對自動重裝載寄存器進(jìn)行賦值且不賦值為0即可,但是我測試時發(fā)送,如果為1,延時會出現(xiàn)偏差,因此這里賦值為 2,依據(jù)如下:

3.打開定時器中斷

4.具體實現(xiàn)代碼

volatile bool elapsed = false; //用于判斷設(shè)置的計數(shù)值是否耗盡(向下計數(shù)模式),耗盡時,在中斷中獎會設(shè)置為truevoid setState(bool state) {elapsed = state; }bool getState() {return elapsed; }void usDelay(uint32_t time) {__HAL_TIM_SetCounter(&htim2,time); //設(shè)置計數(shù)值setState(false); HAL_TIM_Base_Start_IT(&htim2); //開啟定時器while(!getState()); //判斷計數(shù)值是否耗盡HAL_TIM_Base_Stop_IT(&htim2); //關(guān)閉定時器}

計數(shù)值耗盡回掉函數(shù)

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if (htim->Instance == TIM2) {setState(true);}}

5.代碼測試

主函數(shù)的主循環(huán)中:

while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */printf("hello usDelay");for(int i = 0; i < 1000; i++){usDelay(1000);}}

在串口調(diào)試助手中,可以看到如下,一秒打印一條語句

測試代碼已上傳我的博客,歡迎來下載。

后續(xù)也將分享如何使用該函數(shù),讀取 DHT11 溫濕度傳感器的值

后續(xù)我還會繼續(xù)分享STM32CubeMX的相關(guān)操作,相信你會學(xué)到更多知識,我會在[ STM32CubeMX專欄 ]持續(xù)更新,來關(guān)注本專欄吧!

文章有幫助到你,點贊,收藏,關(guān)注我吧!

總結(jié)

以上是生活随笔為你收集整理的stm32cubemx中文_用 STM32 通用定时器做微秒延时函数(STM32CubeMX版本)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。