OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3645|回复: 5

ADC两路转换,遇到两个问题

[复制链接]

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2017-12-20 16:56:48 | 显示全部楼层 |阅读模式
5金钱
多通道ADC转换,出现了两个问题,这里我就用了一个通道来转换,我设想的是重复一个通道转换完成后DMA发送出去,
第一个问题:adcVolValue这个数组前5个没有数据,只有5~9内有转换的数据,也就是只转换了5次,结果导致平均值就缩水了一半了,(这里我就是的通道5的PA5采样3.3V电压值)这是第一个问题。
第二个问题:转换完10次后(虽然只转换了5次),不在继续转换,不知道是什么情况,我把寄存器设了一遍了,实在是找不到原因了,求各位指点。[mw_shl_code=applescript,true]u8 mpudata[128] __attribute__((at(0X20002000)));        //¶¨òåò»¸öêy×é
int main(void)
{  
        u16 temp;
        float dec;
        u8 num,i,x=10,y=10;
        Stm32_Clock_Init(432,25,2,9);                //éèÖÃê±Öó,216Mhz
  delay_init(216);                                        //Ñóê±3õê¼»ˉ  
        MPU_Memory_Protection();
        LED_Init();                                                          //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
        sdramInit();       
        lcdInit();
        dmaInit();
        adcInit();
        my_mem_init(SRAMIN);
        my_mem_init(SRAMEX);
        lcdPointerColor = RED;
        lcdShowString(10,10,242,40,"Digital Value:",14,32,0);
        lcdShowString(10,50,242,90,"Analog Vol:",11,32,0);
        while(1)
        {
        while(!(DMA2->LISR &(1<<5)));
        DMA2->LIFCR &= ~(1<<5);
        for(i=0;i<10;i++)
        {
                temp+=adcVolValue;
        }
        temp /= 10;       
        lcdShowNumber(242,10,400,40,temp,32,0);
        for(i=10;i<20;i++)
        {
                temp+=adcVolValue;
        }
        temp /= 10;
        lcdShowNumber(242,50,300,90,temp,32,0);
       
//        ADC1->CR2 |= 1<<30;
//        if(DMA2_Stream0->NDTR == 1)
//        {
//                lcdShowString(242,50,300,90,"secess",6,32,0);
                ADC1->SR = 0;
                DMA2_Stream0->CR &= ~(1<<0);
                ADC1->CR2 &= ~(1<<0);
                ADC1->CR2 &= ~(1<<8);
                while(DMA2_Stream0->CR &0x01);
                DMA2_Stream0->M0AR = (u32)adcVolValue;
                DMA2_Stream0->CR |= 1<<0;
               
                ADC1->CR2 |= 1<<0;
                ADC1->CR2 |= 1<<8;
                ADC1->CR2 |= 1<<30;
//        }

//                dec = (float)temp * (3.6/4096);
//                temp = dec;
//                lcdShowNumber(192,50,temp,32,0);
//                lcdShowChar(208,50,'.',32,0);
//                dec -= (float)temp;
//                dec*=1000;
//                temp = dec;
//                lcdShowNumber(226,50,temp,32,0);
                delay_ms(500);

        }
}[/mw_shl_code]
[mw_shl_code=applescript,true]u16 adcVolValue[20];
void dmaInit()
{
        RCC->AHB1ENR |= 1<<22;
       
        ADC1->CR2 &= ~(1<<8);
        DMA2_Stream0->CR &= ~(0x01);
       
        while(DMA2_Stream0->CR &0x01);
        DMA2->LIFCR = (1<<0)|(0x1F<<2) | (15<<8)|(1<<16)|(0x1F<<18)|(15<<24);
        DMA2->HIFCR = (1<<0)|(0x1F<<2) | (15<<8)|(1<<16)|(0x1F<<18)|(15<<24);
       
        DMA2_Stream0->PAR = (u32)&ADC1->DR;//íaéèμ&#216;&#214;·
        DMA2_Stream0->M0AR = (u32)adcVolValue;//&#196;ú′&#230;μ&#216;&#214;·
        DMA2_Stream0->NDTR = 20;//êy&#190;Yá&#191;
       
        DMA2_Stream0->CR = 0;
        DMA2_Stream0->CR |= 0<<25;//&#209;&#161;&#212;&#241;í¨μà0
        DMA2_Stream0->CR |= 1<<16;//ó&#197;&#207;è&#188;&#182;&#214;Dμè
//        DMA2_Stream0->FCR |= 7<<0;
        DMA2_Stream0->CR |= 1<<10;//′&#230;′¢&#198;÷μ&#216;&#214;·×&#212;&#182;ˉ&#188;ó1£&#172;μú9&#206;&#187;&#206;a0ê&#199;íaéèμ&#216;&#214;·1ì&#182;¨
//μú&#198;&#223;&#206;&#187;&#206;a0£&#172;±íê&#190;êy&#190;Y′&#171;ê&#228;·&#189;&#207;ò£oíaéèμ&#189;′&#230;′¢&#198;÷
        DMA2_Stream0->CR |= 1<<13;//&#196;ú′&#230;êy&#190;Y&#191;í&#182;è
        DMA2_Stream0->CR |= 1<<11;//íaéèêy&#190;Y&#191;í&#182;è
        DMA2_Stream0->CR |= 1<<8;//&#209;-&#187;·&#196;£ê&#189;
       
//        DMA2_Stream0->FCR &= ~(1<<2);
        DMA2_Stream0->CR |= 1<<0;//ê1&#196;üDMA
}
void adcInit()
{
        RCC->AHB1ENR |= 1<<0;//ê1&#196;üADC1ê±&#214;ó
        RCC->APB2ENR |= 1<<8;//ê1&#196;üGPIOAê±&#214;ó
       
//        GPIO_Set(GPIOA,PIN5 | PIN7,GPIO_MODE_AIN,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD);//&#184;′ó&#195;GPIOA
        GPIO_Set(GPIOA,PIN0 | PIN1,GPIO_MODE_AIN,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD);
       
        ADC->CCR = 0;
//        ADC->CCR |= 15<<8;
//        ADC->CCR |= 3<<13;//&#214;&#187;òa·¢éú±&#228;&#187;ˉ£&#172;&#190;í·¢3&#246;DMA&#199;&#235;&#199;ó
//        ADC->CCR |= 1<<14;//ê1&#196;üDMA&#196;£ê&#189;1
        ADC->CCR |= 1<<16;//ADC1&#212;¤·&#214;&#198;μ
//        ADC->CCR |= 6<<0;//3£1&#230;í¨μàí&#172;2&#189;&#196;£ê&#189;
       
        ADC1->CR1 = 0;
        ADC1->CR1 |= 1<<8;//é¨&#195;è&#196;£ê&#189;
       
        ADC1->CR2 = 0;
        ADC1->CR2 |= 1<<1;//á&#172;D&#248;×a&#187;&#187;&#196;£ê&#189;
        ADC1->CR2 |= 1<<9;//&#214;&#187;òa·¢éú×a&#187;&#187;£&#172;&#190;í·¢3&#246;dmA&#199;&#235;&#199;ó
        ADC1->SQR1 = 0;
        ADC1->SQR1 = 1<<20;//á&#189;′&#206;×a&#187;&#187;
        ADC1->SMPR2 = 0;

        ADC1->SMPR2 |= 2<<0;//í¨μà02é&#209;ùê±&#188;&#228;
        ADC1->SMPR2 |= 2<<3;//í¨μà12é&#209;ùê±&#188;&#228;

        ADC1->SQR3 |= 0;//í¨μà5μúò&#187;′&#206;×a&#187;&#187;
        ADC1->SQR3 |= 1<<5;//í¨μà7μú&#182;t′&#206;×a&#187;&#187;
       

        ADC1->CR2 |= 1<<8;//ê1&#196;üDMA&#196;£ê&#189;
        ADC1->CR2 |= 1<<0;//ê1&#196;üADC
        ADC1->CR2 |= 1<<30;//&#191;aê&#188;í¨μà×a&#187;&#187;
//        DMA2_Stream0->CR |= 1<<0;//ê1&#196;üDMA       
       
}
[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

找了一个星期原因了,终于找到原因,和之前的LCD设置或者是SDRAM设置有冲突导致的,我把所有的哪些没用的代码删掉,结果可以了,明天继续找原因,改天回来补个帖子
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
 楼主| 发表于 2017-12-20 16:56:49 | 显示全部楼层
找了一个星期原因了,终于找到原因,和之前的LCD设置或者是SDRAM设置有冲突导致的,我把所有的哪些没用的代码删掉,结果可以了,明天继续找原因,改天回来补个帖子
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
 楼主| 发表于 2017-12-20 16:58:08 | 显示全部楼层
求各位指点下,困扰了我三天了,不知道原因出在哪里,求指点呀
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
 楼主| 发表于 2017-12-20 17:17:10 | 显示全部楼层
代码注释没了,重新上传个图片

1

1

2

2

3

3
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
 楼主| 发表于 2017-12-20 19:18:02 | 显示全部楼层
不要沉啊。。。。。求救啊,三天了,不知道哪里出问题了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-12-21 23:03:35 | 显示全部楼层
参考下论坛网友的代码,另外,建议先做好一个通道的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 17:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表