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

概述

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

文章目錄

環境:

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

1.配置定時器時鐘

  • 選擇時鐘源

6c5fc423354dc4fc8cfe0392357635a1.png

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

796b424f15f57924595bb76c2e5f3e23.png

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

a73f57b060dbefc522a7ddb43408940a.png

2.計數器時鐘頻率及計數模式

除了配置定時器的時鐘,還需要配置計數器時鐘頻率,我們要實現微秒延時,因此計數器時鐘頻率應該是1MHz,

而要實現還需要以下3個參數:

05240ec7fb536edd9a9300287ffb2492.png
  • 預分頻系數

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

bd42a8914918d790e712dca749d56fe7.png

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

因此:

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

因此預分頻系數為 83

  • 計數器模式

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

  • 自動重裝載值

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

7aafda7d7c8017214a97079adc86d79a.png

3.打開定時器中斷

e301b45e242b01413c453eb0c7a0593c.png

4.具體實現代碼

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

計數值耗盡回掉函數

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

5.代碼測試

主函數的主循環中:

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

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

67988323763376484dd91fa400a6a883.png

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

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

后續我還會繼續分享STM32CubeMX的相關操作,相信你會學到更多知識,我會在[ STM32CubeMX專欄 ]持續更新,來關注本專欄吧!

文章有幫助到你,點贊,收藏,關注我吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276376.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276376.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276376.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL索引類型一覽 讓MySQL高效運行起來

轉載鏈接&#xff1a;http://database.51cto.com/art/200910/156685.htm 索引是快速搜索的關鍵。MySQL索引的建立對于MySQL的高效運行是很重要的。下面介紹幾種常見的MySQL索引類型。 在數據庫表中&#xff0c;對字段建立索引可以大大提高查詢速度。假如我們創建了一個 mytabl…

431.chapter2.configure database mail

SQL Database Mail SQL 2005數據庫郵件是一種通過 Microsoft SQL Server 2005 Database Engine 發送電子郵件的企業解決方案。通過使用數據庫郵件&#xff0c;數據庫應用程序可以向用戶發送電子郵件。郵件中可以包含查詢結果&#xff0c;還可以包含來自網絡中任何資源的文件。數…

人臉識別拷勤門禁主板_捷易講解AI無感人臉識別考勤門禁終端設備在使用中的維護方法...

人臉識別考勤門禁終端設備雖然在出廠時&#xff0c;都有做密封處理&#xff0c;但面對細小的灰塵&#xff0c;并沒有做到百分百防塵。灰塵對于AI無感人臉識別考勤門禁終端設備是有一定的影響的&#xff0c;他會沉淀在主板上、屏幕上&#xff0c;影響設備散熱和正常工作&#xf…

【翻譯】How-To: Using the N* Stack, part 3

原文地址&#xff1a;http://jasondentler.com/blog/2009/08/how-to-using-the-n-stack-part-3/ Java – 一種代碼松散的XML 在我們學習 Fluent NHibernate 之前, 應該先了解下老式的 NHibernate 映射文件應該是怎樣寫的。 在一個典型的 NHibernate 配置中&#xff0c;你會有很…

你可能需要的網易前端三輪面經

關注若川視野, 回復"pdf" 領取資料&#xff0c;回復"加群"&#xff0c;可加群長期交流前言最近一個星期面了幾家公司&#xff0c;最后收獲了心儀的網易有道offer&#xff0c;于是推掉了其他的面試&#xff0c;至于一些其他大廠&#xff0c;并沒有投簡歷&am…

PHP yii 框架源碼閱讀(一)

轉載鏈接&#xff1a;http://www.th7.cn/Program/php/2012/04/03/67983.shtml 目錄文件 |- framework 框架核心庫 |-|- base 底層類庫文件夾&#xff0c;包 含CApplication(應用類&#xff0c;負責全局的用戶請求處理&#xff0c;它管理的應用組件集&#xff0c;將提供特定功…

復習.net/c#時的小文章之萬年草稿版 (全是基礎概念,請懂的人繞行)

必讀文&#xff1a;61條面向對象設計的經驗原則&#xff08;體會篇&#xff09; C#知識點集合 (面試必備)一、顯式(explicit)轉換和隱式(implicit)轉換的一般概念int i 100; Response.Write(i); // 這就是隱式 Response.Write(i.ToString()); // 這就是顯式 一般來講&#xff…

timertask run函數未執行_圖執行模式下的 TensorFlow 2

文 / 李錫涵&#xff0c;Google Developers Expert本文節選自《簡單粗暴 TensorFlow 2.0》盡管 TensorFlow 2 建議以即時執行模式(Eager Execution)作為主要執行模式&#xff0c;然而&#xff0c;圖執行模式(Graph Execution)作為 TensorFlow 2 之前的主要執行模式&#xff0c…

AJAX自學筆記01

