一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在HAL庫(kù)中用定時(shí)器實(shí)現(xiàn)自定義延時(shí)函數(shù)delay_us()

STM32嵌入式開(kāi)發(fā) ? 來(lái)源:ARM與嵌入式 ? 作者:保生 ? 2022-09-21 10:33 ? 次閱讀

STM32程序從標(biāo)準(zhǔn)庫(kù)移植到HAL庫(kù)的時(shí)候,會(huì)發(fā)現(xiàn)HAL庫(kù)中只有一個(gè)毫秒級(jí)延時(shí)函數(shù)HAL_Delay(),而沒(méi)有微秒級(jí)延時(shí)delay_us(),本文就在HAL庫(kù)中用定時(shí)器實(shí)現(xiàn)這個(gè)delay_us()。

如下圖,找到HAL_Delay()函數(shù)定義的地方,發(fā)現(xiàn)這個(gè)函數(shù)有__weak標(biāo)識(shí),是一個(gè)弱化函數(shù),可以被重寫(xiě)。

3d7cb228-2f57-11ed-ba43-dac502259ad0.png

由于HAL庫(kù)許多地方都使用了HAL_Delay()函數(shù),為了避免惹麻煩建議不重寫(xiě),可以用定時(shí)器自己寫(xiě)一個(gè)延時(shí)函數(shù)。

開(kāi)發(fā)軟件用的STM32CubeIDE,此Cube軟件的使用方法可以參考這篇文章:STM32外部中斷實(shí)例。

項(xiàng)目設(shè)置,勾選后每個(gè)外設(shè)的源文件.c、頭文件.h分別成雙出現(xiàn)。

3d9ce480-2f57-11ed-ba43-dac502259ad0.png

我用的是ISP編程,選擇的是Serial Wire。

3db61ea0-2f57-11ed-ba43-dac502259ad0.png

配置外部高速時(shí)鐘

3dcaba90-2f57-11ed-ba43-dac502259ad0.png

為了觀察效果,開(kāi)一個(gè)LED,它在PC0管腳,低電平點(diǎn)亮。

3ddfd0e2-2f57-11ed-ba43-dac502259ad0.png

3df15600-2f57-11ed-ba43-dac502259ad0.png

本實(shí)例用到了TIM7,它掛在APB1上,時(shí)鐘為72MHz。

3e05c11c-2f57-11ed-ba43-dac502259ad0.png

激活TIM7,設(shè)置如下:

預(yù)分頻PSC為71,分頻后TIM7時(shí)鐘為72/(71+1)=1MHz

計(jì)數(shù)模式為向上

計(jì)數(shù)周期為1,就是說(shuō)定時(shí)器一個(gè)周期后就溢出了,而定時(shí)器一個(gè)周期的時(shí)間是定時(shí)器時(shí)鐘頻率的倒數(shù),1/1M,也就是1us。

3e20df74-2f57-11ed-ba43-dac502259ad0.png

生成代碼。

3e382fa8-2f57-11ed-ba43-dac502259ad0.png

在tim.c的用戶代碼區(qū)添加如下代碼。

3e4a4242-2f57-11ed-ba43-dac502259ad0.png

在tim.h的user code處添加如下引用代碼,其中HAL_Delay_us()是微秒級(jí)延時(shí)函數(shù),HAL_Delay_ms()是毫秒級(jí)延時(shí)函數(shù)。

3e64afb0-2f57-11ed-ba43-dac502259ad0.png

main.c中添加如下代碼,測(cè)試效果。

3e741900-2f57-11ed-ba43-dac502259ad0.png

上面代碼連續(xù)用了13個(gè)延時(shí)函數(shù),是為了湊夠1秒方便觀察。另外延時(shí)函數(shù)的參數(shù)是uint16_t,無(wú)符號(hào)短整型,數(shù)值范圍為0~65535,數(shù)值超限會(huì)報(bào)錯(cuò),如下圖。

3e8d02ee-2f57-11ed-ba43-dac502259ad0.png

編譯代碼。

3ead946e-2f57-11ed-ba43-dac502259ad0.png

下載到開(kāi)發(fā)板可以看到LED每秒亮一次,STM32CubeIDE軟件生成hex文件的方式,請(qǐng)移步此文:STM32單片機(jī)中Hex、Bin文件的區(qū)別與應(yīng)用。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2284

    文章

    10986

    瀏覽量

    361437
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3273

    瀏覽量

    116808
  • 延時(shí)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    10154
  • HAL庫(kù)
    +關(guān)注

    關(guān)注

    1

    文章

    121

    瀏覽量

    6669

