12BitADC,没有开启过采样。
使能扫描和转换模式。
Sequencer set to fully configurable 不同通道转换顺序可自定义。如下图。
这里我把6和3不按从小到大的顺序排列。贴出部分代码
#include "UsartTask.h"
#include "adc.h"
struct ADC1_
{
uint16_t ch2,
ch3,ch6;
};
struct ADC1_ adc1_;
void ADC_Conversion()
{
HAL_ADC_Start(&hadc1);
if(HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
{
adc1_.ch2 = HAL_ADC_GetValue(&hadc1);
adc1_.ch6 = HAL_ADC_GetValue(&hadc1);
adc1_.ch3 = HAL_ADC_GetValue(&hadc1);
print_usart1("ADC1 CH2=%d\r\n",adc1_.ch2);
print_usart1("ADC1 CH3=%d\r\n",adc1_.ch3);
print_usart1("ADC1 CH6=%d\r\n",adc1_.ch6);
}
HAL_ADC_Stop(&hadc1);
}
void Sensor_Task( void *pvParameters )
{
BaseType_t xStatus;
//adc1内部校准
HAL_ADCEx_Calibration_Start(&hadc1);
for( ;; )
{
ADC_Conversion();
if( xStatus != pdPASS )
{
//Read err
}
osDelay(200);
}
}
注意,自定义转换顺序模式对通道数量有限制
想要使用后面几个adc通道需要选择
此时通道转换顺序从小到大。
void ADC_Conversion()
{
HAL_ADC_Start(&hadc1);
if(HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
{
adc1_.ch2 = HAL_ADC_GetValue(&hadc1);
adc1_.ch3 = HAL_ADC_GetValue(&hadc1);
adc1_.ch6 = HAL_ADC_GetValue(&hadc1);
print_usart1("ADC1 CH2=%d\r\n",adc1_.ch2);
print_usart1("ADC1 CH3=%d\r\n",adc1_.ch3);
print_usart1("ADC1 CH6=%d\r\n",adc1_.ch6);
}
HAL_ADC_Stop(&hadc1);
}
转换模式选择Backward则是从大到小顺序。