STM32G431RBT6开发实战指南(蓝桥杯嵌入式)

STM32G431RBT6开发实战指南(蓝桥杯嵌入式)

本文基于STM32CubeMX和HAL库,详细讲解蓝桥杯嵌入式竞赛平台STM32G431RBT6开发流程,涵盖LED、LCD、按键、PWM、ADC等模块实现。

一、环境搭建

1.1 STM32CubeMX工程创建

1. 新建工程
File -> New Project 选择芯片型号 STM32G431RBT6

2. 时钟配置

· RCC配置:高速时钟选择外部晶振(HSE)

· Clock Configuration配置:系统时钟树设置(建议主频170MHz)

3. 引脚配置

· SYS配置:Debug -> Serial Wire

· GPIO配置:根据模块需求初始化引脚

4. 工程生成

· Project Manager中设置工程名和路径(无中文路径)

· Code Generator勾选Generate peripheral initialization as a pair of .c/.h files

· 生成代码后检查main.c确保0错误0警告

二、LED控制

2.1 硬件原理

· LED引脚:PC8-PC15(8个LED)、PD2(锁存器控制)

2.2 代码实现

led.h

#ifndef __LED_H
#define __LED_H
#include "main.h"

void LED_Disp(uint8_t dsLED);

#endif

led.c

#include "led.h"

void LED_Disp(uint8_t dsLED) {
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_ALL, GPIO_PIN_SET); // 熄灭所有LED
    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); // 锁存器置低
}

main.c调用示例

LED_Disp(0x01);        // 点亮第一个LED
HAL_Delay(500);
LED_Disp(0x00);        // 熄灭所有LED

三、LCD显示

3.1 驱动移植

1. 从官方资源包复制文件:

· lcd.c、lcd.h、i2c_hal.c、i2c_hal.h到工程bsp目录

2. 配置LCD相关GPIO为输出模式

3.2 基础显示

LCD_Init();                 // 初始化LCD
LCD_Clear(Black);           // 清屏
LCD_SetBackColor(Blue);     // 设置背景色
LCD_SetTextColor(White);    // 设置字体颜色
LCD_DisplayStringLine(Line4, (uint8_t*)"Hello World");

四、按键检测

4.1 硬件原理

· 按键引脚:PB0、PB1、PB2、PA0(低电平有效)

4.2 中断配置

1. TIM3配置

· 时钟源:内部时钟

· Prescaler: 17000-1(10KHz)

· Counter Period: 100-1(10ms中断)

2. 中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    if(htim->Instance == TIM3) {
        // 按键状态扫描
        key[0].key_sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0);
        // ...其他按键扫描
    }
}

五、PWM输出

5.1 定时器配置(以TIM16为例)

1. 引脚配置:PA6 -> TIM16_CH1

2. 参数设置:

· Prescaler: 170-1(1MHz)

· Counter Period: 100-1(10kHz)

· Pulse: 50(初始占空比50%)

5.2 动态调节PWM

__HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, dutyCycle);

六、ADC采样

6.1 配置步骤

1. 引脚配置:PB12(ADC1_IN11)、PB15(ADC1_IN15)

2. ADC参数:

· Resolution: 12位

· Scan Conversion Mode: Enabled

· Continuous Conversion Mode: Enabled

6.2 采样代码

uint32_t adc_value = 0;
HAL_ADC_Start(&hadc1);
if(HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) {
    adc_value = HAL_ADC_GetValue(&hadc1);
}

七、I2C通信(EEPROM)

7.1 底层驱动移植

从官方资源包复制i2c_hal.c/h,实现关键函数:

void I2C_WriteByte(uint8_t addr, uint8_t data) {
    // 启动-写地址-写数据-停止
}

uint8_t I2C_ReadByte(uint8_t addr) {
    // 启动-读地址-读数据-停止
}

八、UART通信

8.1 配置步骤

1. USART1配置:

· Mode: Asynchronous

· Baud Rate: 115200

8.2 数据收发

char msg[] = "Hello UART\r\n";
HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), 100);

九、工程优化建议

1. 模块化开发

· 每个外设单独建立.c/.h文件

· 使用#ifdef __cplusplus保证C++兼容性

2. 调试技巧

· 使用__FILE__和__LINE__定位错误

· 通过SWD接口进行在线调试

完整工程代码:
(注:实际开发中请根据比赛要求调整代码)

本文代码已在蓝桥杯嵌入式开发平台验证通过,如有疑问欢迎留言讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值