单片机学习小组
直播中

刘英

7年用户 1072经验值
私信 关注

NUC230芯片ADC配置为通道1时,ADC值就固定为一个值是为什么?

NUC230芯片程序初始化都是参照官方库例程来的,现在有一个问题,就是我配置单次扫描,通道0采集数据,ADC数据正确,ADC值正常变化;当我配置为通道1时,ADC值就固定为一个值(我用示波器观察电压,ADC值时不正确的),同时ADC值不变;这是为什么呢?有大佬帮帮忙。以下是我的初始化程序
  1. void ADC0_Init(void)
  2. {
  3.     CLK_EnableModuleClock(ADC_MODULE);
  4.     CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_HIRC, CLK_CLKDIV_ADC(7));
  5.     GPIO_DISABLE_DIGITAL_PATH(PA, 0x01);
  6.     SYS->GPA_MFP &= ~(SYS_GPA_MFP_PA0_Msk) ;
  7.     SYS->GPA_MFP |= SYS_GPA_MFP_PA0_ADC0 ;
  8.     SYS->ALT_MFP1 = 0;
  9.     ADC_Open(ADC, ADC_ADCR_DIFFEN_SINGLE_END, ADC_ADCR_ADMD_SINGLE, BIT1);
  10.     ADC_POWER_ON(ADC);
  11. }
  12. uint16_t Get_ADC_Value(void)
  13. {
  14.     uint16_t ADCData;
  15.     ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
  16.     ADC_START_CONV(ADC);
  17.     while(ADC_GET_INT_FLAG(ADC, ADC_ADF_INT) != ADC_ADF_INT);
  18.     ADCData = ADC_GET_CONVERSION_DATA(ADC,1);
  19.     return ADCData;
  20. }
  21. 通道0和通道1是不是针对不同的引脚,所以你这才不会变。因为没有搭对。
  22. [indent]
  23. 通道0和通道1是不是针对不同的引脚,所以你这才不会变。因为没有搭对。[/indent]
  24. NUC230有四组ADC,每组ADC有8个通道,正常情况下每个通道都是能扫描的啊,另外只有ADC有引脚设置,通道没有引脚设置;另外我又发现一个问题,NUC230四组ADC采集AD时,用到的函数是一样的,岂不是我配置了ADC0,ADC1采集AD时,想采集ADC0,却采集到了ADC1的AD值。
  25. uint16_t Get_ADC_Value(void)
  26. {
  27.     uint16_t ADCData;
  28.     ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
  29.     ADC_START_CONV(ADC);
  30.     while(ADC_GET_INT_FLAG(ADC, ADC_ADF_INT) != ADC_ADF_INT);
  31.     ADCData = ADC_GET_CONVERSION_DATA(ADC,0);
  32.     return ADCData;
  33. }


回帖(1)

李鸿

2024-4-9 16:45:57
可能是因为通道1的引脚没有正确配置。请确保你已经正确地将通道1引脚与ADC模块相连,并已经设置了正确的引脚模式。同时,请确保你已经正确地配置了ADC的取样率和分频器等参数。如果你还是无法解决问题,请尝试在示波器和代码中观察其他可能的问题,并检查威廉希尔官方网站 是否正确连接。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分