打印
[技术问答]

新唐M031芯片AD采集问题

[复制链接]
1877|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
第一次使用M031SG6AE这款芯片,现在问题是采集AD时,读回的值固定是0XFFF,基准电压3.3V正常,电位器控制有效(芯片脚电压随动),用的是内部RC振荡作时钟源。

使用特权

评论回复
沙发
muzili588|  楼主 | 2020-6-28 11:08 | 只看该作者
电路

QQ截图20200628105832.png (30.62 KB )

QQ截图20200628105832.png

使用特权

评论回复
板凳
muzili588|  楼主 | 2020-6-28 11:12 | 只看该作者




void SYS_Init(void)
{
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Enable HIRC clock (Internal RC 48MHz) */
    CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

    /* Wait for HIRC clock ready */
    CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

    /* Select HCLK clock source as HIRC and HCLK source divider as 1 */
    CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));

    /* Enable UART0 clock */
    CLK_EnableModuleClock(UART0_MODULE);
    CLK_EnableModuleClock(UART1_MODULE);

        CLK_EnableModuleClock(TMR0_MODULE);

        CLK_EnableModuleClock(ADC_MODULE);

    /* Switch UART0 clock source to HIRC */
    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1));
    CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART1SEL_HIRC, CLK_CLKDIV0_UART0(1));

    CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_HIRC, 0);
       
        CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL2_ADCSEL_HIRC, CLK_CLKDIV0_ADC(1));

    /* Update System Core Clock */
    SystemCoreClockUpdate();

        SYS->GPA_MFPH = (SYS->GPA_MFPH & ~(SYS_GPA_MFPH_PA15MFP_Msk | SYS_GPA_MFPH_PA14MFP_Msk \
                                        | SYS_GPA_MFPH_PA8MFP_Msk | SYS_GPA_MFPH_PA9MFP_Msk))| \
                                        (SYS_GPA_MFPH_PA15MFP_UART0_RXD | SYS_GPA_MFPH_PA14MFP_UART0_TXD \
                                        | SYS_GPA_MFPH_PA8MFP_UART1_RXD | SYS_GPA_MFPH_PA9MFP_UART1_TXD);
       
        SYS->GPB_MFPL = (SYS->GPB_MFPL & ~(SYS_GPB_MFPL_PB0MFP_Msk | SYS_GPB_MFPL_PB1MFP_Msk | SYS_GPB_MFPL_PB2MFP_Msk | SYS_GPB_MFPL_PB3MFP_Msk|SYS_GPB_MFPL_PB4MFP_Msk | SYS_GPB_MFPL_PB5MFP_Msk | SYS_GPB_MFPL_PB6MFP_Msk | SYS_GPB_MFPL_PB7MFP_Msk)) |
                                                (SYS_GPB_MFPL_PB0MFP_ADC0_CH0 | SYS_GPB_MFPL_PB1MFP_ADC0_CH1 | SYS_GPB_MFPL_PB2MFP_ADC0_CH2 | SYS_GPB_MFPL_PB3MFP_ADC0_CH3|SYS_GPB_MFPL_PB4MFP_ADC0_CH4 | SYS_GPB_MFPL_PB5MFP_ADC0_CH5 | SYS_GPB_MFPL_PB6MFP_ADC0_CH6 | SYS_GPB_MFPL_PB7MFP_ADC0_CH7);

         GPIO_SetMode(PB, BIT0, GPIO_MODE_INPUT);
         GPIO_SetMode(PB, BIT1, GPIO_MODE_INPUT);
         GPIO_SetMode(PB, BIT2, GPIO_MODE_INPUT);
         GPIO_SetMode(PB, BIT3, GPIO_MODE_INPUT);
         GPIO_SetMode(PB, BIT4, GPIO_MODE_INPUT);
         GPIO_SetMode(PB, BIT5, GPIO_MODE_INPUT);
         GPIO_SetMode(PB, BIT6, GPIO_MODE_INPUT);
         GPIO_SetMode(PB, BIT7, GPIO_MODE_INPUT);
         
         GPIO_DISABLE_DIGITAL_PATH(PB, BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7);
    /* Lock protected registers */
    SYS_LockReg();
}
void adc_conversion(void)

