《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.1 LED显示控制实验

写在前面——
《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.1,本节将通过LED显示控制实验,学习STM32G431的开发技术
官方例程下载:https://pan.baidu.com/s/1QC5BnDgY1m1me6-ihQ_OUQ?pwd=nqb1
提取码:nqb1

4.1 LED显示控制实验

4.1.1. 实验任务

  1. 参考官方例程HAL_01_LED_TEST,实现8个 LED显示闪烁灯效果。
  2. 功能拓展:流水灯

4.1.2. 硬件连接

参看产品手册中LED原理图:
在这里插入图片描述
在这里插入图片描述

LED1~8:低电平点亮,连接GPIO PC8~PC15;
锁存器74HC573的输入端连接在GPIO PC8 ~ PC15 上,74HC573控制端连接在PD2引脚上。74HC573开解锁的控制逻辑如下图:
 74HC573在LE引脚的上升沿开锁,允许1D ~ 8D 的数据存入 锁存器,但此时并不会将这些数据输出到1Q ~ 8Q,输出的数据保持不变。
 74HC573在LE引脚的下降沿时刻上锁,上锁后不在允许1D8D的数据存入锁存器,同时将之前存入锁存器的数据输出到1Q8Q,完成一次数据刷新。
在这里插入图片描述
通常PD2初始化时置为0,在LED显示控制时,首先设置PD2为1(上升沿来了,开锁)则开始存入1D ~ 8D数据;再设置PD2为0(下降沿来了,上锁),数据输出到1Q ~ 8Q端,从而控制LED显示效果(0亮,1灭)。在下一次PD2开锁、上锁前,LED显示状态保持不变。

4.1.3. LED初始化配置(STM32CubeMX)

这里稍作解释:
GPIO(英语:General-purpose input/output),通用型之输入输出的简称,其接脚可以供使用者由程控自由使用,可作为通用输入(GPI)或通用输出(GPO) 或通用输入与输出(GPIO)。
GPIO的八种工作模式:
 GPIO_Mode_AIN 模拟输入
 GPIO_Mode_IN_FLOATING 浮空输入
 GPIO_Mode_IPD 下拉输入
 GPIO_Mode_IPU 上拉输入
 GPIO_Mode_Out_OD 开漏输出
 GPIO_Mode_Out_PP 推挽输出
 GPIO_Mode_AF_OD 复用开漏输出
 GPIO_Mode_AF_PP 复用推挽输出
上拉输入、下拉输入可以用来检测外部信号,例如,按键等。浮空输入模式,由于输入阻抗较大,一般把这种模式用于标准通信协议的 I2C、 USART 的接收端;
普通推挽输出模式一般应用在输出电平为 0 和 3.3V 的场合。而普通开漏输出模式一般应用在电平不匹配的场合,如需要输出 5V 的高电平,就需要在外部一个上拉电 阻,电源为 5V,把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输 出 5V 电平。
对于相应的复用模式(复用输出来源片上外设),则是根据 GPIO 的复用功能来选择,如 GPIO 的引脚用作串口的输出(USART/SPI/CAN),则使用复用推挽输出模式。 如果用在 I2C、SMBUS 这些需要线与功能的复用场合,就使用复用开漏模式。
参看2.3.1节所述步骤,配置STM32CubeMX相关选项(GPIO、RCC、SYS)。其中,GPIO PD2、PC8 ~ PC15全部设置为输出模式。
在这里插入图片描述
注意,由于程序设计中使用HAL_Delay延时函数,这里必须配置SYS,采用默认配置即可。

4.1.4. LED显示程序设计(KEIL5)

按照前述步骤,完成LED初始化后,将生成工程文件led.uvprojx,其中包含main.c和gpio.c两个源文件(\led\Core\Src路径下),以及对应的头文件main.h和gpio.h(\led\Core\Inc路径下)。
LED显示控制程序,主要在main.c中完成。可以在程序设计完成后,备份下main.c,以免下次重新初始化后重置代码。
main.c中已经调用了初始化函数 HAL_Init()、 SystemClock_Config()、 MX_GPIO_Init(),无需更改。
HAL库的引脚控制函数有:
 设置引脚状态值HAL_GPIO_WritePin()
格式:HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
第一个参数:GPIOA,B,C,D…GPIO组
第二个参数:可以取GPIO_PIN_0~GPIO_PIN_15,GPIO编号
第三个参数:GPIO_PIN_SET(置高电平),GPIO_PIN_RESET(置低电平)
如:HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0 | GPIO_PIN_1,GPIO_PIN_SET); //PC0、PC1置1
 读取引脚电平值,HAL_GPIO_ReadPin
HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
返回值:返回"0",对应引脚为低电平,返回"1",对应引脚为高电平。
如:变量pinstate = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); //读取PA0的电平值
 GPIO引脚翻转
HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
HAL_Delay(DELAY_TIME); 时间单位ms,由SYS系统时钟提供。

1. 呼吸灯

参看官方例程HAL_01_LED_TEST,在用户代码区域编辑函数LED_TEST(void):

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是春老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值