在STM32CubeIDE中,此软件使用的是HAL库,而且对于时间延迟只有HAL_Delay()函数,也就是毫秒延迟函数。 下文将讲述如何在STM32CubeIDE中获取微秒延迟函数(HAL_Delay_us)。 首先选择一个定时器,要注意选择的是哪一个定时器。因为不同的定时器可能时钟频率不同。由于选择的时钟频率不同,后续程序中的数值要对应进行相应的修改。 本次作者使用的是TIM4定时器,使用的是STM32F437芯片,打开芯片数据手册可观察到TIM4挂载在APB1总线上。 

在图形化配置界面,打开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);
|