stm32点亮小灯和流水灯(学习笔记)

stm32点亮小灯和流水灯(学习笔记)
备注stm32的学习至少要将C语言学到结构体接线图点亮LED1使用RCC开启GPIO的时钟图1图12使用GPIO_Init函数初始化GPIO图2图2GPIO Init第一个参数为GPIOX我们初始化GPIOA,第二个参数为一个结构体图3图33使用输入或输出的函数控制GPIO口这里我们可以调用四个函数选择一个即可图4图4选择低电平图5现象LED点亮选择高电平图6现象LED熄灭原因此时GPIO为推挽输出模式所以不存在高电平高阻态开漏输出时会出现即与输出模式无关GPIO输出高电平即GPIO_Pin_0口输出3.3V的电压此时的LED正极接到面包板的正极负极接到了A0口此时正负极皆为3.3V没有电压差因此不会亮解决方法将LED的正极接到A0负极接到面包板的负极选择WriteBit图7最后一个参数可选择是高电平还是低电平闪烁分析1通过点亮LED可知在推挽输出的模式下低电平点亮LED高电平熄灭2通过延时函数达到闪烁的目的代码两种函数均可实现该目的流水灯接线图分析多个闪烁可达成目的需要初始化多个GPIO口代码图8图8分析将第9行的GPIO_Pin_0改为GPIO_Pin_All初始化所有GPIO口使用GPIO_Write控制所有GPIO口第一个参数为GPIOA第二个为GPIO口的状态由于这里支持16进制第二个参数只能写成0x0000的形式二进制“0000 0000 0000 0000 0000”代表16个GPIOA口均为低电平即十六进制“0x0000”则“0000 0000 0000 0001”代表A0口为高电平即十六进制“0x0001”则“0000 0000 0000 0010”代表A1口为高电平即十六进制“0x0002”以此类推由于该环境下为低电平驱动所以对其按位取反~即~0000 0000 0000 0001-1111 1111 1111 1110即A0口为低电平亮其余为高电平灭优化代码此处可以利用位移运算符进行代码的优化为左移操作符对二进制数进行操作0x0001-0000 0000 0000 0001当i1时0000 0000 0000 0001中的1向左移动一位变为0000 0000 0000 0010以此类推实现流水灯的效果现象小灯被依次点亮达到流水灯的目的如果没有按位取反现象每次点亮七个灯然后依次熄灭即2345678亮1灭1345678亮2灭以此类推备注接线图来自江协科技