大学嵌入式系统课程学习记录(三)

一、学习CH04示例程序,包括gpio.c4个工程中的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_REDLIGHT_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。

三、用直接地址编程方式,实现红绿蓝三灯轮流闪烁

 实现思路如下:

  1. 启动部分包括打印一个标识字符串、声明和初始化 mMainLoopCountmFlag 两个局部变量,关闭总中断。
  2. 为局部变量赋初值,以及初始化外设模块,包括设置 GPIO B 口的时钟使能和初始化 LED 相关的引脚。
  3. 启用总中断,并将 LED 灯初始化为熄灭状态。
  4. 进入无限循环,每次循环中递增 mMainLoopCount,当其超过特定常数时,切换 LED 的状态,实现 LED 闪烁效果。
  5. 在每次状态切换时,根据当前状态设置相应的 LED 亮灭状态,并打印相应的消息。
  6. 循环回到第四步,持续执行状态切换的逻辑。

主要代码如下:

运行结果如下:

结果顺利实现了红绿蓝三灯轮流闪烁。

四、用调用构件方式,实现红绿蓝的八种组合轮流闪烁

 实现思路如下:

  1. 引入总头文件,确保包含了所需的 GPIO 相关定义和函数声明。
  2. 定义 LED 枚举类型,列出可能的 LED 颜色。
  3. 编写初始化 LED 的函数,配置 GPIO 设置来控制 LED。
  4. 编写延时函数,用于控制状态切换时的时间间隔。
  5. 在主函数中进行初始化:禁用中断、初始化 LED、启用中断。
  6. 进入无限循环,在循环中递增主循环计数,根据计数值切换 LED 状态,并打印相应的消息。
  7. 根据预定义的状态切换规则,更新灯的状态标志。
  8. 在每次循环末尾调用延时函数,控制状态切换的时间间隔。
  9. 重复执行上述步骤,使 LED 按照设定的模式进行状态切换。

主要代码如下:

运行结果如下:

结果顺利实现了红绿蓝的八种组合轮流闪烁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值