
STM32程序从标准库移植到HAL库的时候,会发现HAL库中只有一个毫秒级延时函数HAL_Delay(),而没有微秒级延时delay_us(),本文就在HAL库中用定时器实现这个delay_us()。 如下图,找到HAL_Delay()函数定义的地方,发现这个函数有__weak标识,是一个弱化函数,可以被重写。 ![]() 由于HAL库许多地方都使用了HAL_Delay()函数,为了避免惹麻烦建议不重写,可以用定时器自己写一个延时函数。 项目设置,勾选后每个外设的源文件.c、头文件.h分别成双出现。- k8 R4 h4 R( B, h9 h6 {, W ![]() 我用的是ISP编程,选择的是Serial Wire。 ![]() 配置外部高速时钟。 ![]() 为了观察效果,开一个LED,它在PC0管脚,低电平点亮。 ![]() ![]() 本实例用到了TIM7,它挂在APB1上,时钟为72MHz。( w( d B2 Y! m+ h3 f e, y ![]() 激活TIM7,设置如下:
![]() 生成代码。 ![]() 在tim.c的用户代码区添加如下代码。 ![]() 在tim.h的user code处添加如下引用代码,其中HAL_Delay_us()是微秒级延时函数,HAL_Delay_ms()是毫秒级延时函数。 ![]() main.c中添加如下代码,测试效果。8 X: `+ S- x W3 O( ]4 v* i+ l ![]() 上面代码连续用了13个延时函数,是为了凑够1秒方便观察。另外延时函数的参数是uint16_t,无符号短整型,数值范围为0~65535,数值超限会报错,如下图。 ![]() 编译代码。 ![]() |
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命
从STM32 MPU产品看嵌入式系统中微处理器的新变化
【Hot!】STM32全系列开发板都支持Arduino开发,你知道吗?
【经验分享】STM32 HAL库移植FreeModbus详细步骤