在STM32CubeIDE中,此软件使用的是HAL库,而且对于时间延迟只有HAL_Delay()函数,也就是毫秒延迟函数。
下文将讲述如何在STM32CubeIDE中获取微秒延迟函数(HAL_Delay_us)。
首先选择一个定时器,要注意选择的是哪一个定时器。因为不同的定时器可能时钟频率不同。由于选择的时钟频率不同,后续程序中的数值要对应进行相应的修改。
本次作者使用的是TIM4定时器,使用的是STM32F437芯片,打开芯片数据手册可观察到TIM4挂载在APB1总线上。
文章来源地址https://uudwc.com/A/ABw4V
在图形化配置界面,打开Clock Configuration 可以观察到TIM5挂载的APB1时钟频率是多少。此时作者配置的是90MHz,如下图所示。
在TIM5配置中选中Internal Clock,然后将预分频系数设置成90-1=89(因为此处是从0开始计数)
Counter Period 改成1
点击生成代码
在tim.c中添加如下代码
void HAL_Delay_us(uint16_t us)
{
uint16_t delay = 0xffff-us-5; //从此数进行计数,如计数了65535次则刚好1us
HAL_TIM_Base_Start(&htim5); //开启计数器
__HAL_TIM_SetCounter(&htim5,delay); //设置计数器
while(delay<0xffff-5)
{
delay = __HAL_TIM_GetCounter(&htim5); 获取当前计数值
}
HAL_TIM_Base_Stop(&htim5);
}
在tim.h中添加如下代码
void HAL_Delay_us(uint16_t us);
至此得到了微秒延迟的函数,只需要调用HAL_Delay_us()函数即可
测试:
使用引脚高低电平翻转+延迟函数,如设置正确的话将实现方波信号。
(测试前需要对引脚进行使能)
测试代码如下:
在main.c的While循环中添加如下代码:
//us延时测试
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);
HAL_Delay_us(1000);
打开示波器,接上设置的相应引脚,烧录程序,可得如下图示波形:
文章来源:https://uudwc.com/A/ABw4V