一、前言:今天是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://img-blog.csdnimg.cn/direct/dfb387f252ab4b8dbbc7114e6cfa877d.png)
![](https://img-blog.csdnimg.cn/direct/83843f87e69d4cf5b5132311f26cecad.png)
(3)然后就是我们的灯了,我们选中PC8~PC15和PD2,点击GPIO_OUTPUT(推挽输出),然后点击左侧的GPIO,根据原理图,给予PC8~PC15低电压和PD2高电压即可使led灯进行发光。![](https://img-blog.csdnimg.cn/direct/6efa5127976144efa32e50ad145bd1b0.png)
![](https://img-blog.csdnimg.cn/direct/75f3c63269df48ca8190dbca3bbe3852.png)
![](https://img-blog.csdnimg.cn/direct/b849438a658e4f098c041bb7545afb00.png)
旁边的黄色叹号可以不管。
(4)然后点击上方的Clock Configuration,然后在HCLK的方框中输入72后点击回车。
(5)接着,就是我们cubemx的最后一步了,选择好自己的文件夹,然后给自己的工程起个名字,然后在IDE那里选择mdk—atm即可,点击code generator,按下图配置,点击右上角生成即可。![](https://img-blog.csdnimg.cn/direct/1f36165f0c194e5499a769b29a42aa96.png)
(6)进入keil5,在魔术棒的debug中将ST—link改为dap,否则会有烧录失败的报错。![](https://img-blog.csdnimg.cn/direct/582b41ee3f7d40d18e411720172f5213.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以一秒闪烁切换。