1  编程要点

①开启GPIO端口时钟;

②初始化GPIO目标引脚为推挽输出模式;

③编写简单测试程序,控制GPIO引脚输出高、低电平。

2  代码分析

 

宏定义的意义:通过把硬件相关的部分使用宏来封装,来面对硬件环境更改的情况。例如LED灯的控制引脚与当前的不一样,只修改这些硬件相关的宏即可。

①. LED灯引脚宏定义

gpio python 常亮 gpio点亮led灯详解_引脚

 将控制四盏LED灯的GPIO端口、GPIO引脚以及GPIO端口时钟封装起来

 

②宏定义控制Led的亮灭

gpio python 常亮 gpio点亮led灯详解_初始化_02

gpio python 常亮 gpio点亮led灯详解_引脚_03

gpio python 常亮 gpio点亮led灯详解_引脚_04

      该过程通过直接向BSRR寄存器写入控制指令来实现对BSRR低16位写1输出高电平,对BSRR高16位写1输出低电平,对ODR寄存器某位进行异或操作可反转位的状态。

      代码中的“\”是C语言中的续行符语法,表示续行符的下一行与续行符所在的代码是同一行。代码中因为宏定义关键字“#define”只是对当前行有效,所以使用续行符来将代码连接起来,可以使下行的代码等效。【应用续行符的时候要注意,在“\”后面不能有任何字符(包括注释、空格),只能直接回车。】

      RGB彩灯可以通过调节三种颜色的分别亮灭来呈现不同的颜色,从而达到混色,如代码49~51。

3. LED  GPIO初始化函数

执行过程如下

(1) 使用GPIO_InitTypeDef定义GPIO初始化结构体变量,以便下面用于存储GPIO配置。

(2) 调用宏定义函数LED1_GPIO_CLK_ENABLE()来使能LED灯的GPIO端口时钟。

(3) 向GPIO初始化结构体赋值,把引脚初始化成推挽输出模式,其中的GPIO_PIN使用宏“LEDx_PIN”来赋值,使函数的实现方便移植。

(4) 使用初始化结构体的配置,调用HAL_GPIO_Init函数向寄存器写入参数,完成GPIO的初始化,这里的GPIO端口使用“LEDx_GPIO_PORT”宏来赋值,也是为了程序移植方便。

(5) 使用同样的初始化结构体,只修改控制的引脚和端口,初始化其它LED灯使用的GPIO引脚。

(6) 使用宏控制RGB灯默认关闭,LED4指示灯默认开启。

gpio python 常亮 gpio点亮led灯详解_引脚_05

 

 

gpio python 常亮 gpio点亮led灯详解_gpio python 常亮_06

4. 主函数

 

 

gpio python 常亮 gpio点亮led灯详解_gpio python 常亮_07

 

 

 

 

gpio python 常亮 gpio点亮led灯详解_初始化_08