蓝桥杯嵌入式-ADC
本文介绍了基于STM32CubMX配置和代码实现的蓝桥杯嵌入式LCD项目ADC采集功能。主要内容包括:1)使用STM32CubMX配置双ADC通道(R37和R38);2)在main.c中添加ADC校准和DMA启动代码;3)在task.c中实现ADC数据处理和LCD显示功能;4)提供单ADC采集的简化实现方案。文章详细说明了代码修改位置,并附有完整项目代码下载链接。该方案实现了双通道ADC数据采集、
·
本篇文章是在蓝桥杯嵌入式-LCD完整的项目下补充完成的。如果需要代码,直接看第四部分的下载链接。
一、STM32CubMX配置








二、代码方面
2.1 main.c
2.1.1 修改位置

2.1.2 对应代码
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED); //ADC校准函数
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED); //ADC校准函数
HAL_ADC_Start_DMA(&hadc2,(uint32_t*)&adc_buffer[0][0],30); //R37-PB15
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&adc_buffer[1][0],30); //R38-PB12
2.2 task.c
2.2.1 修改位置


2.2.2 对应代码
uint32_t adc_buffer[2][30];
float adcVal[2];
void adc_proc(void)
{
adcVal[0] = 0;
adcVal[1] = 0;
for (uint8_t i = 0; i < 30; i++)
{
adcVal[0] += adc_buffer[0][i];
adcVal[1] += adc_buffer[1][i];
}
adcVal[0] = adcVal[0] / 30 * 3.3f / 4096;
adcVal[1] = adcVal[1] / 30 * 3.3f / 4096;
}
void lcd_proc()
{
lcddisplay(Line1, "R37:%.2f R38:%.2f",adcVal[0],adcVal[1]);
}
task_t scheduler_t[] =
{
{lcd_proc, 100, 0},
{adc_proc,100,0}
};
2.3 task.h
2.3.1 修改位置

2.3.2 对应代码
extern uint32_t adc_buffer[2][30];
三、其他
3.1 task.h的打开方法
3.1.1

3.1.2

3.2 校准函数查找方法(比赛时以找为主)

3.3 单ADC捕获代码(下载资料含单ADC例程)
STM32CubMX只用配置需要使用的(R37/R38),代码的位置与本文第二部分内容相同。例程为R38。
main.c
/*如果使用R37,只需要将这两个函数的hadc1改为hadc2即可,task.c、task.h不用修改任何东西*/
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&adc_buffer[0],30);
/*R37使用以下函数(STM32CubMX配置参考本文第一部分,只配置R37相关即可)*/
//HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
//HAL_ADC_Start_DMA(&hadc2,(uint32_t*)&adc_buffer[0],30);
task.c
uint32_t adc_buffer[30];
float adcVal;
void adc_proc(void)
{
adcVal = 0;
for (uint8_t i = 0; i < 30; i++)
{
adcVal += adc_buffer[0];
}
adcVal = adcVal / 30 * 3.3f / 4096;
}
void lcd_proc()
{
lcddisplay(Line1, "R38:%.2f",adcVal);
}
task_t scheduler_t[] =
{
{lcd_proc, 100, 0},
{adc_proc,100,0}
};
task.h
extern uint32_t adc_buffer[30];
3.4 完整代码下载
资料下载:https://pan.quark.cn/s/08f8e6116512
更多推荐
所有评论(0)