摘要
本文章基于国信长天 CT117E-M4 嵌入式开发板,讲述了开发板上LED灯的使用,LED灯的点亮步骤,祝各位同学蓝桥杯电子比赛取得好成绩!
LED部分原理图
从上图可以看出,8颗LED灯通过锁存器74HC573
驱动,LED灯的阴极连接在锁存器的输出端,采用低电平的方式点亮。
锁存器的输入端连接在GPIO PC8 ~ PC15
上,控制引脚连接在PD2
引脚上。74HC573开解锁的控制逻辑如下图:
74HC573在LE引脚的上升沿开锁,允许1D ~ 8D 的数据存入 锁存器,但此时并不会将这些数据输出到1Q ~ 8Q,输出的数据保持不变。
74HC573在LE引脚的下降沿时刻上锁,上锁后不在允许1D ~ 8D的数据存入锁存器,同时将之前存入锁存器的数据输出到1Q ~ 8Q,完成一次数据刷新。
LED灯的使用步骤
下文将以赛方提供的示例代码HAL_06_LCD
为基础,为大家讲解LED的使用步骤,赛方提供的示例代码可以加入我们的备赛交流QQ群(482754201),在群里下载:
① 将 PC8 ~ PC15 初始化为输出模式,将控制引脚PD2也初始化为输出模式
双击工程目录下的HAL_06_LCD.ioc
,使用STM32CubeMX软件打开工程配置。
打开后可以看到已经有了一些配置,特别是LCD的数据引脚PC0 ~ PC15已经被设置成了输出模式,我们就不需要重复配置了,只需要把PD2设为输出模式即可,点击PD2引脚,将其功能选择为GPIO_Output
模式,如下图所示:
配置完成后可以看到PD2引脚被大头钉钉住了,颜色也变成了绿色,然后我们点击右上角的GENERATE CODE
生成代码:
出现下列提示表示代码生成成功,我们就可以关闭STM32CubeMX这个软件了。
② 编写LED 灯控制逻辑代码
基础的配置可以通过工具生成,具体的控制逻辑就需要自己写了。上文中我们分析了74HC573的工作原理,通过PD2控制锁存的开关,将PC8 ~ PC15上的数据锁存到锁存器中。代码中我们需要用到如下基本函数:
HAL_GPIO_WritePin(GPIOx, GPIO_PIN_x, 0/1); //设置某个(些)引脚输出的电平状态
/*例如*/
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);//将PD2设为低电平
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8 |GPIO_PIN_9 , 1);//将PC8和PC9设为高电平
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 0); //将PC0 - PC15设为低电平
使用Keil打开刚刚生成的代码,如果想要控制LD2亮,其他LED灭,可在main
函数对应位置添加如下代码实现:
为了更方便的控制LED,我在下面编写了LED的控制函数,同学们可将下列代码粘贴到main.c中USER CODE区域,在主函数中调用即可:
void led_all_off() //关闭所有的LED灯
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}
void led_all_on() //打开所有的LED灯
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 0);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}
void led_on(int n) //只打开某一个LED灯(n取值为 1 ~ 8)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7 << n, 0);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}
void led_status(unsigned char c) //打开一部分LED灯(传入的8位数据分别控制8个灯)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
GPIOC -> ODR = (c << 8);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
}
总结
LED 灯使用步骤总结如下:
- 使用STM32CubeMX配置引脚
PD2
为输出模式 - 复制文章中LED控制部分的代码到
main.c
的USER CODE中 - 在主函数中调用
led_all_off();
,led_all_on();
,led_on(3);
,led_status()
控制LED灯
如果此文章对你有帮助,欢迎点赞
关注
收藏
转发
.
学习过程中遇到问题可以在评论区留言,或者加入我们的QQ群(482754201),在群里讨论。
需要蓝桥杯嵌入式开发板的同学可以在海鲜市场搜索鹏老师蓝桥杯
,鹏老师设计的蓝桥杯练习板,功能和蓝桥杯赛方指定的设备功能完全兼容,并做了一些优化,价格仅仅是官方设备的一半,可以为预算有限的同学节约一笔开支。