例程分析1:GPIO输出——使用固件库点亮LED灯
1 编程要点
①开启GPIO端口时钟;
②初始化GPIO目标引脚为推挽输出模式;
③编写简单测试程序,控制GPIO引脚输出高、低电平。
2 代码分析
宏定义的意义:通过把硬件相关的部分使用宏来封装,来面对硬件环境更改的情况。例如LED灯的控制引脚与当前的不一样,只修改这些硬件相关的宏即可。
①. LED灯引脚宏定义
将控制四盏LED灯的GPIO端口、GPIO引脚以及GPIO端口时钟封装起来
②宏定义控制Led的亮灭
该过程通过直接向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指示灯默认开启。
4. 主函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具