本项目讲解所用工程均使用stm32f103C8T6芯片HAL库版本。
目录
原理讲解
本节内容我们就上一节LED灯闪烁实验的基础讲解一下流水灯实验。流水灯就是一串LED灯,它们一个接一个地亮起来,然后一个接一个地灭掉,看起来就像水在流动一样,所以叫流水灯。这些灯泡是由微控制器控制的,由微控制器来告诉每个灯泡什么时候该亮,什么时候该灭,通过这样的控制,就形成了漂亮的光流动效果。
初始化配置
接下来我们利用Cubemx进行HAL库的初始化配置,建立工程的部分我们这里就直接快速完成,不了解的同学可以看我之前的新建工程部分零基础学STM32(二)-新建工程-CSDN博客。
创建完工程后首先是时钟的配置,将时钟设置为外部高速时钟。
再配置相应时钟树,将总频设置为32MHz。
设置完时钟树,我们初始化对应的IO口用于控制高低电平的输出,为了实验现象明显我们需要多设置打开几个IO口并外接LED灯。图中,可以看到,我们这里设置为GPIO_Output(输出模式),绿色即为设置完成的引脚,之后再将几个GPIO引脚的初始状态设置为Low(低电平),Output Push Pull(推挽输出),No pull_up and no pull_down(浮空模式),最大速度为Low(最低),就此IO口的初始化就算完成了。
紧接着输出工程,将必要的内容勾选和填写一下即可。注意!!!文件路径中不要出现中文
打开工程即可编写代码
直接在主函数中运用闪烁电路所学习的函数即可,不知道相关函数的同学可以查看上一节内容零基础学STM32(四)-LED灯闪烁实验-CSDN博客,我们这里还是只需要使用输出函数。
HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
我们控制第一个LED灯点亮然后熄灭,紧接着第二个LED灯点亮然后熄灭,依次往复就可以达到流水灯效果,流水灯的流动速度我们可以通过增减延时来进行控制。
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);
HAL_Delay(500);
我们把这段代码加入到他的while循环中让他循环往复
再进行编译下载即可
硬件方面我们需要将STM32最小板插入面包板,然后用杜邦线引出VCC,将LED灯一端接入VCC,另一端接入对应的IO口,通上电即可。接线图如下
以上就是流水灯实验的全部内容。