#define ADC_DEV_NAME "adc1" /* ADC 设备名称 /
#define ADC_DEV_CHANNEL_PA0 0 / ADC 通道 /
#define ADC_DEV_CHANNEL_PA1 1 / ADC 通道 /
#define ADC_DEV_CHANNEL_PA4 4 / ADC 通道 /
#define ADC_DEV_CHANNEL_PA5 5 / ADC 通道 /
#define ADC_DEV_CHANNEL_PA6 6 / ADC 通道 /
#define ADC_DEV_CHANNEL_PA7 7 / ADC 通道 /
#define ADC_DEV_CHANNEL_PB0 8 / ADC 通道 /
#define ADC_DEV_CHANNEL_PB1 9 / ADC 通道 /
#define REFER_VOLTAGE 330 / 参考电压 3.3V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS (1 << 12) /* 转换位数为12位 /
//创建adc采集线程
rt_thread_t Adc_thread = RT_NULL;
static void Adc_entry(void paremeter)
{
rt_adc_device_t adc_dev;
rt_uint32_t adc1_value,adc1_vol,adc2_value,adc2_vol,adc3_value,adc3_vol,adc4_value,adc4_vol;
rt_uint32_t adc5_value,adc5_vol,adc6_value,adc6_vol,adc7_value,adc7_vol,adc8_value,adc8_vol;
rt_err_t ret;
adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
if (adc_dev == RT_NULL)
{
rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);
}
/* 使能设备*/
ret= rt_adc_enable(adc_dev, ADC_DEV_CHANNEL_PA0|ADC_DEV_CHANNEL_PA1|ADC_DEV_CHANNEL_PA4|ADC_DEV_CHANNEL_PA5|ADC_DEV_CHANNEL_PA6|ADC_DEV_CHANNEL_PA7|ADC_DEV_CHANNEL_PB0|ADC_DEV_CHANNEL_PB1);
if(ret == RT_EOK)
{
rt_kprintf("adc sample run success! find %s device!\n", ADC_DEV_NAME);
}
rt_thread_mdelay(1000);
while(1)
{
/* 读取采样值 /
adc1_value= rt_adc_read(adc_dev, ADC_DEV_CHANNEL_PA0);
/ 转换为对应电压值 /
adc1_vol = adc1_value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the adc1_voltage is :%d.%02d \n", adc1_vol / 100, adc1_vol % 100);
adc2_value= rt_adc_read(adc_dev, ADC_DEV_CHANNEL_PA1);
adc2_vol = adc2_value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the adc2_voltage is :%d.%02d \n", adc2_vol / 100, adc2_vol % 100);
adc3_value= rt_adc_read(adc_dev, ADC_DEV_CHANNEL_PA4);
adc3_vol = adc3_value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the adc3_voltage is :%d.%02d \n", adc3_vol / 100, adc3_vol % 100);
adc4_value= rt_adc_read(adc_dev, ADC_DEV_CHANNEL_PA5);
adc4_vol = adc4_value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the adc4_voltage is :%d.%02d \n", adc4_vol / 100, adc4_vol % 100);
adc5_value= rt_adc_read(adc_dev, ADC_DEV_CHANNEL_PA6);
adc5_vol = adc5_value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the adc5_voltage is :%d.%02d \n", adc5_vol / 100, adc5_vol % 100);
adc6_value= rt_adc_read(adc_dev, ADC_DEV_CHANNEL_PA7);
adc6_vol = adc6_value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the adc6_voltage is :%d.%02d \n", adc6_vol / 100, adc6_vol % 100);
adc7_value= rt_adc_read(adc_dev, ADC_DEV_CHANNEL_PB0);
adc7_vol = adc7_value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the adc7_voltage is :%d.%02d \n", adc7_vol / 100, adc7_vol % 100);
adc8_value= rt_adc_read(adc_dev, ADC_DEV_CHANNEL_PB1);
adc8_vol = adc8_value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the adc8_voltage is :%d.%02d \n", adc8_vol / 100, adc8_vol % 100);
rt_thread_delay(500);
}
}
int app_ADC_init(void)
{
Adc_thread = rt_thread_create("adc1",
Adc_entry,
RT_NULL,
THREAD_STACK_SIZE4,
THREAD_PRIORITY-20,
THREAD_TIMESLICE*2);
if(Adc_thread != RT_NULL)
{
rt_thread_startup(Adc_thread);
}
return RT_EOK;
}
INIT_APP_EXPORT(app_ADC_init);
数据采集过程中adc的值移植不稳定,三路3.3v,5路0v,采集的结果如图