HAL库中有毫秒级的延迟,但是实际运用开发中我们往往还需要微秒级的延迟。
本章将利用定时器实现微秒级的延迟。
步骤
- 将频率设置为80MHz
调节预分频,配置
CTRL + s 保存代码
自动生成代码如下:
在tim.c中加入函数,并在tim.h中声明函数
延迟代码
void delay_us(uint16_t us)
{
uint16_t differ = 60000-us;
HAL_TIM_Base_Start(&htim6);
__HAL_TIM_SET_COUNTER(&htim6,differ);
while(differ<60000)
{
differ=__HAL_TIM_GET_COUNTER(&htim6);
}
HAL_TIM_Base_Stop(&htim6);
}
在while循环中使用该函数
int i;
//灯的初始状态为高电平,即灭的状态,在这里将他点亮
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET);
for(i=0;i<1000;i++)
{
delay_us(1000);
}
//控制灯的亮灭
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);
for(i=0;i<1000;i++)
{
delay_us(1000);
}
烧录并运行,就会发现对应的灯一秒亮一次