OpenEdv-开源电子网

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

STM32F103VCT6 DMA2无法工作

[复制链接]

0

主题

0

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2019-5-24
在线时间
0 小时
发表于 2016-10-15 14:58:18 | 显示全部楼层 |阅读模式
1金钱
通过SPI2操作SD卡,用DMA1的4,5通道时可以正常工作,现在想换成DMA2的1,2通道操作,DMA2一直不工作做。难道DMA2只能用于SPI3?#define SDC_DMA_RX_CH                        DMA2_Channel1                //使用DMA时接收SD卡数据的通道
#define SDC_DMA_TX_CH                        DMA2_Channel2                //使用DMA时向SD卡发送数据的通道
#define SDC_SPI_DR_Addr                            0x4000380C                        //使用DMA时对应的SPI->DR的地址
#define SDC_DMA_RX_FLAG_TE                DMA2_FLAG_TE1                //DMA接收通道传输错误标志位
#define SDC_DMA_RX_FLAG_TC                DMA2_FLAG_TC1                //DMA接收通道传输结束标志位
#define SDC_DMA_TX_FLAG_TE                DMA2_FLAG_TE2                //DMA发送通道传输错误标志位
#define SDC_DMA_TX_FLAG_TC                DMA2_FLAG_TC2                //DMA发送通道传输结束标志位

#define SDC_SPI                                        SPI2


DMA_DeInit(SDC_DMA_RX_CH);
                        st_sdcDmaInitStructure.DMA_PeripheralBaseAddr = (u32)SDC_SPI_DR_Addr;
                        st_sdcDmaInitStructure.DMA_MemoryBaseAddr = (u32)st_sdcTask.pc_buff;
                        st_sdcDmaInitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
                        st_sdcDmaInitStructure.DMA_BufferSize = 256;
                        st_sdcDmaInitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
                        st_sdcDmaInitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
                        st_sdcDmaInitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
                        st_sdcDmaInitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
                        st_sdcDmaInitStructure.DMA_Mode = DMA_Mode_Normal;
                        st_sdcDmaInitStructure.DMA_Priority = DMA_Priority_Low;
                        st_sdcDmaInitStructure.DMA_M2M = DMA_M2M_Disable;
                        DMA_Init(SDC_DMA_RX_CH, &st_sdcDmaInitStructure);
                        //发送通道设置
                        DMA_DeInit(SDC_DMA_TX_CH);  
                        st_sdcDmaInitStructure.DMA_PeripheralBaseAddr = (u32)SDC_SPI_DR_Addr;
                        st_sdcDmaInitStructure.DMA_MemoryBaseAddr = (u32)st_sdcTask.pc_buff;
                        st_sdcDmaInitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
                        st_sdcDmaInitStructure.DMA_Priority = DMA_Priority_Low;
                        DMA_Init(SDC_DMA_TX_CH, &st_sdcDmaInitStructure);

                        SPI_I2S_DMACmd(SDC_SPI, SPI_I2S_DMAReq_Tx, ENABLE);
                        SPI_I2S_DMACmd(SDC_SPI, SPI_I2S_DMAReq_Rx, ENABLE);

                        DMA_Cmd(SDC_DMA_RX_CH, ENABLE);         //先使能接收通道再使能发送通道
                        DMA_Cmd(SDC_DMA_TX_CH, ENABLE);


寄存器状态如下:感觉寄存器也没什么异常啊。
求大神指教一下,万分感谢!

Screenshot_20161015145609.png


最佳答案

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

漏了贴出这一段了 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2019-5-24
在线时间
0 小时
 楼主| 发表于 2016-10-15 14:58:19 | 显示全部楼层
        漏了贴出这一段了  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2019-5-24
在线时间
0 小时
 楼主| 发表于 2016-10-15 15:02:01 | 显示全部楼层
STM32F103VCT6是256K FLASH的 按照手册上面写的应该是有DMA2的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 17:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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