关于STM32G431RBT6的学习

发布时间:2024年01月13日

学习STM32G431RBT6

初入茅庐之第一次CubeMX的使用,工程结构框架的创建与LED的点亮。


温馨提示:本人第一次创作,也是第一次学习有关嵌入式的知识,本文内容均为个人见解,如有错误,欢迎指正。


一、CubeMX的使用以及结构框架的创建



首先打开STM32CubeMX,创建一个新的工程,点击File→New Project。

在这里插入图片描述
在Part Number中直接搜索STM32G431RB。我们选择STM32G431RBTx即可。
在这里插入图片描述接下来我们开始创建结构框架并为点亮LED做准备。首先在左边选项栏中找到System Core→RCC在这里插入图片描述
一般情况下选择HSE或者LSE均可,但对于LED的话我们需要用到PC14和PC15这两个引脚,但如果选择LSEpin脚PC14和PC15均被占用,为了不更加复杂,我们使用HSE→Crystal/Ceramic Resonator,这是为了选择使用外部晶振。

在这里插入图片描述

对于外部晶振STM32G431RBT6的外部晶振为24Mhz,而且我们一般使用的系统时钟为80Mhz

在这里插入图片描述
在这里插入图片描述

工程名字我们设为LED,新建一个文件夹LED_TEST,放置工程。对于Toolchain/IDE,我们用的keil uVersion5来编译的软件,因此我们选择MDK-ARM,Min Version我们选择V5,图中打叉的位置把对号取消掉,因为我们只有1.2.0的包,点击Browse选择V1.2.0的包。
在这里插入图片描述
接下来我们在Code Generator中选择如图选项,这是为了生成.c与.h文件。整个结构框架我们差不多就创建好了。在这里插入图片描述
接下来我们为了点亮LED,我们要返回来设置PIN口,LEDPIN口为PC8~PC15还有一个PD2,类似于锁存器的锁,当其为高电平时,锁被打开,Q=D,也就是对应PC8的值赋给1Q等等,当其为低电平时,Q会保持不变,他不会因为D是高或低电平而改变。
在这里插入图片描述
我们根据上图依次为PC8~PC15以及PD2,左键并选择(推挽)输出即可。再点击创建即可,我们对于LED的结构框架我们创建完毕,接下来我们要写程序了。

二、LED的点亮

我们打开我们创建的结构框架文件,我们可以对其创建一个副本(以防万一)我们打开结构框架文件,首先进行编译。发现会有一行代码报错,

HAL_PWREx_DisableUCPDDeadBattery();

上网搜索查到这好像是1.2.0包的一个bug,我们可以对其直接注释掉,因为它并不影响。
在这里插入图片描述

我们先点击魔术棒,更改debug的设置选择CMSIS-DAP Debugger。接下来我们来编程led的代码,代码如下:

1.led.c

代码如下:

#include "led.h"
void led_control(uint8_t led_ctrl1)
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,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_ctrl1<<8,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);

}

2.led.h

代码如下:

#ifndef _LED__H
#define _LED__H
#include "main.h"
void led_control(uint8_t led_ctrl1);
#endif

3.main.c

代码如下:

#include "led.h"

for(int i=0;i<8;i++)
	  {
		  led_control(0x01<<i);
		  HAL_Delay(1000);
	  }

只需在main.c里面添加上面两行代码即可,当然这个是流水灯,对于点灯我们只需要调用led.c里面的函数并进行赋值即可,类似于下面这种,流水灯赋值的形式,上面那种流水灯则是用了移位的方式,代码更简洁一点。

代码如下:

#include "led.h"
	  led_control(0x01);
	  HAL_Delay(1000);
	  led_control(0x02);
	  HAL_Delay(1000);
	  led_control(0x04);
	  HAL_Delay(1000);
	  led_control(0x08);
	  HAL_Delay(1000);
	  led_control(0x10);
	  HAL_Delay(1000);
	  led_control(0x20);
	  HAL_Delay(1000);
	  led_control(0x40);
	  HAL_Delay(1000);
	  led_control(0x80);
	  HAL_Delay(1000);

总结

以上就是今天我主要学习的内容,本文仅仅简单介绍了stm32CubeMX的使用以及工程结构框架的建立以及流水灯实现的两种方式。(注:本人只是个学生,如有错误请指正!谢谢您的阅读!)

文章来源:https://blog.csdn.net/Sunshine_wyg/article/details/135561757
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。