一、描述你遇到的问题
使用两个ADC通道时读取数据有误,按理说是先读取0通道的数据,打印,再隔两秒读取2通道的数据,打印,但是0通道和2通道数据是同时打印的,且当2通道输入改变时,数据有误
二、你具体做的所有步骤结果截图
三、当前开发板状态全景照片
#include "pinctrl.h"
#include "soc_osal.h"
#include "adc.h"
#include "adc_porting.h"
#include "osal_debug.h"
#include "cmsis_os2.h"
#include "app_init.h"
#define ADC_TASK_STACK_SIZE 0x1000
#define ADC_TASK_PRIO (osPriority_t)(17)
#define ADC_AUTO_SAMPLE_TEST_TIMES 1000
void test_adc_callback(uint8_t ch, uint32_t *buffer, uint32_t length, bool *next)
{
UNUSED(next);
printf("channel: %d, voltage: %dmv\r\n", ch, buffer[1]);
}
void test_adc_callbackk(uint8_t ch, uint32_t *buffer, uint32_t length, bool *next)
{
UNUSED(next);
printf("channel: %d, voltage: %dmv\r\n", ch, buffer[1]);
}
static void *adc_task(const char *arg)
{
UNUSED(arg);
osal_printk("start adc sample test");
uapi_adc_init(ADC_CLOCK_500KHZ);
uapi_adc_power_en(AFE_SCAN_MODE_MAX_NUM, true);
adc_scan_config_t config = {
.type = 0,
.freq = 1,
};
while (1)
{
uapi_adc_auto_scan_ch_enable(ADC_CHANNEL_0, config, test_adc_callback);
uapi_adc_auto_scan_ch_disable(ADC_CHANNEL_0);
osal_msleep(2000);
uapi_adc_auto_scan_ch_enable(ADC_CHANNEL_2, config, test_adc_callbackk);
uapi_adc_auto_scan_ch_disable(ADC_CHANNEL_2);
osal_msleep(2000);
}
return NULL;
}
static void adc_entry(void)
{
osThreadAttr_t attr;
attr.name = "ADCTask";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = ADC_TASK_STACK_SIZE;
attr.priority = ADC_TASK_PRIO;
if (osThreadNew((osThreadFunc_t)adc_task, NULL, &attr) == NULL) {
/* Create task fail. */
}
}
/* Run the adc_entry. */
app_run(adc_entry);
四、开发板串口所有日志
通道2数据输入改变时
通道0数据改变时
请在此处粘贴串口日志