[新唐博主] NUC230芯片ADC采集数据问题

[复制链接]
136|7
 楼主 | 2019-7-9 19:57 | 显示全部楼层 |阅读模式
NUC230芯片程序初始化都是参照官方库例程来的,现在有一个问题,就是我配置单次扫描,通道0采集数据,ADC数据正确,ADC值正常变化;当我配置为通道1时,ADC值就固定为一个值(我用示波器观察电压,ADC值时不正确的),同时ADC值不变;这是为什么呢?有大佬帮帮忙。以下是我的初始化程序[code]void ADC0_Init(void)
{
    CLK_EnableModuleClock(ADC_MODULE);
    CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_HIRC, CLK_CLKDIV_ADC(7));
    GPIO_DISABLE_DIGITAL_PATH(PA, 0x01);
    SYS->GPA_MFP &= ~(SYS_GPA_MFP_PA0_Msk) ;
    SYS->GPA_MFP |= SYS_GPA_MFP_PA0_ADC0 ;
    SYS->ALT_MFP1 = 0;
    ADC_Open(ADC, ADC_ADCR_DIFFEN_SINGLE_END, ADC_ADCR_ADMD_SINGLE, BIT1);
    ADC_POWER_ON(ADC);
}
uint16_t Get_ADC_Value(void)
{
    uint16_t ADCData;
    ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
    ADC_START_CONV(ADC);

    while(ADC_GET_INT_FLAG(ADC, ADC_ADF_INT) != ADC_ADF_INT);
    ADCData = ADC_GET_CONVERSION_DATA(ADC,1);

    return ADCData;
}

使用特权

评论回复
| 2019-7-9 23:05 | 显示全部楼层
通道0和通道1是不是针对不同的引脚,所以你这才不会变。因为没有搭对。

使用特权

评论回复
 楼主 | 2019-7-10 08:54 | 显示全部楼层
dongnanxibei 发表于 2019-7-9 23:05
通道0和通道1是不是针对不同的引脚,所以你这才不会变。因为没有搭对。

NUC230有四组ADC,每组ADC有8个通道,正常情况下每个通道都是能扫描的啊,另外只有ADC有引脚设置,通道没有引脚设置;另外我又发现一个问题,NUC230四组ADC采集AD时,用到的函数是一样的,岂不是我配置了ADC0,ADC1采集AD时,想采集ADC0,却采集到了ADC1的AD值。
uint16_t Get_ADC_Value(void)
{
    uint16_t ADCData;
    ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
    ADC_START_CONV(ADC);

    while(ADC_GET_INT_FLAG(ADC, ADC_ADF_INT) != ADC_ADF_INT);
    ADCData = ADC_GET_CONVERSION_DATA(ADC,0);

    return ADCData;
}[/code]

使用特权

评论回复
| 2019-7-10 20:45 | 显示全部楼层
楼主说的是官方的BSP的例子吗

使用特权

评论回复
| 2019-7-10 20:46 | 显示全部楼层
我去下载个看看啥情况。

使用特权

评论回复
 楼主 | 2019-7-10 23:14 | 显示全部楼层
小明的同学 发表于 2019-7-10 20:46
我去下载个看看啥情况。

用的官方的例程,我现在用两组ADC,ADC0只能使用通道0,ADC2只能使用通道2;ADC初始化程序,不能同时初始化两组ADC,如果同时初始化只有最后的一组ADC是好使的

使用特权

评论回复
| 2019-7-15 08:38 | 显示全部楼层
看来两次初始化的时候干扰了第一组的。

使用特权

评论回复
| 2019-7-15 08:39 | 显示全部楼层
检查一下初始化的代码,是不是操作的逻辑操作,破坏了之前的操作,或者没有保留之前的寄存器内容。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表