從今天開始正式系統學習asp.net ajax了。XMLHttpRequest對象屬性&#xff1a;Number readyState (返回值4表示完成)Function onreadystatechange (執行回調函數)string responseText &#xff08;返回字符串型&#xff09;XMLDocument responseXML&#xff08;返回XML型&#x…

如何從 0 到 1 打造團隊 PC/H5 構建工具

關注若川視野, 回復"pdf" 領取資料&#xff0c;回復"加群"&#xff0c;可加群長期交流學習一、前言 大家好&#xff0c;我叫鰻魚&#xff0c;這次分享的主題是如何從 0 到 1 打造適合自己的構建部署方案。image.png先例行的自我介紹&#xff0c;大概 14 年…

PHP yii 框架源碼閱讀(二) - 整體執行流程分析

轉載鏈接&#xff1a;http://tech.ddvip.com/2013-11/1384432766205970.html 一 程序入口 <?php// change the following paths if necessary $yiidirname(__FILE__)./http://www.cnblogs.com/framework/yii.php; $configdirname(__FILE__)./protected/config/main.php;/…

HTTP狀態碼大全

完整的 HTTP 1.1規范說明書來自于RFC 2616&#xff0c;你可以在http://www.talentdigger.cn/home/link.php?urld3d3LnJmYy1lZGl0b3Iub3JnLw%3D%3D在線查閱。HTTP 1.1的狀態碼被標記為新特性&#xff0c;因為許多瀏覽器只支持 HTTP 1.0。你應只把狀態碼發送給支持 HTTP 1.1的客…

testng接口自動化測試_Java+Maven+TestNG接口(API)自動化測試教程(10) 使用 Jenkins 構建自動化測試持續集成...

現在代碼可以運行了&#xff0c;但是每次運行都需要我們手工去執行&#xff0c;并且測試報告也只能在執行測試的電腦上才能看到&#xff0c;我們希望能夠定時自動執行測試&#xff0c;并且能夠做到自動發送測試報告到相關人員的電子郵箱中。Jenkins 正好可以很好的完成以上訴求…

sql數據類型詳解

BCD碼1字符1/2字節 ASC碼1字符1字節 GB2312碼1字符2字節 BIG5碼1字符5字節 (1)二進制數據類型 二進制數據包括 Binary、Varbinary 和 Image  Binary 數據類型既可以是固定長度的(Binary),也可以是變長度的。  Binary[(n)] 是 n 位固定的二進制數據。其中&#xff0c;n 的取…

論公眾號內卷

關注若川視野, 回復"pdf" 領取資料&#xff0c;回復"加群"&#xff0c;可加群長期交流學習曾幾何時公眾號文章的標題單純且沒有套路七年前的我就是這樣僅僅把公眾號當做一個寫文章的博客平臺甚至是像有道云一樣的在線筆記平臺當時的標題是這樣子滴《hashma…

PHP 利用Mail_MimeDecode類提取郵件信息

轉載鏈接:http://blog.csdn.net/laijingyao881201/article/details/5512693 重點為one_mail函數。利用Mail_mimeDecode類從郵件中提取郵件頭和郵件正文。 <?php header("content-type:text/html; charsetUTF-8"); /** record kid words and insert into databa…

【轉】概要設計說明書

概要設計說明書 一&#xff0e; 引言 1&#xff0e; 編寫目的 從該階段開發正式進入軟件的實際開發階段&#xff0c;本階段完成系統的大致設計并明確系統的數據結構與軟件結構。在軟件設計階段主要是把一個軟件需求轉化為軟件表示的過程&#xff0c;這種表示只是描繪出軟件的…

程序異常異常代碼: 0xc0000005_Java基礎:看完這篇你還怕碰到異常嗎?

前言在日常的開發以及平時的學習練習中&#xff0c;異常相信對于大家來講并不陌生&#xff0c;但是對于異常的具體使用、底層實現以及分類等等可能并不是很了解。今天我就抽出了一點時間系統的整理了異常的各個知識點&#xff0c;希望能夠幫助到大家對于Java 異常的理解與學習。…

寫給初中級前端工程師的進階指南

學習一門新技術的時候&#xff0c;最大的苦惱之一&#xff0c;大概就是不知道從何入手。典型的情況是&#xff0c;你大概知道學會以后&#xff0c;這門技術可以幫你解決什么問題。但是&#xff0c;怎么才能學會、循序漸進的學習路線是什么、學習范圍有多大的深度和廣度、涉及到…

同一頁面中引入多個JS庫產生的沖突解決方案(轉)

發生JS庫沖突的主要原因&#xff1a;與jQuery庫一樣&#xff0c;許多JS庫都使用‘$’符號作為其代號。因此在一個頁面中引入多個JS庫&#xff0c;并且使用‘$’作為代號時&#xff0c;程序不能識別其代表哪個庫&#xff08;這個是我自己的解釋&#xff0c;但更深的原因就必須深…