HAL只提供了ms級(jí)的延時(shí),但有些特殊場(chǎng)景,比如與通信速率較慢的設(shè)備通信時(shí),會(huì)需要用到us級(jí)延時(shí)。STM32標(biāo)準(zhǔn)庫(kù)一般是使用系統(tǒng)嘀嗒定時(shí)器來(lái)進(jìn)行微妙級(jí)別的延時(shí),而HAL庫(kù)將SysTick定時(shí)器用做了庫(kù)函數(shù)的超時(shí)定時(shí)器,使用的地方非常多,自己修改代碼使用嘀嗒定時(shí)器的話就會(huì)引起錯(cuò)亂,所以此時(shí)就需要自己實(shí)現(xiàn)一個(gè)us級(jí)別延時(shí)函數(shù)。
這里介紹一種使用定時(shí)器設(shè)計(jì)us級(jí)延時(shí)函數(shù)的方法。
思路:我們將定時(shí)器設(shè)置為1MHZ的計(jì)數(shù)頻率,這樣定時(shí)器計(jì)一個(gè)數(shù)就是1us,我們就可以通過(guò)定時(shí)器計(jì)數(shù)值得知計(jì)時(shí)時(shí)間。
以使用TIM1為例,這里我們采用STM32F103內(nèi)部8MHz晶振,故需要設(shè)置預(yù)分頻系數(shù)PSC為8-1=7。同時(shí)配置PA1為GPIO輸出模式,之后用于測(cè)試延時(shí)函數(shù)的效果。
Untitled
編寫微秒延時(shí)函數(shù):
/* USER CODE BEGIN PD */
#define DLY_TIM_Handle (&htim1) // Timer handle
/* USER CODE END PD */
/* USER CODE BEGIN PFP */
void delay_us(uint16_t nus);
/* USER CODE END PFP */
/* USER CODE BEGIN 4 */
void delay_us(uint16_t nus)
{
__HAL_TIM_SET_COUNTER(DLY_TIM_Handle, 0); // set the counter value a 0
__HAL_TIM_ENABLE(DLY_TIM_Handle); // start the counter
// wait for the counter to reach the us input in the parameter
while (__HAL_TIM_GET_COUNTER(DLY_TIM_Handle) < nus);
__HAL_TIM_DISABLE(DLY_TIM_Handle); // stop the counter
}
/* USER CODE END 4 */
編寫微秒延時(shí)函數(shù)測(cè)試程序,使PA1高低電平間隔100us轉(zhuǎn)換一次:
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
delay_us(100);
}
/* USER CODE END 3 */
燒錄程序,通過(guò)邏輯分析儀觀察PA1電平變化:
可以看到PA1高電平持續(xù)時(shí)間和低電平持續(xù)時(shí)間都和符合100us的預(yù)設(shè),延時(shí)效果較好。
上一篇:ROS與STM32串口通信代碼
下一篇:stm32怎么讀取io口輸入電平
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 英飛凌微控制器:以全新實(shí)惠套件和強(qiáng)大開(kāi)發(fā)環(huán)境為開(kāi)發(fā)者提供支持
- iTOP-i.MX6開(kāi)發(fā)板設(shè)備數(shù)驅(qū)動(dòng)Menuconfig的用法
- 迅為IMX6ULL開(kāi)發(fā)板Qt for Android搭建開(kāi)發(fā)環(huán)境
- 迅為i.MX8M mini開(kāi)發(fā)板Windots QT系統(tǒng)開(kāi)發(fā)環(huán)境搭建
- 迅為IMX8MM開(kāi)發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開(kāi)發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開(kāi)發(fā)板支持4G以上文件系統(tǒng)擴(kuò)展
- 迅為IMX8MM開(kāi)發(fā)板Yocto系統(tǒng)設(shè)置開(kāi)機(jī)自啟動(dòng)
- 迅為IMX6Q開(kāi)發(fā)板 Buildroot文件系統(tǒng)mqtt測(cè)試
- SC18IM704-EVB: UART轉(zhuǎn)I2C橋接評(píng)估板 new
- NCP11187A65P45WGEVB:使用 NCP11187A65 的白色家電和工業(yè)設(shè)備的 45 W 輔助電源
- 四足機(jī)器人控制板QR-Board
- LT6656BCDC-3、3V ADC 電壓基準(zhǔn)和橋式激勵(lì)電源的典型應(yīng)用
- 直尺20cm
- CYC1000,基于 10CL025YU256C8G Cyclone 10 LP FPGA 的最低成本 Cyclone 10 LP 入門板
- 電腦usb外拓5V板
- LT1469-2 的典型應(yīng)用 - 雙路 200MHz、30V/us 16 位精確 AV = 2 運(yùn)算放大器
- C8051F560DK,C8051F574 8051 MCU 工業(yè)應(yīng)用開(kāi)發(fā)系統(tǒng)
- 具有跟蹤功能的 LTM4647EY 6V 至 15V 輸入、1.0V 和 1.2V 輸出的典型應(yīng)用電路
- 看視頻抽好禮:Type-C承載的高速串行標(biāo)準(zhǔn),功能多樣,挑戰(zhàn)也不小
- 有獎(jiǎng)直播:超小型封裝 TI MSPM0 MCU 可優(yōu)化設(shè)計(jì)空間,實(shí)現(xiàn)更多可能
- vishay消費(fèi)知識(shí)大闖關(guān)正式開(kāi)始
- 免費(fèi)申請(qǐng)測(cè)評(píng) | RDK X3機(jī)器人開(kāi)發(fā)套件
- 和風(fēng)暖陽(yáng),我與春天有個(gè)約會(huì)!
- 更好的供電方式:使用更小、更輕的電源模塊加速車輛電氣化
- 【摸黑搶樓】贏大禮,關(guān)于示波器的狂想曲!正式開(kāi)搶!!!
- 芯幣競(jìng)價(jià)全新回歸 抱回驚喜迎接新年
- 只為關(guān)心你——Maxim 智能可穿戴 IC 解決方案 白皮書免費(fèi)下載
- eps燈亮如何自己修_eps燈亮方向盤打不動(dòng)怎么回事
- 新型無(wú)人駕駛汽車將利用太陽(yáng)能和鋰離子電池供電
- LeddarTech攜手寧波舜宇加速LiDAR應(yīng)用中的部署
- 大眾投資中國(guó)電池廠的傳聞?wù)嫦?/a>
- 打造燈光魔術(shù)師 福特推出智能燈光系統(tǒng)技術(shù)
- 中國(guó)首條刷臉乘車地鐵采用奧比中光3D人臉識(shí)別技術(shù)
- 海爾兒童專用霧化器:免去孩子打針吃藥的苦惱
- 實(shí)時(shí)了解路況 專利顯示蘋果開(kāi)發(fā)Apple Car新型雷達(dá)系統(tǒng)
- 用 AI 對(duì)抗森林火災(zāi),消防員未來(lái)或許會(huì)更加安全了
- 補(bǔ)貼降溫后 新能源汽車的未來(lái)究竟在何方?
- 迅為3399開(kāi)發(fā)板Linux固件編譯-安裝源碼依賴包-編譯Linux源碼
- quarus ii中的signal tap是否可以復(fù)制多個(gè)node
- Pads 9.5造件問(wèn)題詢問(wèn)
- 我的jlink破解失敗經(jīng)歷
- 觀點(diǎn):LED常被忽略的一大優(yōu)點(diǎn)
- 直播……EEWORLD&ST 智能產(chǎn)品線下研討會(huì)[深圳]
- 求助
- 世界各國(guó)的青少年足球運(yùn)動(dòng)
- 2011國(guó)賽中FPGA的問(wèn)題
- 現(xiàn)在的新能源電車只是過(guò)渡,氫能源車才是終點(diǎn)?