延时函数实现LED闪烁-STM32电控学习笔记04
day4:2022/9/22
【函数介绍】
我们传统的STM32开发中,都是直接对寄存器操作,从而实现功能,然而这种方式虽然编译效率很高,但是对单片机底层的知识要求也很高,操作前要查询各个外设的寄存器地址也很麻烦(大佬除外啊啊大佬除外),因此ST公司在后来开发了HAL库并大力推荐使用,在HAL库中封装着许多函数,它将最底层的东西封装起来,我们只需要调用一个个HAL库函数即可实现所需要的功能,例如上一篇帖子说的点灯,我们只有一行函数就实现了引脚的高电平输出,如果小伙伴想深入学习STM32底层原理的话,可以着重学习一下寄存器等,笔者觉得够用就行,大家自行bilibili即可。
上一篇帖子说了点亮LED灯就是给它一个高电平,那么反过来,想要它变暗就给它一个低电平,那倘若我们在高低电平的切换中加个几秒或者零点几秒的时间,那是不是可以做出LED灯闪烁的效果
因此为了实现这个功能,我们需要知道HAL库的延时函数,在这里我大概说几种(够用就行)大家也可以去看手册上的,会完整严谨一点,我这里纯粹为了简化。
1.计数延迟:我们对电机的精度要求并没有到毫秒微秒级别,所以一般不用这个函数,因此想要学习这个函数的小伙伴可以参考手册或者自行百度
2.nop函数延迟,原理和计时器类似
3.HAL_Delay()函数延迟,这个函数我们用的最多,括号内填的是一个数字,单位是毫秒ms,因此1000就代表1s,因此需要做出LED闪烁的效果,只需要按如下步骤循环
高电平 <--> 延迟1s <--> 低电平
while(1)
{
HAL_GPIOWritePin(GPIOH, GPIO_PIN_10,GPIO_PIN_SET);
HAL_GPIOWritePin(GPIOH, GPIO_PIN_11,GPIO_PIN_SET);
HAL_GPIOWritePin(GPIOH, GPIO_PIN_12,GPIO_PIN_SET);
//首先给RGB灯一个高电平,让它亮起来
HAL_Delay(1000);
//延迟1s
HAL_GPIOWritePin(GPIOH, GPIO_PIN_10,GPIO_PIN_RESET);
HAL_GPIOWritePin(GPIOH, GPIO_PIN_11,GPIO_PIN_RESET);
HAL_GPIOWritePin(GPIOH, GPIO_PIN_12,GPIO_PIN_RESET);
//再给RGB灯一个低电平,让它暗下去
HAL_Delay(1000);
//延迟1s
}
烧录进入单片机就发现,LED灯以1S为半周期不断闪烁。