信号线接地,电压为0:
信号线接3.3v,如图:
uint16_t ADC_temp1=0;
float ADC_temp2=0;
float ADC_temp3=0;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start(&hadc1);
while (1)
{
HAL_ADC_Start(&hadc1);//开始转换
HAL_ADC_PollForConversion(&hadc1,10);//等待转换结束
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))//检查是否转换结束
{
ADC_temp1=HAL_ADC_GetValue(&hadc1);//12位就是0-4096
ADC_temp2=(float)ADC_temp1*3.3/256;//3.3是基准电压,这一步是吧模拟量转换成数字量
ADC_temp3=(float)ADC_temp1*3.3/4096;//3.3是基准电压,这一步是吧模拟量转换成数字量
}
}
}
多通道传输(dma)
adc的通道必须是连续的,否则接收不到数值
比如:通道1 2 3 4 5 6 7 8 9 对
通道 1 2 3 4 5 8 9 错误
翻译:
DMA初始化要改到adc初始化之前
否则无法接受到数据
任何外设使用dma传输都需要将dma初始化写在前面
uint32_t ADC1_buff[8];
float ADC1_value[8];
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
MX_TIM1_Init();
MX_TIM2_Init();
MX_TIM8_Init();
MX_TIM7_Init();
MX_USART2_UART_Init();
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC1_buff,8);
car_stop();
while (1)
{
for(int i=0;i<8;i++)
ADC1_value[i]=(float)(ADC1_buff[i]*3300/4096);
}
注意:ADC_DMAConvCplt为dma传输完成回调函数,但是用户无法使用该函数,在这个韩淑下,函数进入了HAL_ADC_ConvCpltCallback函数,也就是adc传输完成函数
再去hal——adc.c文件下发现这边有个弱定义函数,弱定义即用户使用函数
于是在main下调用,处理数据