OpenEdv-开源电子网

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

求助 串口4 DMA接收

[复制链接]

9

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2014-5-20
在线时间
2 小时
发表于 2015-5-29 13:25:57 | 显示全部楼层 |阅读模式
5金钱
串口4 DMA接收  根本就收不到数据啊。看手册上串口控制寄存器CR3说是没有DMAR:DMA使能接收这一位。意思是说不能用DMA接收么? 但又明明说明是在DMA2的3通道上啊!
求大神指教


英文手册说只有UART5没有DMAR这一位。

不知道我的USAR4哪里出问题了。

NVIC_InitTypeDef NVIC_InitStructure;  
    DMA_InitTypeDef  DMA_InitStructure;
      
 
    NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
    NVIC_Init(&NVIC_InitStructure); 

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
    
    DMA_DeInit(DMA2_Channel3);

    DMA_InitStructure.DMA_PeripheralBaseAddr =  (u32)(&UART4->DR); 
    DMA_InitStructure.DMA_MemoryBaseAddr =  (u32)(GPSReceiveBuff);//
    
 
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;   
    
    DMA_InitStructure.DMA_BufferSize = 66;  
    
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;   
   
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;   
   
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;   
    
    DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;   
    
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;   
    
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;  
    
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  
    
    
    DMA_Init(DMA2_Channel3,&DMA_InitStructure);  
    
    DMA_ITConfig(DMA2_Channel3,DMA_IT_TC|DMA_IT_TE,ENABLE); 
 
    DMA_Cmd(DMA2_Channel3, ENABLE);         //????DMA????


/*************************************************************************************************************************/

问题已经了解决了。问题在中断处理函数上!
void DMA2_Channel3_IRQHandler(void)
{

          if(DMA2->ISR&(1<<8))//
{
DMA2->IFCR|=1<<8;//?????¨??3????±ê??
DEBUG("9");
            //DMA2_rec_OK = 1;

       }        
  if(DMA2->ISR&(1<<9))//?????¨??3?????ê??
{
DMA2->IFCR|=1<<9;//?????¨??3?????ê??±ê??
DMA2_rec_OK = 1;
               DEBUG("0");
       }

  if(DMA2->ISR&(1<<11))//?????í?ó
{
DMA2->IFCR|=1<<11;//
DMA2_rec_OK = 0;
//memset(GPSReceiveBuff,0,sizeof(GPSReceiveBuff));
MYDMA_Enable(DMA2_Channel3,60);
           DEBUG("7");
        }
       DEBUG("6");
}
应该是清除了全局中断标志后  传输完成标志也一起清楚了。   最终问题:是这样么?

QQ截图20150529132445.png
QQ截图20150529132408.png

最佳答案

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

你这代码是单独清除的啊。 你仿真跟踪下看看。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-29 13:25:58 | 显示全部楼层
你这代码是单独清除的啊。
你仿真跟踪下看看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-28 23:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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