基于STM32CubeMX的多通道ADC采样笔记

创建工程步骤就不演示了,这里使用的是STM32F411CE系列单片机

一:配置ADC

1.电机进入ADC模块内

基于STM32CubeMX的多通道ADC采样笔记_第1张图片

2.选择要使用的通道

我使用的是通道5和通道6

基于STM32CubeMX的多通道ADC采样笔记_第2张图片

 3.进行参数配置

以下是我的配置,大家可以作为参考

基于STM32CubeMX的多通道ADC采样笔记_第3张图片

 4.进行DMA配置

基于STM32CubeMX的多通道ADC采样笔记_第4张图片

注意:这里的Mode默认是Normal,若是此项则只检测一次。这里一定要修改为Circular,否则不能循环DMA搬运。

二:配置串口,使数据可以和上位机之间交互

 基于STM32CubeMX的多通道ADC采样笔记_第5张图片

 到此基础配置完成,生成代码到Keil内。

三:进入Keil配置数据

1.配置串口输出重定向

先打开Usart.c文件,在合适的位置填下如下代码,使串口可以使用printf语句

#include 

//加入以下代码,支持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\r\n", ad1*3.3f/4096);
printf("ADC2_value=%.3fV\r\n" ,ad2*3.3f/4096);//打印
HAL_Delay(500) ;

最后运行结果

基于STM32CubeMX的多通道ADC采样笔记_第6张图片

 由于我这边通道5接的是3V3通道6接的是GND,所以得此值。

你可能感兴趣的:(stm32,单片机,arm)