关注 + 点赞 不错过精彩内容

大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作!
三、LED流水灯
依据电路图连接电路

复制LED闪烁的工程,改个名字叫3-2 LED流水灯

修改部分代码,因为我们连接的都是GPIOA的端口,所以第一句不用变的

接着初始化端口的这一部分,我们流水灯用的是GPIOA的0到7号端口,所以这里要加一些端口,如图所示这样就可以把这三个端口初始化了

为什么可以这样用“|”操作?
在stm32f10x_gpio.h文件中可以看到,各个端口的定义,将各位转化为二进制是0000000000000001、0000000000000010、0000000000000100,这里每一个端口对应着一个位,按位或的操作就相当于0000000000000111

最后,我们还可以看到,这里有个GPIO_Pin_All,它对应的数据就是0xFFFF,也就是所有位都为1,这样就相当于选中了所有的引脚

在这里,除了这个GPIO_Pin可以用按位或的操作方式外,这个时钟控制的这一项,也是可以用按位或的操作有式来选择多个外设的

介绍完按位或,我们就可以在这里使用按位或把这8个引脚都选上,这样就把16个端口全部配置为推挽输出模式

在while中,为了实现同时控制16个端口,我们就可以使用GPIO_Write这个函数了,我们复制过来,第一个参数是GPIOx,我们直接写GPIOA

第二个转到定义看一下,这第二个参数就是直接写到GPIO的ODR寄存器里的

所以我们可以写0x0001,对应二进制就是0000 0000 0000 0001,因为C语言不支持直接写二进制,所以这里只能转换为十六进制来写,这16个二进制分别对应PA0到PA15总共16个端口,最低位对应PA0,然后往上依次是PA1、PA2,一直到PA15

因为是低电平点亮,所以前面再加一个按位取反的符号,这样就是第一个LED点亮,其他都熄灭了

以此类推可以实现8个Led灯的点亮,再加上Delay延时函数,就可以实现8个Led灯的循环点亮,想快一点的话可以让Delay函数延时时间改为100,如:Delay_ms(100);
#include "stm32f10x.h" // Device header#include "delay.h" int main(void){ GPIO_InitTypeDef GPIO_Initstructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO_Initstructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; 按或取 GPIO_Initstructure.GPIO_Pin = GPIO_Pin_All; GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_Initstructure); while(1) { GPIO_Write(GPIOA, ~0x0001); //0000 0000 0000 0001 Delay_ms(500); GPIO_Write(GPIOA, ~0x0002); //0000 0000 0000 0010 Delay_ms(500); GPIO_Write(GPIOA, ~0x0004); //0000 0000 0000 0100 Delay_ms(500); GPIO_Write(GPIOA, ~0x0008); //0000 0000 0000 1000 Delay_ms(500); GPIO_Write(GPIOA, ~0x0010); //0000 0000 0001 0000 Delay_ms(500); GPIO_Write(GPIOA, ~0x0020); //0000 0000 0010 0000 Delay_ms(500); GPIO_Write(GPIOA, ~0x0040); //0000 0000 0100 0000 Delay_ms(500); GPIO_Write(GPIOA, ~0x0080); //0000 0000 1000 0000 Delay_ms(500); }}
可以看到LED循环点亮!

作 者 :硬核王同学
------- END ------
关注公众号回复“加群”按规则加入技术交流群 回复“1024”查看更多内容

如果觉得有用请点个免费的赞




![[每周一更]-(第51期):Go的调度器GMP](https://img-blog.csdnimg.cn/direct/7bb6910bc70746b384bc78aceab5fe77.png#pic_center)












