写在前面
2023年2月10日,距离第十四届蓝桥杯正式比赛还有不到两个月的样子,从今天开始正式备赛。之前博主有看过野火的教程,学的是STM32F103。蓝桥杯嵌入式组现在用的是STM32G431,板子在二手平台上买的,视频参考b站up主01Studio相关教程(后面提到简写为教程)。学习的模块按照教程所列,其参考的资料是历年来真题中所考察的模块。
环境准备
关于Keil的安装,可以参考火哥的视频。STM32 CubeMx的安装参考Z小旋的博客。要注意的是学习过其他芯片的小伙伴(STM32 F1 F4等)得先去Keil官网下载G4的芯片包并安装。
01、LED操作
国际惯例,学习单片机先学点灯。这里有所不同的是在过程上,我们用到了STM32 CubeMX图形可视化编程。在备赛之前,博主按照火哥的视频,使用的是固件库编程。编程逻辑是根据原理图,开启相应时钟→初始化相关GPIO→完成相关功能程序。而Cube则是将前两步用图形化的方式代替,简化了整个过程提高效率。本质上都是一样的。
首先,打开Cube新建一个项目。
在索引栏搜索所学芯片STM32G431RB,选择与实物封装相同的第二个,点击Start Project。
开启时钟。HSE为外部高速时钟,LSE为外部低速时钟(E即外部,I反之)。高速时钟主要用于系统内核和总线上的外设时钟。低速时钟主要用于独立看门狗IWDG、实时时钟RTC。BYPASS Clock Source 是旁路时钟源(即选择有源晶振),Crystal/Ceramic Resonator 是选择无源晶振,这里可以参考hurryddd的博客以及kay880的博客。
配置时钟树。根据产品手册,外部晶振为24MHz。图中的标号顺序是从左到右进行选择,但是配置时钟树的正常逻辑应参考anbaixiu的博客,先设置后面的时钟频率大小(最大可到170,80设置为跟教程相同),再打开PLL。最后按下回车,Cube会自动完成时钟树配置。
命名工程文件,保存路径,生成模板代码。
开启时钟OK!
接下来初始化相应的GPIO口。打开刚刚创建的.ioc文件,根据芯片手册,led1-8分别连接的PC8-15以及锁存对应PD2。
在Cube中将这几个GPIO口设置为GPIO_Output,并将PC这8个IO口设置为高电平防止一上电就灯亮,PD2设置为低电平。
点击GENERATE CODE后,第二步初始化GPIO口完成!
在生成工程文件的路径下新建一个文件夹(这里命名为bsp)用于保存实相应功能的代码。在文件夹中分别创建一个.c和.h文件。打开工程,将文件夹添加进工程中。在led.c中包含.h文件,点击魔术棒将.h文件路径包含,然后编译。
现在,我们假设想要实现的功能是点亮led8。
led.c中代码包含:
#include "led.h" //包含头文件
void Dis_LED(uchar Num_Led) //定义点灯函数,传入的参数是选中哪些灯
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET); //先将所有灯熄灭
HAL_GPIO_WritePin(GPIOC,Num_Led<<8,GPIO_PIN_RESET); //因为只有PC8-15高8位有效,所以将传入参数左移八位
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET); //高电平锁存
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
这里要注意,uchar类型需要定义,在main.h中定义:
/* USER CODE BEGIN Includes */
#define uchar unsigned char
#define uint unsigned int
/* USER CODE END Includes */
注意,用cube写的模板,在加代码时必须在/* USER CODE BEGIN Includes /和/ USER CODE END Includes */的中间,这就是cube的格式,否则如果将.ioc文件进行修改再生成代码后就会将我们加的代码覆盖。
led.h:
#ifndef _LED_H
#define _LED_H
#include "main.h"
void Dis_LED(uchar Num_Led);
#endif
main.c中包含过led.h后,加入:文章来源:https://www.toymoban.com/news/detail-824197.html
/* USER CODE BEGIN 2 */
Dis_LED(0x00);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
Dis_LED(0x80);
HAL_Delay(500);
Dis_LED(0x00);
HAL_Delay(500);
}
/* USER CODE END 3 */
编译后代码没有报错,点击魔术棒对下载和debug进行设置,在settings中勾选reset and run,以便于下载后不用自己按reset。
将程序下载后可以看到led8在闪烁!文章来源地址https://www.toymoban.com/news/detail-824197.html
到了这里,关于蓝桥杯电子类嵌入式(STM32G431)备赛学习记录(一)——LED的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!