这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 用M058S开启两路AIN0和AIN1AD转换,只有第一路能得到转换正确的数据,

共2条 1/1 1 跳转至

用M058S开启两路AIN0和AIN1AD转换,只有第一路能得到转换正确的数据,第二路一直都是0,怎么解决?

工程师
2024-10-26 21:58:02     打赏

现在用M058S开启两路AIN0和AIN1  AD转换,只有第一路能得到转换正确的数据,第二路一直都是0,万用表测量第二路脚有1.2V的电压,但就是得不到AD值,请教各位大神如下函数有哪里需要修改的呢?
/*-----------------------------------------------------------------*/
/* 初始化IO引脚                                                    */
/*-----------------------------------------------------------------*/
void IO_Init(void)
{
     /* 设定引脚复用功能 */
     SYS->P1_MFP = SYS_MFP_P10_AIN0
                 | SYS_MFP_P11_AIN1;
     SYS->P2_MFP = SYS_MFP_P20_PWM0
                 | SYS_MFP_P21_PWM1
                 | SYS_MFP_P22_PWM2
                 | SYS_MFP_P23_PWM3;
     SYS->P3_MFP = SYS_MFP_P30_RXD0
                 | SYS_MFP_P31_TXD0;
//    | SYS_MFP_P32_INT0;
     /* 配置引脚输入输出模式 */
     P0->PMD  = 0x000045F5;
     P1->PMD  = 0x0000F7FA;
     P1->OFFD = 0x00000003;
     P2->PMD  = 0x0000FF55;
     P3->PMD  = 0x0000DFCF;
     P4->PMD  = 0x0000FFF5;
}

/*-----------------------------------------------------------------*/
/* 初始化ADC                                                       */
/*-----------------------------------------------------------------*/
void ADC_Init()
{
     /* 设定ADC控制寄存器 */
     ADC->ADCR = ADC_ADCR_DMOF_UNSIGNED_OUTPUT
               | ADC_ADCR_DIFFEN_SINGLE_END
               | ADC_ADCR_TRGCOND_LOW_LEVEL
               | ADC_ADCR_ADMD_SINGLE
               | ADC_ADCR_ADEN_CONVERTER_ENABLE;
     /* 使能模拟输入通道 */
     ADC->ADCHER = 0x03;
}

// AD转换------------------------------------------
void  Bat_volt_check(void)
{
   
   uint32_t adcbuf1, adcbuf2;
   uint32_t temp;
   
         _ADC_SET_CHANNEL(0X03);        //P1.0 P1.1
    /* clear the A/D interrupt flag for safe */
         ADC->ADSR = ADC_ADSR_ADF_Msk;
   _ADC_START_CONVERT();
      _ADC_WAIT_COVERSION_DONE();
   ADC->ADSR = ADC_ADSR_ADF_Msk;      /* clear the A/D conversion flag */
   
   adcbuf1 = _ADC_GET_CONVERSION_DATA(0);

   adcbuf2 = _ADC_GET_CONVERSION_DATA(1);

   printf("ad0 = %dn", adcbuf1);
   printf("ad1 = %dn", adcbuf2);



adcbuf2 一直都是0,不管接了多少伏电压都是一样,为什么呢? 这样写的函数有问题吗?




关键词: M058S     AD转换    

助工
2024-10-26 21:58:15     打赏
2楼

ADC是不是设置成单次模式了,单次模式只转换使能的编号低的那个通道,还有不要设置成差分输入模式


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]