前言
相信有大一小白来参加蓝桥杯嵌入式组比赛,所以这里从头讲如何利用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位,即0x01为0000 0001代表LD1,0xff为1111 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