你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

ADC+DMA的数据没问题,但复制数据出来时出错

[复制链接]
逆流而上的猫 提问时间:2019-4-30 10:05 /
最近在使用多重ADC+DMA时出现了一个奇怪的BUG,ADC和DMA采集的数据很正常,是我想要的波形,但是一旦把DMA的缓存数据copy到另外数组的时候,就出错,具体如下:用串口来把ADC采样得到的数据发送出来,当串口收到任意东西时,就开启发送,其中adcx是储存AD转换数据的数组,也是DMA的内存目标,串口代码如下:
void USART1_IRQHandler(void)                        
{
        u8 Res;
        u16 i;
        u16 j;
        float a[512];        
        volatile float temp;
        extern volatile u16 adcx[256][6];
#if SYSTEM_SUPPORT_OS                 
        OSIntEnter();   
#endif
        
        if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE))
        {
               
                for(j=0;j<256;j++)
                {
                        printf("%d\r\n",adcx[j][0]);                        
                }
               
                TIM_Cmd(TIM2,ENABLE);
                Res= USART_ReceiveData(USART1);
        }
#if SYSTEM_SUPPORT_OS         
        OSIntExit();                                                                                          
#endif
}
到这里一切正常,输出出来的就是我想要的ad数据,但是因为我要把adcx的部分数据提取出来做FFT,所以需要复制部分数据到另外的数组float a[512],所以又加了端代码在for的下边
先将adcx储存的u16数据转化成float,然后打印出来看是否正确,然后把数据转移到数组a,具体代码如下:
for(j=0;j<256;j++)
{
        temp=(float)(adcx[j][0]);
        printf("%d::%f\r\n",j,temp);
        a[j]=temp ;
}
结果串口出来了乱码,不是我期望的数据





我以为是从u16到float的转换出现了错误,我就把a[j]=temp ;这一句注释掉,相当于代码如下
for(j=0;j<256;j++)
{
        temp=(float)(adcx[j][0]);
        printf("%d::%f\r\n",j,temp);
        //a[j]=temp ;
}

出来的结果就正常,依旧是正弦波,打印出来的也正常,打印出了完整的256个点



所以相当于是这样子的,AD采样没问题,DMA也没问题,数据也正常,数据类型转化也没问题,但是一旦把数据从adcx转移到另外的数组,就出现了错误,为什么?折腾一天了,跪求大神解答

<
收藏 评论3 发布时间:2019-4-30 10:05

举报

3个回答
xmshao 回答时间:2019-5-21 15:16:29
怀疑你时堆栈溢出了。
你可以将堆栈配置加大点,或者将现有局部变量定义为全局变量。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

edmundlee 回答时间:2019-5-21 16:12:39
采样是连续的?DMA是循环模式?
天臆弄人 回答时间:2019-5-22 11:41:46
不要在中断中操作 这么耗时的程序,不要在中断 函数 定义这么大变量 float 数组

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版