{
                ADC_Open(ADC, ADC_ADCR_DIFFEN_SINGLE_END, ADC_ADCR_ADMD_SINGLE,0xff);       
                ADC_START_CONV(ADC);
                ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
                ADC_START_CONV(ADC);
                delay_1ms(20);
                ConversionData = ADC_GET_CONVERSION_DATA(ADC, 0);
                printf("Conversion result of channel : 0x%X (%d)\n", ConversionData, ConversionData);
                ADC_STOP_CONV(ADC);
                ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);

}




使用特权

评论回复
地板
muzili588|  楼主 | 2020-6-28 11:15 | 只看该作者
每次串口调试打印的值都是0XFFF,未能找到原因。

使用特权

评论回复
5
734774645| | 2020-6-28 11:56 | 只看该作者
先不说这么多,你先跑个官方例子看看能否读出来,这样好确认是软件问题还是硬件问题。

使用特权

评论回复
6
余三水| | 2020-6-28 12:09 | 只看该作者
拿官方的ad例程写进去试试,看不出代码有什么问题。

使用特权

评论回复
7
稳稳の幸福| | 2020-6-28 12:56 | 只看该作者
你要先排除是软件问题还是硬件问题。

使用特权

评论回复
8
muzili588|  楼主 | 2020-6-28 13:33 | 只看该作者
734774645 发表于 2020-6-28 11:56
先不说这么多,你先跑个官方例子看看能否读出来,这样好确认是软件问题还是硬件问题。 ...

官方AD程序跑出来也是0XFFF

使用特权

评论回复
9
muzili588|  楼主 | 2020-6-28 13:34 | 只看该作者
余三水 发表于 2020-6-28 12:09
拿官方的ad例程写进去试试,看不出代码有什么问题。

试过官方的例程了,也是一样的结果。

使用特权

评论回复
10
muzili588|  楼主 | 2020-6-28 15:46 | 只看该作者
稳稳の幸福 发表于 2020-6-28 12:56
你要先排除是软件问题还是硬件问题。

就是单端输入接入,我量了电压都是正确的,基准电压也有3.3V,硬件应该没什么问题,但是我用官方例程也没有跑通(值也是0XFFF),所以就没想明白,卡住了。

使用特权

评论回复
11
dongnanxibei| | 2020-6-28 18:25 | 只看该作者
楼主有这个芯片的开发板没,官方的,先试试看。如果官方板子没问题,那就是你的板子有问题。

使用特权

评论回复
12
muzili588|  楼主 | 2020-6-28 19:06 | 只看该作者
找到问题了,谢谢各位,是硬件设计有点问题,58脚(VREF)接个上拉就可以了。

使用特权

评论回复
13
幸福小强| | 2020-6-28 19:56 | 只看该作者
muzili588 发表于 2020-6-28 19:06
找到问题了,谢谢各位,是硬件设计有点问题,58脚(VREF)接个上拉就可以了。 ...

是啊,这个要接到VACC,没有接参考电压无法给出测量结果。

使用特权

评论回复
14
幸福小强| | 2020-6-28 19:57 | 只看该作者
所以遇到这个问题就是先跑官方例子,看看有没有问题,如果有问题就是硬件问题,如果没有问题,才开始查找软件问题。

使用特权

评论回复
15
ko44| | 2020-6-28 21:10 | 只看该作者
除了STC出纯中文单片机开发文档,国内还有哪个厂子出纯中文的开发文档的?不是翻译的中文的。
谁知道告诉下。

使用特权

评论回复
16
稳稳の幸福| | 2020-6-28 22:15 | 只看该作者
ko44 发表于 2020-6-28 21:10
除了STC出纯中文单片机开发文档,国内还有哪个厂子出纯中文的开发文档的?不是翻译的中文的。
谁知道告诉下 ...

新唐啊

使用特权

评论回复
17
734774645| | 2020-6-29 17:26 | 只看该作者
多谢分享经验

使用特权

评论回复
18
ko44| | 2020-6-29 21:38 | 只看该作者

坑我,
就烧录器是它的公司开发的,有个中文文档。
单片机的功能文档以及使用说明,还是英文的。挂国产的洋货。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

40

帖子

0

粉丝