打印

DMA 通道二和通道一设置一样 但不能使用!

[复制链接]
3310|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangpeng0409|  楼主 | 2012-12-16 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void DMA1_Channel2_init(void{
        DMA_InitTypeDef DMA_InitStructure;
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//开启时钟
        DMA_DeInit(DMA1_Channel2); //初始化
        DMA_InitStructure.DMA_PeripheralBaseAddr = ADC_DR_Address;  //外设数据地址
        DMA_InitStructure.DMA_MemoryBaseAddr =(uint32_t)&ADCConvertedValue;  //内存数据地址
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //外设是数据传输的目的地还是数据源
        DMA_InitStructure.DMA_BufferSize = 1;//要传输的数据量
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //接收一次数据后,设备地址禁止后移
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;//关闭接收一次数据后,目标内存地址后移
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;  //定义外设数据宽度为16位
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//内存数据宽度(根据数据选择)
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循环缓存模式,数据传输数目为0时,自动恢复配置初值
        DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;        //优先级
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//通道未被设置成内存到内存模式,与循环模式相对
        DMA_Init(DMA1_Channel2, &DMA_InitStructure);
        DMA_Cmd(DMA1_Channel2, ENABLE);
}

DMA通道二配置如上代码所示,但是无法工作(需要的数据总是为零),如果把代码里面的channel2改为channel1就能工作了! 真搞不懂是为什么?
沙发
uet_cache| | 2012-12-16 22:19 | 只看该作者
你看下手册,有些通道配置是固定的。

使用特权

评论回复
板凳
pingandpeng| | 2012-12-17 16:01 | 只看该作者
手册我看过了 各个通道是独立的,没有什么特殊情况。

使用特权

评论回复
地板
zhangpeng0409|  楼主 | 2012-12-17 22:07 | 只看该作者
求人不如求己!
问题解决:DMA各个通道并非真正的完全“独立”! 详情见DMA通道映射

使用特权

评论回复
5
njchenmin| | 2012-12-18 07:05 | 只看该作者
别人都提醒你了。

使用特权

评论回复
6
55854234| | 2012-12-20 11:04 | 只看该作者

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