原文標(biāo)題:STM32的HAL庫(kù)實(shí)現(xiàn)自定義延時(shí)函數(shù)delay_us(),文末附代碼

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何添加自定義單板

    開(kāi)發(fā)過(guò)程中,用戶有時(shí)需要?jiǎng)?chuàng)建自定義板配置。本節(jié)將通過(guò)一個(gè)實(shí)例講解用戶如何創(chuàng)建屬于自己的machine,下面以g2l-test.conf為例進(jìn)行說(shuō)明。
    的頭像 發(fā)表于 03-12 14:43 ?422次閱讀

    STM32C031C6在按鍵中斷處理程序中使用HAL_Delay()延時(shí)函數(shù),程序則無(wú)法運(yùn)行怎么解決?

    測(cè)試STM32C031C6開(kāi)發(fā)板的長(zhǎng)短按鍵,在按鍵中斷處理程序中使用HAL_Delay()延時(shí)函數(shù),程序則無(wú)法運(yùn)行,類似進(jìn)入了死循環(huán),于是則添加了延時(shí)
    發(fā)表于 03-07 06:50

    Altium Designer 15.0自定義元件設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《Altium Designer 15.0自定義元件設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 01-21 15:04 ?0次下載
    Altium Designer 15.0<b class='flag-5'>自定義</b>元件設(shè)計(jì)

    think-cell:自定義think-cell(四)

    定義這些設(shè)置。 PowerPoint 幻燈片母版視圖中,創(chuàng)建新的自定義版式。您將復(fù)制與 think-cell 議程幻燈片的所需外觀最匹配的現(xiàn)有自定義布局之一。 將新的
    的頭像 發(fā)表于 01-13 10:37 ?358次閱讀
    think-cell:<b class='flag-5'>自定義</b>think-cell(四)

    如何快速入門(mén)HAL庫(kù)編程 HAL庫(kù)與裸機(jī)編程的比較

    如何快速入門(mén)HAL庫(kù)編程 要快速入門(mén)HAL庫(kù)編程,可以遵循以下步驟: 了解基礎(chǔ)知識(shí) : 掌握C語(yǔ)言編程基礎(chǔ),包括變量、數(shù)據(jù)類型、函數(shù)、指針等
    的頭像 發(fā)表于 12-02 11:39 ?899次閱讀

    GD32VF103使用核內(nèi)部timer定時(shí)器實(shí)現(xiàn)延時(shí)函數(shù),為什么系統(tǒng)時(shí)鐘要除以4?

    使用核內(nèi)部timer定時(shí)器實(shí)現(xiàn)延時(shí)函數(shù),為什么系統(tǒng)時(shí)鐘要除以4? 復(fù)制 void delay_1ms(uint32_t count) {
    發(fā)表于 09-27 09:54

    STM32CUBEMX(5)--自定義紅外NEC解碼,定時(shí)器TIM捕獲方式

    */ HAL_TIM_Base_Start_IT(&htim1);//啟動(dòng)定時(shí)器 HAL_TIM_IC_Start_IT(&htim1,TIM_CHANNEL_2);//
    發(fā)表于 09-05 16:19

    EtherCAT運(yùn)動(dòng)控制PT/PVT實(shí)現(xiàn)用戶自定義軌跡規(guī)劃

    EtherCAT運(yùn)動(dòng)控制PT/PVT實(shí)現(xiàn)用戶自定義軌跡規(guī)劃。
    的頭像 發(fā)表于 08-15 11:49 ?1006次閱讀
    EtherCAT運(yùn)動(dòng)控制<b class='flag-5'>器</b>PT/PVT<b class='flag-5'>實(shí)現(xiàn)</b>用戶<b class='flag-5'>自定義</b>軌跡規(guī)劃

    定時(shí)器回調(diào)函數(shù)能不能用ICACHE_FLASH_ATTR定義?

    非 OS SDK 中斷處理函數(shù)中,請(qǐng)勿使用任何 ICACHE_FLASH_ATTR 定義函數(shù)。 請(qǐng)問(wèn): 1、定時(shí)器和hw
    發(fā)表于 07-22 06:33

    如何在IDF框架中使用自定義的靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)?

    基于商業(yè)需要,我們需要在 ESP-IDF v4.0-rc 這個(gè)版本的IDF中開(kāi)發(fā)與使用自定義庫(kù),有如下問(wèn)題請(qǐng)協(xié)助: 1如何利用IDF框架編寫(xiě)自定義靜態(tài)庫(kù)和動(dòng)態(tài)
    發(fā)表于 06-25 07:57

    ESP32下如何加自定義Python庫(kù)?

    我看官方有提供Micropython的bin文件,但我想根據(jù)自己外設(shè)擴(kuò)充一下Python庫(kù),這個(gè)應(yīng)該從哪里入手? 之前做過(guò)RTT系統(tǒng)的python庫(kù)擴(kuò)充,RTT有提供Micropython的源代碼,直接在里面加自己的庫(kù)就行 ES
    發(fā)表于 06-18 06:27

    ESP32如何使用庫(kù)中的HF相關(guān)函數(shù)發(fā)送自定義AT指令?

    請(qǐng)問(wèn)如何使用庫(kù)中的HF相關(guān)函數(shù)發(fā)送自定義AT指令?
    發(fā)表于 06-17 07:43

    如何使用定時(shí)器寫(xiě)一個(gè)延時(shí)函數(shù)

    不用中斷,就是單純一個(gè)用作延時(shí)函數(shù),寫(xiě)了一個(gè)下午也沒(méi)搞明白,可能我理解出錯(cuò)了 void delay_us(int us) { timer_config_t
    發(fā)表于 06-14 06:03

    HarmonyOS開(kāi)發(fā)案例:【 自定義彈窗】

    基于ArkTS的聲明式開(kāi)發(fā)范式實(shí)現(xiàn)了三種不同的彈窗,第一種直接使用公共組件,后兩種使用CustomDialogController實(shí)現(xiàn)自定義彈窗
    的頭像 發(fā)表于 05-16 18:18 ?1722次閱讀
    HarmonyOS開(kāi)發(fā)案例:【 <b class='flag-5'>自定義</b>彈窗】

    TSMaster 自定義 LIN 調(diào)度表編程指導(dǎo)

    LIN(LocalInterconnectNetwork)協(xié)議調(diào)度表是用于LIN總線通信中的消息調(diào)度的一種機(jī)制,我們收到越來(lái)越多來(lái)自不同用戶希望能夠通過(guò)接口實(shí)現(xiàn)自定義LIN調(diào)度表的需求。所以
    的頭像 發(fā)表于 05-11 08:21 ?976次閱讀
    TSMaster <b class='flag-5'>自定義</b> LIN 調(diào)度表編程指導(dǎo)