寫在前面的話,為什么另需定時器進行微秒級延時。
1.在HAL固件庫中只有使用Systick作為延時計數(shù)器,毫秒級延時HAL_Delay()。為了增加精確的微秒級延時,一般都是更改Systick配置參數(shù),但HAL固件庫許多地方都使用了HAL_Delay()函數(shù),因此建議大家不要修改系統(tǒng)自動配置的Systick參數(shù);
2.個人覺得到加入操作系統(tǒng)時要占用Systick,而MCU系統(tǒng)自身的時基還要選擇其他的定時器,綜上所述,對Systick做的更改基本白搭;
因此采用定時器控制微妙延時的方法,是比較靈活的。需要用戶增加的代碼很少,經(jīng)濟實用,節(jié)能環(huán)保- -;
步驟1.配置時鐘
注意,一定要確定紅色部分標記的晶振頻率要與實際的晶振保持一致。
步驟2.配置定時器
在配置定時器時,需要明確以下幾點:
1. 定時器時鐘頻率;
2. 定時器溢出頻率;
首先,我們看一下比較重要的寄存器,如下所示:
用紅線標記的地方可得:
定時器工作頻率=**經(jīng)過內(nèi)部時鐘分頻的**APBx Timer Clock/PSC寄存器的值+1;
舉個栗子,如下:
即定時器的時鐘頻率為84MHz,不用用內(nèi)部時鐘分頻,要使定時器的工作頻率為1MHz(1us),如下:
1MHz=84MHz/(83+1);
定時器的溢出頻率=定時器的工作頻率/arr
關于arr重載值何時載入,即發(fā)生溢出更新事件后,才會載入新值;
相關配置如下:
系統(tǒng)時鐘配置,見上圖;
這里我使用了TIM14通用定時器來進行1us延時,配置如下:
步驟3.編寫代碼
void delay_us(uint16_t us)
{
uint16_t differ=0xffff-us-5;
/*為防止因中斷打斷延時,造成計數(shù)錯誤.
如從0xfffE開始延時1us,但由于中斷打斷
(此時計數(shù)器仍在計數(shù)),本因計數(shù)至0xffff)
便停止計數(shù),但由于錯過計數(shù)值,并重載arr值,
導致實際延時(0xffff+1)us
*/
HAL_TIM_Base_Start(&htim14);
__HAL_TIM_SetCounter(&htim14,differ);
while(differ<0xffff-5)
{
differ=__HAL_TIM_GetCounter(&htim14);
}
HAL_TIM_Base_Stop(&htim14);
}
因為采用的是向上計數(shù)方式,因此需要轉(zhuǎn)換一下,向下計數(shù)方式不用;
測試代碼如下:
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
delay_us(5);
}
/* USER CODE END 3 */
實際波形如下:
上一篇:STM32——系統(tǒng)滴答定時器
下一篇:STM32 CubeMX如何生成微秒(us)級延時
推薦閱讀
史海拾趣
隨著公司規(guī)模的擴大和技術的不斷積累,AVAGO公司開始尋求多元化的發(fā)展道路。除了繼續(xù)深耕半導體領域外,公司還積極拓展其他相關領域,如傳感器、無線通信等。同時,公司還與其他行業(yè)的領軍企業(yè)建立了緊密的戰(zhàn)略合作關系,共同推動技術創(chuàng)新和市場拓展。
在電子行業(yè)競爭日益激烈的背景下,AMP公司面臨著來自同行的巨大壓力。為了應對這一挑戰(zhàn),公司進行了戰(zhàn)略調(diào)整,將重心轉(zhuǎn)向高端電子產(chǎn)品的研發(fā)和生產(chǎn)。通過不斷提升產(chǎn)品性能和品質(zhì),AMP公司成功打造了多個高端品牌,并在細分市場中取得了顯著優(yōu)勢。此外,公司還積極拓展新的應用領域,為未來發(fā)展奠定了堅實基礎。
Celduc Relais公司注重企業(yè)文化的建設,倡導創(chuàng)新、協(xié)作、責任和卓越的核心價值觀。公司通過舉辦各類文化活動、培訓和學習等方式,提升員工的凝聚力和歸屬感。同時,公司還建立了完善的激勵機制,鼓勵員工積極創(chuàng)新、追求卓越。這一舉措為公司的發(fā)展提供了強大的文化支撐和人才保障。
這五個故事只是Celduc Relais公司發(fā)展歷程中的冰山一角,但它們足以展現(xiàn)出公司在技術創(chuàng)新、市場拓展、質(zhì)量管理、環(huán)保理念和企業(yè)文化建設等方面的努力和成就。正是這些因素的共同作用,使得Celduc Relais公司在電子行業(yè)中脫穎而出,成為一家備受尊敬的企業(yè)。
隨著國內(nèi)市場的逐漸飽和,AF International開始尋求海外市場的拓展。公司派遣專業(yè)的銷售團隊前往歐美、東南亞等地區(qū),與當?shù)仄髽I(yè)建立合作關系,推廣自己的產(chǎn)品。同時,AF International還積極參與國際電子展會,展示公司的最新技術和產(chǎn)品,吸引了眾多國際客戶的關注。通過不斷的努力,AF International成功打開了海外市場,實現(xiàn)了國際化發(fā)展的目標。
1970年,Corning Cable Systems公司憑借其創(chuàng)新技術,成功發(fā)明了世界上首款低損耗光纖。這一里程碑式的發(fā)明徹底改變了通信行業(yè)的面貌,推動了光纖通信的飛速發(fā)展。此后,公司不斷突破技術壁壘,提升光纖性能,為全球范圍內(nèi)的通信網(wǎng)絡建設提供了強有力的支持。
(畢業(yè)設計)基于FPGA的數(shù)據(jù)采集系統(tǒng) 亂了 一大堆的資料 可現(xiàn)在確實不知道該從何處下手了。。 求哪個做個這個題目的大哥大姐給個參考啊 謝謝了。。 我的郵箱:wendy0109@sina.com… 查看全部問答∨ |
專家好: 我的PDA前兩天在公司測試部門發(fā)現(xiàn),按鍵進入深度休眠后,不能馬上按鍵喚醒,只有等5~6秒(大約值)后才能馬上喚醒 我的按鍵休眠是設置的GPIO0,喚醒源也是GPIO0 具體的設置如下: &nbs ...… 查看全部問答∨ |
Windows Embedded CE 6.0幫助文檔中介紹,Establishing a Modem Connection的流程如下: lineInitializeEx ↓ lineOpen ↓ lineMakeCall ↓ lineGetMessage & ...… 查看全部問答∨ |
|
#include #include void main() { int i=7,j=2; float f=(float)i/j; SCON = 0x50; TMOD |= 0x20; TH1 = 0xf3; TR1 = 1; TI = 1; printf(\"%f\",f); while(1) {} } 這個程序為什么在運行的時候 在串口輸入串口 沒看到東西啊 ...… 查看全部問答∨ |
|
quartus ii中文用戶教程是全中文的,利于我們快速進入開發(fā)流程。配置與編程下載文檔為我們開發(fā)掃清前期障礙,順利入門。… 查看全部問答∨ |
|
上次發(fā)的CD機,怎么看都是很寒酸的東西…… 沒有外殼……板子和機器分離……哎…… 改進嘛~~總之,這一版不裸奔了~~ 先上圖~ 嗯……這一版的方案是:CD模擬輸出——放大器——聲音出來啦~~ 這樣搞,音質(zhì)還是欠佳,畢竟CD機芯不值錢。 注 ...… 查看全部問答∨ |