OpenEdv-开源电子网

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

请教IO口数据通过DMA存储至SDRAM实现的相关问题

[复制链接]

10

主题

28

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2016-5-19
在线时间
14 小时
发表于 2016-12-18 15:15:36 | 显示全部楼层 |阅读模式
15金钱
本帖最后由 袁小远 于 2016-12-18 15:16 编辑

本人一直在尝试,利用定时器产生一个PWM波,每次定时器溢出更新时触发DMA,把IO口读取到的数据,利用DMA存储至SDRAM。尝试好就一直不能成功,故把已写的代码贴出来,还请大家多多指教
下面的代码,我暂时没把数据存到SDRAM,先存到了内部的数组里面,也就是cmar暂时定义为了一个数组的首地址
使用了DMA的内存到内存的模式
定时器使用了TIM5,且正确产生溢出更新中断
[mw_shl_code=c,true]void MyDMA_Config(u32 cmar)
{
        DMA_InitTypeDef DMA_InitStructure;
        //GPIOC初始化,设置为输入
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);//IO口使能        
        GPIO_Configuration(GPIO_Pin_0,GPIOC);
        GPIO_Configuration(GPIO_Pin_1,GPIOC);
        GPIO_Configuration(GPIO_Pin_2,GPIOC);
        GPIO_Configuration(GPIO_Pin_3,GPIOC);
        GPIO_Configuration(GPIO_Pin_4,GPIOC);
        GPIO_Configuration(GPIO_Pin_5,GPIOC);
        GPIO_Configuration(GPIO_Pin_6,GPIOC);
        GPIO_Configuration(GPIO_Pin_7,GPIOC);
        GPIO_Configuration(GPIO_Pin_8,GPIOC);
        GPIO_Configuration(GPIO_Pin_9,GPIOC);
        GPIO_Configuration(GPIO_Pin_10,GPIOC);
        GPIO_Configuration(GPIO_Pin_11,GPIOC);
        GPIO_Configuration(GPIO_Pin_12,GPIOC);
        GPIO_Configuration(GPIO_Pin_13,GPIOC);
        GPIO_Configuration(GPIO_Pin_14,GPIOC);
        GPIO_Configuration(GPIO_Pin_15,GPIOC);
        
        //DMA初始化
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);//DMA1时钟使能
    __nop();                    //等待 DMA1 时钟稳定
        __nop();                    //经测试最少 2 个 nop
        __nop();
        DMA_DeInit(DMA1_Stream0);
        
        //当所读取的EN位为0时,才能开始配置DMA
        while (DMA_GetCmdStatus(DMA1_Stream0) != DISABLE)
        {        
        }        
        DMA_InitStructure.DMA_Channel=DMA_Channel_6;
        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &GPIOC->IDR;
    DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) cmar;
    DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToMemory;
    DMA_InitStructure.DMA_BufferSize = 1;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//是否开启循环
    DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
    DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
    DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
    DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//存储器突发单次传输
    DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//外设突发单次传输,一次传递一个字节ACR_BYTE0_ADDRESS
    DMA_Init( DMA1_Stream0, &DMA_InitStructure );  
        
        //TIM5开启DMA
    TIM_DMACmd(TIM5, TIM_DMA_Update, ENABLE );  
        
        /* Enable DMA Channel6 */
    DMA_Cmd( DMA1_Stream0, ENABLE );
}

void GPIO_Configuration(uint16_t GPIO_Pin_x,GPIO_TypeDef* GPIOx)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_x;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//上拉
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
        
        GPIO_Init(GPIOx,&GPIO_InitStructure);        
}[/mw_shl_code]

还请大家多多指教!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

28

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2016-5-19
在线时间
14 小时
 楼主| 发表于 2016-12-18 17:05:32 | 显示全部楼层
回复

使用道具 举报

10

主题

28

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2016-5-19
在线时间
14 小时
 楼主| 发表于 2016-12-19 10:04:43 | 显示全部楼层
自己顶顶
回复

使用道具 举报

3

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
586
金钱
586
注册时间
2016-5-13
在线时间
106 小时
发表于 2016-12-19 10:28:24 | 显示全部楼层
具体问题具体分析啊
你得看是哪里出的问题去哪里找
1,是不是IDR没有读出来电平状态
2,是不是DMA没有正常触发
3,是不是DMA的配置有问题
先分开把每一项功能都试通了再组合到一起,一般就不会有问题了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 07:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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