基于STM32CubeMX的多通道ADC采样笔记
创建工程步骤就不演示了,这里使用的是STM32F411CE系列单片机
一:配置ADC
1.电机进入ADC模块内
2.选择要使用的通道
我使用的是通道5和通道6
3.进行参数配置
以下是我的配置,大家可以作为参考
4.进行DMA配置
注意:这里的Mode默认是Normal,若是此项则只检测一次。这里一定要修改为Circular,否则不能循环DMA搬运。
二:配置串口,使数据可以和上位机之间交互
到此基础配置完成,生成代码到Keil内。
三:进入Keil配置数据
1.配置串口输出重定向
先打开Usart.c文件,在合适的位置填下如下代码,使串口可以使用printf语句
#include <stdio.h>
//加入以下代码,支持printf函数,而不需要选择use MicroLIB
//#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#if 1
//#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0x0001);
return ch;
}
#endif
2. 修改main文件配置ADC调用及输出
打开main.c文件在main函数内定义需要用的变量
uint32_t ADC_Value[20] ; uint8_t i; uint32_t ad1,ad2;
在while循环上方添加
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_Value,20);//驱动DMA,并将数据搬运到ADC_Value 数组内
在while循环下方添加
for(i = 0 , ad1 =0 , ad2=0; i < 20; )
{
ad1 += ADC_Value[i++];
ad2 += ADC_Value[i++];
}
ad1 /= 10;
ad2 /= 10;//均值输出
printf("ADC1_value=%.3fV
", ad1*3.3f/4096);
printf("ADC2_value=%.3fV
" ,ad2*3.3f/4096);//打印
HAL_Delay(500) ;
最后运行结果
由于我这边通道5接的是3V3通道6接的是GND,所以得此值。
