蓝桥杯嵌入式学习日记(二)——利用STM32cubemx创建工程并以STM32G4点灯【STM32】【HAL库】

前言

  相信有大一小白来参加蓝桥杯嵌入式组比赛,所以这里从头讲如何利用STM32cubemx这个软件创建工程文件和点亮LED,如果是同芯片的情况下后面可以直接套用,不需要再从头创建。比如比赛时可以直接使用资源包中给出的文件进行使用,详情可见2024年蓝桥杯嵌入式比赛的准备心得和比赛资源注意事项

工程创建

一、安装STM32cubemx软件

  软件的安装非常简单,没有什么复杂的操作,小白可以移步官网下载地址进行下载,我也会将安装包链接放在结尾。

二、进行工程创建

  首先是在页面点击File在这里插入图片描述  然后点击New Project
在这里插入图片描述
  随后在出现的页面中搜索你所使用开发板的主控芯片,这里以比赛板CT117E-M4所使用的STM32G431RBT6作为示范。
在这里插入图片描述
  首先我们点击System Core中的RCC,在高速时钟处我们选择外部高速时钟(晶振)。相应的右边芯片引脚处使用的对应引脚也会亮起(绿色),这两个引脚在实际的pcb上与外部晶振连接。
在这里插入图片描述

  之后点击SYS,在Debug处选择Serial Wire,在平常的开发中,如果不设置这一项可能会导致芯片自锁,在比赛板上不设置也可以,在平常使用中如果不小心芯片自锁了,网上有解决方法,如果找不到可以在评论区进行询问,看到会进行解答,这里便不在阐述。
在这里插入图片描述

  时钟区后面讲到具体模块再进行讲解,没有用到时可以不管。
在这里插入图片描述
  在文件管理区第一行是工程名称,第二行是工程地址,点击后面的Browse可以进行放置的选择,这里一定要注意地址需要全英文,也就是是在Browse前面的地址内不能存在中文,相信有很多人电脑名称设置的是中文名,那就不要放在c盘,放在其它盘纯英文目录下即可。再下面选择使用的软件,这里选的是MDK-ARM是选择的keil,v5版本可以防止不兼容的情况
另外最下面是芯片包,我使用的是1.2版本,比赛提供的是1.2版本。如果有需要的,在结尾有链接。勾选圈住的地方可以分类处.c .h文件,看个人习惯。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后点击右上角的即可生成工程。
在这里插入图片描述
在这里插入图片描述

三、比赛演示

  在比赛时我们直接采用液晶驱动参考程序里现成的即可。(文件来源跳转上篇文章2024年蓝桥杯嵌入式比赛的准备心得和比赛资源注意事项
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
打开后发现已经将LCD需要的引脚设置好了,我们只需要根据要求设置需要的引脚即可。
在这里插入图片描述

例子:点亮LED灯

1、查询资料

  想要完成一项工作时需要先查询参考手册一类的资料,来了解是如何运作的。这里我们选择查看CT117E-M4的产品手册。
在这里插入图片描述

在这里插入图片描述
查看LED部分后可以发现使用了sn74hc573锁存器,由PD2连接LE引脚作为锁存使能引脚,输出使能引脚OE接地始终为低电平。这里放上真值表。
在这里插入图片描述
通过真值表我们可以了解到

1、当PD2为高电平时,输出端数据等于输入端数据。
2、当PD2为低电平时,输出端数据保持数据不变。

另外观察原理图可以发现各LED对应的引脚,并且可以发现

各LED的正极串联了一个300Ω的电阻连接VDD,所以输出低电平即可点亮LED。

  这里采用sn74hc573锁存器的原因是因为LCD与LED存在引脚复用的情况,为了节省资源所以加入了锁存器,保证不会冲突。

2、编写代码

设置PD2为输出,其它不用变,因为历程里已经设置好其它。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按照上述步骤添加.c和.h文件
在led.c中代码

void LED_Control(u8 led_ctrl) 
{
	HAL_GPIO_WritePin (GPIOC,GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET) ;//熄灭所有灯
	HAL_GPIO_WritePin (GPIOD,GPIO_PIN_2,GPIO_PIN_SET) ;//打开锁存器
    HAL_GPIO_WritePin (GPIOD,GPIO_PIN_2,GPIO_PIN_RESET) ;//关闭锁存器
	
	HAL_GPIO_WritePin (GPIOC,led_ctrl<<8,GPIO_PIN_RESET) ;LED处于高八位,向左移8位,即0x010000 0001代表LD1,0xff1111 1111,写入对应十六进制数即可。
	HAL_GPIO_WritePin (GPIOD,GPIO_PIN_2,GPIO_PIN_SET) ;//打开锁存器
    HAL_GPIO_WritePin (GPIOD,GPIO_PIN_2,GPIO_PIN_RESET) ;//关闭锁存器
}

在led.h中加入

void LED_Control(u8 led_ctrl) ;

HAL_GPIO_WritePin这个函数可以设置引脚电平,我们需要先关闭所有LED,随后使能PD2为高电平打开锁存器,低电平关闭锁存器,每次使用过后都要关闭,不然会占用引脚。
主函数while中写入

      LED_Control(0xff) ;
	  HAL_Delay(500) ;//500ms
	  LED_Control(0x00) ;
	  HAL_Delay(500) ;

即可观察到对应现象所有led以0.5秒的间隔闪烁。
在这里插入图片描述

在这里插入图片描述
完整工程在下列贴出和上述所需软件和芯片包,需要可以自行下载,如有问题可以留言。
链接:https://pan.baidu.com/s/1hUU77tdpxLVaphMMwQDfKQ?pwd=1111
提取码:1111

  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lumine.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值