一.省赛题目

二.CubeMx配置

首先选择芯片stm32g432RBT6,使能外部时钟,选择串口调试。

配置时钟树根据产品手册将外部晶振配置为24,修改主频为80MHZ

1.RTC配置

使能RTC的时钟和日历,并按照题目的要求设置初始时间为23时59分55秒

想要让RTC的秒每隔一秒递增1需要在时钟树界面观察RTC的主频

由于RTC时钟主频为32KHZ将异步预分频计数器的值设为31,将同步预分频计数器的值设为999这样就可以将RTC的时钟信号分频为1HZ达到1秒自增的效果

2.ADC配置:

题目要求采集R37的电压值,查找产品手册,看到模拟R37电压的是PB15引脚,将PB15引脚配置为ADC2_IN15,使能ADC2的通道15

3.串口配置:

题目中要求串口能够发送相关数据接收上报的电压,查找产品手册看到串口的发送接收引脚分别为PA9和PA10引脚,配置这两个引脚为串口的发送和接收

打开异步通信,修改通信波特率为9600

当我们达到我们设置的时间时需要产生一个接收中断然后向串口发送信息所以我们需要在NVIC中使能中断

4.LCD,LED配置:

配置LCD,LED的引脚,由于LED,LCD会有引脚冲突问题所以需要一个锁存引脚进行锁存控制

5.按键配置:

查找产品手册,将对应引脚配置为GPIO_Input模式

三.代码模块:

由于题目要求需要将K值保存在E2PROM中,所以我们需要用到I2C通信,LCD模块不需要我们自己编写可以直接使用官方例程,首先将官方例程的LCD模块和I2C模块移植到我们自己建立的BSP文件夹下

在keil中将BSP添加到指定路径才可以使用BSP中包含的程序

在fun.c中编写函数模块代码,然后在mian.c中直接调用函数。

RTC相关知识:STM32 的 RTC(实时时钟)详解_stm32 rtc-CSDN博客

                   蓝桥杯STM32 G431 hal库开发速成——RTC——实时时钟_stm32 hal rtc-CSDN博客

3.1RTC模块

3.2ADC模块:

ADC相关知识:STM32G4 蓝桥杯嵌入式 ADC及多通道采集_stm32 g4 adc 多通道 采集-CSDN博客

蓝桥杯嵌入式——ADC介绍_蓝桥杯嵌入式adc-CSDN博客

蓝桥杯嵌入式准备——ADC_蓝桥杯嵌入式adc-CSDN博客

3.3LCD模块:

首先先在main.c函数中完成LCD的初始化

因为引脚冲突问题所以在LCD初始化之前需要调用led——disp函数关闭所有LED灯并且打开锁存器界面一:

界面二:

3.4I2C模块(E2prom):

蓝桥杯嵌入式(G431)备赛笔记——I2C_蓝桥杯i2c-CSDN博客

蓝桥杯嵌入式赛道——I2C与两个芯片(24C02缓存和MCP4017可编程电阻)学习日志_iic 模拟开关-CSDN博客

蓝桥杯嵌入式——IIC和EEPROM_蓝桥杯嵌入式移植iic-CSDN博客

查找芯片手册,I2C用到了芯片M24C02

在官方提供的资源包里面打开M24C02的芯片手册,其他稍微了解下即可,重点看下面这两张图片

还需要了解写操作的地址是0xA0,读操作的地址为0xA1(这里只展示代码怎么写的,有小伙伴想知道具体的原理可以自行学习)

写操作(根据上面那个图写就可以啦):

void EEP_Write(u8 address,u8 data)
{
    I2CStart();
    I2CSendByte(0xA0);
    I2CWaitAck();
    I2CSendByte(address);
    I2CWaitAck();
    I2CSendByte(data);
    I2CWaitAck();
    I2CStop();
    HAL_Delay(5);
}

读操作:

uint8_t EEP_read(u8 address)
{
    u8 data;
    I2CStart();
    I2CSendByte(0xA0);
    I2CWaitAck();
    I2CSendByte(address);
    I2CWaitAck();
    I2CStart();
    I2CSendByte(0xA1);
    I2CWaitAck();
    data=I2CReceiveByte();
    I2CSendNotAck();
    I2CStop();
    return data;
}

因为要使k值保存在EEP中并通过串口修改在串口接收函数中要添加EEP_Write函数将k值写入EEP中,并在主函数初始化部分读入k值

3.5串口模块:

蓝桥杯嵌入式赛道学习笔记之串口通信_蓝桥杯嵌入式串口配置-CSDN博客

蓝桥杯嵌入式(G4系列):串口收发_蓝桥杯嵌入式串口-CSDN博客

设定K值(用到的是串口的接收函数):

注意:

要使用这个函数需要在主函数中先打开串口中断

memset函数的功能是:将一段内存空间设置为指定的值。其函数原型如下:

void *memset(void *s, int c, size_t n);

需要注意如果电脑版本不同对于k0.x\n的字符数的识别也不同,有的版本可能将'\n'视为一个字符有的可能将'\n'视为'\'和'n'两个字符所以这里提供两种编码方式

(rx_pointer==5&&rx_buff[0]=='K'&&rx_buff[1]=='0'&&rx_buff[2]=='.'&&rx_buff[4]=='\n')
(rx_pointer==6&&rx_buff[0]=='K'&&rx_buff[1]=='0'&&rx_buff[2]=='.'&&rx_buff[4]=='\\'&&rx_buff[5]=='n')

定时上报电压:

由于用到了串口的发送所以需要些一个串口的重定向发送函数。该函数不需要记忆可以再keil中找到

查找步骤:

点击列出主题,选择第一个双击就可以找到啦

在串口重定向函数中需要自己写串口发送函数

3.6LED模块:

3.7按键模块:

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