一、前言:今天是2024/3/25,已经有点自闭了,真的是什么都不会,深夜努力学习,做点心得体会,希望有用。
二、点灯
1、了解开发板
首先,我们使用的是stm32g431rbt6的开发板,说实话相比于stm32f103zet6,他的功能算少的,所以,实际难度是不大的,我们主要需要的就是对症下药,也就是所谓的应试教育,我们了解一下往届蓝桥杯的嵌入式比赛,主要涉及的有led,key,lcd,pwm输出捕获,所以整体来看还好,想要省赛拿名次就是了解这些,那么让我们进入主题。
2、工具
我这里使用的是keil5和cubemx混合使用,可以和我一起做。
3、教程
(1)首先,我们需要打开cubemx,然后自行下载好必要的固件库,点击New Project(新建工程),然后在左上角的Part Number自行搜索stm32g431rb(因为有stm32g431rbtx和stm32g431rblx系列,所以直接搜stm32g431rb就行)双击即可。
(2)接下来就是我们的重点了,根据原理图得知,led灯是(PC8~PB15),这里我们在查看原理图的时候需要注意,会发现U1有锁存器(PD2),所以我们需要随时进行开关操作,首先进行选择rcc和sys,这里我们默认这样设置就行。![](https://i-blog.csdnimg.cn/blog_migrate/134982cd5b2f01f72c3ffebb4137ce9b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/070e281f94b1aa3887fdceb050e82979.png)
(3)然后就是我们的灯了,我们选中PC8~PC15和PD2,点击GPIO_OUTPUT(推挽输出),然后点击左侧的GPIO,根据原理图,给予PC8~PC15低电压和PD2高电压即可使led灯进行发光。![](https://i-blog.csdnimg.cn/blog_migrate/9acd650c919f6e16e94f25df3837c305.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4437fc0b2c90686fd7b8c3c45ea151a2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1258cae7c94498c46b6d1e46bd8b93f5.png)
旁边的黄色叹号可以不管。
(4)然后点击上方的Clock Configuration,然后在HCLK的方框中输入72后点击回车。
(5)接着,就是我们cubemx的最后一步了,选择好自己的文件夹,然后给自己的工程起个名字,然后在IDE那里选择mdk—atm即可,点击code generator,按下图配置,点击右上角生成即可。![](https://i-blog.csdnimg.cn/blog_migrate/9451c36854a4e90ddf3d4539e864d5b3.png)
(6)进入keil5,在魔术棒的debug中将ST—link改为dap,否则会有烧录失败的报错。![](https://i-blog.csdnimg.cn/blog_migrate/76e17350b1e31ecf1a3d282fc2158dad.png)
我们可以先打开gpio.c,我们可以看到我们刚才设置的东西被一键生成了,接下来我们就只需要写逻辑代码就行。在主函数的code begin里写入以下代码
void led_alloff(void)//将所有的灯先关闭
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
}
然后我这里选择了两个灯进行闪烁来验证现象,敲入以下代码。
void led0(void)//灯0亮
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void led1(void)//灯1亮
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
最后在主函数里的while(1)中第一行加入以下代码。
led_alloff();//作用类似于消隐
led0(); //灯0亮
HAL_Delay(1000);//等待1s
led_alloff();
led1();
HAL_Delay(1000);
就可以观察到灯0和灯1以一秒闪烁切换。