配置引脚需要注意:
一定要结合板子的电路图,不要乱配置引脚
1.基础概念
参考:
【STM32F407,12位ADC实现(CubeIDE) - CSDN App】http://t.csdnimg.cn/4Jqak
【STM32F407VET6 多通道ADC采集+DMA HAL库 - CSDN App】http://t.csdnimg.cn/ZueIc
①:轮询的方式(单通道)
uint16_t ADC_Value1;
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,50);
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))
{
ADC_Value1 = HAL_ADC_GetValue(&hadc1);
printf("adc1:%d\r\n",ADC_Value1);
printf("adc1:%.4f\r\n",ADC_Value1*3.3f/4096);
}
HAL_Delay(1000);
轮询的方式多通道(有问题没调试出来
②:DMA
HAL库配置
//【单通道】
uint16_t ADC_Value[1] = {0};
/* USER CODE BEGIN 4 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
HAL_ADC_Stop_DMA(&hadc1);
printf("%d ,%d\r\n",ADC_Value[0]);
printf("%.3f ,%.3f\r\n",ADC_Value[0]*3.3/4096);
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Value,2);
}
/* USER CODE END 4 */
//usart.c文件里面
#include "stdio.h"
/* USER CODE BEGIN 1 */
int fputc(int ch,FILE *f)
{
HAL_UART_Transmit(&huart2,(uint8_t*)&ch,1,0xffff);
return ch;
}
int fgetc(FILE *f)
{
uint8_t ch = 0;
HAL_UART_Receive(&huart2,&ch,1,0xffff);
return ch;
}
//main.c里面调用printf函数时也要引入#include "stdio.h"
//【多通道】
uint16_t ADC_Value[1] = {0};//有多少设置多少
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
HAL_ADC_Stop_DMA(&hadc1);
printf("%d ,%d\r\n",ADC_Value[0],ADC_Value[1]);
printf("%.3f ,%.3f\r\n",ADC_Value[0]*3.3/4096,ADC_Value[1]*3.3/4096);
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Value,2);
}