目录
0.前言
这套教程针对于蓝桥杯嵌入式比赛的底层模块调试,针对于比赛进行每个模块的调试,低层模块调试好,对于赛题的实现就会方便很多,虽然有一些应试教育的意味,不过准备这个比赛对于程序整体实现思维还是有着很大帮助,我也从中受益颇多!
1.功能要求
使用STM32G431内置的ADC对R37、R38和MCP4017进行ADC采样
电路原理图
2.STM32Cubemx初始化
将PB15设置为ADC2_IN15、PB14设置为ADC1_IN5、PB12设置为ADC1_IN11
ADC1详细配置
ADC2详细配置
3.程序实现
程序使用的相关函数定义位置会在文末给出,一定自己去对应文件查找,当然能够记住是最好的!!
main.c相关初始化
main.c中创建LCD相关变量
/*main.c*/
uint16_t ADC_tt=0;//ADC读取计时标志位
uint16_t ADC_Ref=0;//ADC读取标志位
uint16_t ADC_Deal=0;//ADC读取后处理标志位
uint16_t R37_Value=0,R38_Value=0,MCP_Value=0;//存储读取到的电压值
Task_Time()函数扩充,以执行定时读取ADC值(移步②,查看该函数)
/*main.c*/
void Task_Time(void)
{
if(++Key_tt==10) {Key_tt=0;Key_Ref=1;}//按键扫描计时
if(++Lcd_tt==200) {Lcd_tt=0;Lcd_Ref=1;}//LCD刷新计时
if(++ADC_tt==300) {ADC_tt=0;ADC_Ref=1;}//ADC读取计时
}
主循环中添加判断程序(ADC_GetValue()之后会讲到)
/*main.c*/
while (1)
{
if(ADC_Ref==1)
{
ADC_Ref=0;//清除标志位
ADC_GetValue();
}
}
ADC_GetValue()编写
该函数用于获取ADC的值,并且存放在对应的变量中,将该函数定义在adc.c中,并在adc.h中声明该函数
/*adc.h*/
void ADC_GetValue(void);
adc.c引入外部变量
/*adc.c*/
extern uint16_t R37_Value,R38_Value,MCP_Value;//存储读取到的电压值
ADC_GetValue()
注意,需要使用轮询的方式来读取ADC的值,在读取同一ADC中的值时,应该多次开启ADC,按照通道顺序读取,全部读取后再关闭ADC
/*adc.c*/
void ADC_GetValue(void)
{
HAL_ADC_Start(&hadc1);//开启ADC1
HAL_ADC_PollForConversion(&hadc1,2);//轮询模式
MCP_Value=HAL_ADC_GetValue(&hadc1);//读取ADC1_IN5的值(MCP)
HAL_ADC_Start(&hadc1);//再次开启ADC
HAL_ADC_PollForConversion(&hadc1,2);//轮询模式
R38_Value=HAL_ADC_GetValue(&hadc1);//读取ADC1_IN11的值(R38)
HAL_ADC_Stop(&hadc1);//关闭ADC1
HAL_ADC_Start(&hadc2);//开启ADC2
HAL_ADC_PollForConversion(&hadc2,2);//轮询模式
R37_Value=HAL_ADC_GetValue(&hadc2);//读取ADC2_IN15的值(R37)
HAL_ADC_Stop(&hadc2);//关闭ADC2
}
相关函数定义位置stm43g4xx_hal_adc.c
/*stm43g4xx_hal_adc.c*/
HAL_ADC_Start(ADC_HandleTypeDef *hadc);
HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout);
HAL_ADC_GetValue(ADC_HandleTypeDef *hadc);
HAL_ADC_Stop(ADC_HandleTypeDef *hadc);
在Task.c中声明外部变量,即可使用读取到的电压了
/*Task.c*/
extern uint16_t R37_Value,R38_Value,MCP_Value;//存储读取到的电压值
4.工程文件
该工程文件为全10讲所有内容,可以作为参考,不过还是希望读者能够自己手敲一遍,加深记忆
链接:https://pan.baidu.com/s/1LcNszc7_oHWvXcucCezlxg?pwd=hw07
提取码:hw07
自己做的笔记,也希望能对你有帮助!