捷瑞电子工坊头像
关注
嵌入式蓝桥杯从零点亮第一个LED封面图

嵌入式蓝桥杯从零点亮第一个LED

很多同学第一次拿到蓝桥杯嵌入式开发板(STM32G431RBT6),打开 CubeMX 看到一堆引脚就懵了。PC8 到 PC15 连了 8 个 LED,为什么还要多一个 PD2?这就要说到蓝桥杯板子一个独特的设计:用锁存器控制 LED

一、为什么 LED 不直接接单片机?

蓝桥杯开发板用的是 SN74HC573 锁存器,LED 并不是直接挂在 PC8~PC15 上的,中间隔了一个锁存器。原因很简单:PC8~PC15 同时还连着 LCD 屏幕,如果 LED 直接挂在引脚上,LCD 一刷新画面,LED 就会跟着乱闪。

锁存器的作用就是“记住”LED 的状态。PD2 是锁存器的“开关”:PD2 高电平时,PC8~PC15 的电平会传过去控制 LED;PD2 低电平时,锁存器保持当前状态,PC 引脚再怎么变 LED 也不受影响。所以每次改完 LED 状态,都要给 PD2 一个高脉冲把状态“锁”进去。

二、CubeMX 里的工程配置

先打开CubeMX,然后点击File,再点击Nex Project…(新建工程的意思)
在这里插入图片描述
在输入框,输入STM32G431RBT6,选择第一个,双击。
在这里插入图片描述
先配置时钟点击SysTem Core,选择RCC,点击Crystal/Ceramic Resonator(晶体 / 陶瓷谐振器)
在这里插入图片描述
点击SYS,选择Serial Wire(用于调试)
在这里插入图片描述
根据原理图可知,我们这次需要配置PC8、PC9、PC10、PC11、PC12、PC13、PC14、PC15、PD2
在这里插入图片描述
点击芯片上的PC8引脚,选择GPIO_Output即可,其他8个也是一样我这边就不展示了。
在这里插入图片描述
然后点击System Core下面的GPIO。
在这里插入图片描述
按住SHIFT,再点击pc8,选择好后再下滑点击PC15,即可将其全部选中。根据图片操作,选择高电平,因为根据原理图我们要想点亮LED给低电平就可以了,我们这边默认上电不点亮LED,选择高电平。
在这里插入图片描述
GPIO模式选择推挽输出(OutPut Push Pull),另一个是开漏输出。
在这里插入图片描述
这里选择No pull-up and no pull-down:无上下拉(浮空), Pull-up:上拉
Pull-down:下拉
在这里插入图片描述
速度选择低速(Low)
在这里插入图片描述
PD2的话就默认不改就行了,高电平允许数据输入低电平锁存上一次输入的电平,这里看不懂的话可以去看这一篇文章74HC573 锁存器:从原理到实战,一篇就够了

然后点击Clock Configuration配置时钟树
在这里插入图片描述
输入80点击回车(ENTER)相当于给单片机配置80Mhz的频率
在这里插入图片描述
点击OK
在这里插入图片描述
点击Project Manager
在这里插入图片描述
输入项目名称,我这边输入LED。
在这里插入图片描述
启动软件选择MDK-ARM
在这里插入图片描述
点击Code Generator,勾选图片里框出来的那个选项,主要是生成单独的.c和.h文件
在这里插入图片描述
点击Advanced Settings,因为我这边使用LL库,所以要把HAL库改成LL库
在这里插入图片描述
点击切换就可以了
在这里插入图片描述
然后点击GENERATE CODE生成即可,主要在输入项目名称下面可以选择文件路径。
在这里插入图片描述
生成好后,直接打开工程就可以了
在这里插入图片描述

点亮LED 的核心代码

void Led_Disp(uint8_t uled)
{
  //拉高PD2,使能输入
	LL_GPIO_SetOutputPin(GPIOD,LL_GPIO_PIN_2);
	//控制PC8~PC15的电平变化,因为是低电平点亮,我们如果想要输入1来点亮一个电平就得给uled取反
	LL_GPIO_WriteOutputPort(GPIOC,(~uled)<<8);
	//拉低PD2,失能输入,锁存上一次的输入电平
	LL_GPIO_ResetOutputPin(GPIOD,LL_GPIO_PIN_2);
}

需要完整代码可以点击下载蓝桥杯LL库GPIO驱动LED代码.zip

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2401_82419694/article/details/165887991

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--