OpenEdv-开源电子网

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

请教一下:DMA串口2通信问题调试不通

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-2-19
在线时间
0 小时
发表于 2014-2-19 10:45:59 | 显示全部楼层 |阅读模式

USART2_DMA_Buf 已经初始化值{1,3,4};
下面代码是DMA的初始化。
3.使用dma传输
    DMA_ClearFlag(DMA1_FLAG_TC7);      //清DMA发送完成标志
     DMA_Cmd(DMA1_Channel7, DISABLE);   //停止DMA

    DMA_Cmd(DMA1_Channel7,ENABLE);
4. 正常是目的是想循环输出  1 3 4
  求解谢谢。
/****************************************************************/

 void USART_DMA_Configuration(void)
{
 
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
  DMA_InitTypeDef DMA_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE);
 //启动USART1
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
 //启动串口2
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
 //启动DMA时钟
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

 GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_3;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
   
    USART_InitStructure.USART_BaudRate = 19200; // 
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
    USART_Init(USART2, &USART_InitStructure);


 DMA_DeInit(DMA1_Channel7);//串口1的DMA传输通道是通道4     (串口2的Tx通道是7)
    DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)USART2->DR;   //USART2->DR ;
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)USART2_DMA_Buf;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//外设作为DMA的目的端
    DMA_InitStructure.DMA_BufferSize = 10;//传输大小
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址不增加
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存地址自增1
    DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_Byte ;// DMA_PeripheralDataSize_Byte;   //DMA_PeripheralDataSize_Word
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//DMA_Mode_Normal(只传送一次), DMA_Mode_Circular (不停地传送)
    DMA_InitStructure.DMA_Priority =DMA_Priority_High ;// DMA_Priority_High;//(DMA传送优先级为中等)
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel7, &DMA_InitStructure);

 DMA_Cmd(DMA1_Channel7,ENABLE) ;

 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 
 /* Enable the USARTy Interrupt */
 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);

 USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);
// USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

 USART_Cmd(USART2, ENABLE);


//如果使用printf("xxxfda\n"); 串口2能够打印。
//DMA1_Channel7就是调试不通。求解。

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-19 14:28:10 | 显示全部楼层
貌似无问题,你现在收到数据?还是没有任何数据?
另外不用DMA的时候,串口2是否正常?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-2-19 16:47:01 | 显示全部楼层
回复【楼主位】1111:
---------------------------------
1.与楼上同问?
2.USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);//不是串口2吗?怎么对象是串1
3.不用的时钟:如AFIO、USART1就不用打开了
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-2-19
在线时间
0 小时
 楼主| 发表于 2014-2-20 09:06:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
不用DMA的时候,USART2输出正常。
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-2-19
在线时间
0 小时
 楼主| 发表于 2014-2-20 09:11:38 | 显示全部楼层
回复【3楼】hechao3225:
---------------------------------
2,修改过来也还是不行。USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-2-19
在线时间
0 小时
 楼主| 发表于 2014-2-20 09:13:12 | 显示全部楼层
回复【3楼】hechao3225:
---------------------------------
AFIO,在使用串口的时候,应该是要打开的吧。USART1的时钟我已经屏蔽了。
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-2-20 11:31:34 | 显示全部楼层
回复【6楼】1111:
---------------------------------
1.默认复用功能AFIO不用打开,在外部中断映射、端口重映射等才用到。AFIO英文原意并不是复用时钟的意思,是中文翻译鸡肋了
2.串口正常那就算DMA的配置问题,对照例程看看吧
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-2-19
在线时间
0 小时
 楼主| 发表于 2014-2-20 12:28:15 | 显示全部楼层
回复【7楼】hechao3225:
---------------------------------
如果是我使用内存到内存的DMA没有问题,现在就是串口2 的发送,DMA调试不通。。所以我也不知道,哪里的配置存在问题。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2014-2-20
在线时间
1 小时
发表于 2014-2-20 14:08:31 | 显示全部楼层
回复【楼主位】1111:
---------------------------------
DMA_Cmd(DMA1_Channel7,ENABLE) ;  //这个时候串口还没有打开。
是不是要放到串口打开后面?
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-2-20 14:15:46 | 显示全部楼层
回复【8楼】1111:
---------------------------------
论坛里有DMA_USART的例程,看看
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-2-19
在线时间
0 小时
 楼主| 发表于 2014-2-20 15:43:48 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
貌似,过了很久才用十六进制显示就能够00 ,否则什么都没有显示。
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-2-19
在线时间
0 小时
 楼主| 发表于 2014-2-20 15:45:19 | 显示全部楼层
回复【10楼】hechao3225:
---------------------------------
我就是参考例程来修改的,但调试没有显示数据。过很久才有十六进制的00
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-2-19
在线时间
0 小时
 楼主| 发表于 2014-2-21 15:28:31 | 显示全部楼层
问题还没有解决,求解。谢谢。
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-2-19
在线时间
0 小时
 楼主| 发表于 2014-2-27 15:39:43 | 显示全部楼层
都是粗心出的错,DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&USART2->DR;   是取址啊
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 00:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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