蓝桥杯--嵌入431RBT6(点亮一个LED篇)

蓝桥杯–嵌入431RBT6(点亮一个LED篇)

蓝桥杯–嵌入式STM32G431RBT6(点亮一个LED篇)

前言

为自己学习蓝桥杯嵌入式开发板做记录,方便以后的复习得心应手!!!

工具

1、KEIL5软件
2、STM32CUBEMX

新建外设文件

①继新建工程后,我们需要回到STM32CUBEMX软件对开发板IO口输出模式进行设置,根据官方的原理图可以看出LED电路由74HC573锁存器构成一部分。控制LED的IO口为PC高位口,进而就会牵扯到后续的移位操作。
在这里插入图片描述

②设置IO口只需要在STM32CUBEMX软件进行设置即可,设置时需注意LED为低电平点亮,锁存器高电平触发,所以在初始电平设置为LED为高电平,锁存器为低电平。
在这里插入图片描述

③打开工程之后,IO口初始化代码如下(与标准库十分相像):

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOF_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  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);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);

  /*Configure GPIO pins : PC13 PC14 PC15 PC8
                           PC9 PC10 PC11 PC12 */
  GPIO_InitStruct.Pin = 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_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  /*Configure GPIO pin : PD2 */
  GPIO_InitStruct.Pin = GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}

④添加外设代码,建议添加相关组以便于后期维护。
⑤文件架构如下图所示,注意到是在以后重新使用STM32CUBEMX软件生成代码时,需要注意外设文件弹框填写否按键。
在这里插入图片描述
在这里插入图片描述
⑥编写相关LED程序,代码如下。

//C文件
#include "led.h"

void LED_Disp(uchar dsLED)
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
//头文件
#ifndef _LED_H_
#define _LED_H_

#include "main.h"

void LED_Disp(uchar dsLED);

#endif
//主函数
int main(void)
{
  /* USER CODE BEGIN 1 */
  /* USER CODE END 1 */
  /* MCU Configuration--------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* USER CODE BEGIN Init */
  /* USER CODE END Init */
  /* Configure the system clock */
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
  LED_Disp(0x8f);
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

点亮一个LED代码展示

寻思为啥要进行这一步操作,感觉点一个灯应该不会很难吧,结果出乎我的意料,蓝桥杯嵌入式开发板是LED与LCD的外设使用的IO口是重复的,当我们使用LED的同时又使用了LED,一定会出现PC8–PC15的引脚电平处于不是我想设置的LED状态,所以我们在每次对LED进行所存时,都一定要对LED的状态做一个保存,然后下次写入的时候在做一个写入,写入之后在对想要修改的IO口进行修改,所以更新代码如下。

//LED处理函数
void LED_Process(u8 led_set,GPIO_PinState PIN_State)
{
	HAL_GPIO_WritePin(GPIOC,led_state << 8,GPIO_PIN_SET);//写入上一次的电平状态
	HAL_GPIO_WritePin(GPIOC,led_set << 8,PIN_State);//写入想要设置的LED IO口
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2, GPIO_PIN_SET);//将数据从锁存寄存器转至输出IO口
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2, GPIO_PIN_RESET);//将信号锁存至LED口
	led_state = GPIOC->IDR >> 8; //存储本次设置完成的IO口灯的状态
}

效果演示

在这里插入图片描述

重点

①使用STM32CUBEMX软件进行IO的配置。
②STM32CUBEMX软件重新加载,需注意文件丢失问题。
③LED灯为PC口高八位口,需要进行数据移位操作。
④认真仔细。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学好单片机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值