一、学习CH04示例程序,包括gpio.c和4个工程中的main.c
1、GPIO-ASM-STM32L431-20231129
main.c功能:汇编编程调用GPIO构建控制小灯闪烁
2、GPIO_BLUELIGHT-20230328
main.c功能:调用GPIO构建控制蓝灯持续点亮。
3、GPIO-Output-Component_STM32L431_20200928
main.c功能:利用api来实现对蓝灯的亮灭循环操作。
4、GPIO-Output-DirectAddress_STM32L431_20200928
main.c功能:使用直接地址编程的方式来实现蓝灯的亮灭循环操作。
5、gpio.c文件
该文件用于定义gpio_get_port_pin、gpio_init、gpio_set、gpio_get、gpio_reverse、gpio_pull等多个自定义函数。
二、给出"gpio_set(LIGHT_RED,LIGHT_OFF);"语句中, LIGHT_RED和LIGHT_OFF的值是多少?贴出每一步的查找截图
1.LIGHT_RED的值
在user.h文件中可以看到LIGHT_RED的值由 (PTB_NUM|7)定义。
在gpio.h文件中可以看到PTB_NUM定义为1<<8。
由此可以得出LIGHT_RED的值为256+7=263。
2.LIGHT_OFF的值
在user.h文件中可以看到LIGHT_OFF的值为0。
三、用直接地址编程方式,实现红绿蓝三灯轮流闪烁
实现思路如下:
- 启动部分包括打印一个标识字符串、声明和初始化
mMainLoopCount
和mFlag
两个局部变量,关闭总中断。 - 为局部变量赋初值,以及初始化外设模块,包括设置 GPIO B 口的时钟使能和初始化 LED 相关的引脚。
- 启用总中断,并将 LED 灯初始化为熄灭状态。
- 进入无限循环,每次循环中递增
mMainLoopCount
,当其超过特定常数时,切换 LED 的状态,实现 LED 闪烁效果。 - 在每次状态切换时,根据当前状态设置相应的 LED 亮灭状态,并打印相应的消息。
- 循环回到第四步,持续执行状态切换的逻辑。
主要代码如下:
运行结果如下:
结果顺利实现了红绿蓝三灯轮流闪烁。
四、用调用构件方式,实现红绿蓝的八种组合轮流闪烁
实现思路如下:
- 引入总头文件,确保包含了所需的 GPIO 相关定义和函数声明。
- 定义 LED 枚举类型,列出可能的 LED 颜色。
- 编写初始化 LED 的函数,配置 GPIO 设置来控制 LED。
- 编写延时函数,用于控制状态切换时的时间间隔。
- 在主函数中进行初始化:禁用中断、初始化 LED、启用中断。
- 进入无限循环,在循环中递增主循环计数,根据计数值切换 LED 状态,并打印相应的消息。
- 根据预定义的状态切换规则,更新灯的状态标志。
- 在每次循环末尾调用延时函数,控制状态切换的时间间隔。
- 重复执行上述步骤,使 LED 按照设定的模式进行状态切换。
主要代码如下:
运行结果如下:
结果顺利实现了红绿蓝的八种组合轮流闪烁。