OpenEdv-开源电子网

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

求解:DMA死在“等待通道4传输完成”,按照原子哥程序修改,代码呈上(死在红色语句)

[复制链接]

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2012-9-28
在线时间
0 小时
发表于 2012-10-23 10:39:18 | 显示全部楼层 |阅读模式

u8 Text[]={"STM32 DMA 串口实验"};
#define SIZE sizeof(Text)

int main()
{
 int pro=0;
 u8 ledtime,t=0;
  SystemInit();
 delay_init(72);
 LED_Init();
 NVIC_Configuration();
  MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)Text,SIZE);//DMA1通道4,外设为串口1
 //GPIO_ResetBits(GPIOA,GPIO_Pin_8);
  while(1)
  {
    t=KEY_Scan();
    if(t==1)
   {
        USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE); //USART1-> CR3=1<<7;
        MYDMA_Enable(DMA1_Channel4);//开始一次DMA传输
        while(1)
        {
          if(DMA_GetFlagStatus(DMA1_FLAG_TC4) == SET)//等待通道4传输完成
         {
              DMA_ClearFlag(DMA1_FLAG_TC4);  //清除发送完成标志
              break; 
         }
       }
       pro = DMA_GetCurrDataCounter(DMA1_Channel4);    //得到当前还剩余多少个数据
       if(pro==0)  GPIO_ResetBits(GPIOD,GPIO_Pin_2);  //传输完成led2点亮
   }
  
  }

}

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

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2012-9-28
在线时间
0 小时
 楼主| 发表于 2012-10-23 10:41:09 | 显示全部楼层
DMA时钟开启后也加了延时,还是不行
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-10-23 13:47:01 | 显示全部楼层
用原版代码试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2012-9-28
在线时间
0 小时
 楼主| 发表于 2012-10-23 14:07:13 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
用原版的是可以的,不知道哪里出问题了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-10-23 14:27:04 | 显示全部楼层
确定硬件无问题就耐心检查软件吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2012-9-28
在线时间
0 小时
 楼主| 发表于 2012-10-23 14:46:23 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
嗯 原子哥,你有一段是复制字符串{"ALIENTEK MiniSTM32 DMA 串口实验"}到SendBuff[5200]吧,我自己写了一段,为什么只能复制到255,后面就没了。。。(我的字符串{"STM32 DMA 串口实验"},18个)
    while(i<400)
{
if(i<18)
{
  SendBuff=Text;
}
if(i==18)
{
SendBuff=0x0a;
SendBuff[i+1]=0x0d;
}
if(i>19)
{
  SendBuff=SendBuff[i-20];
}
i++;
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-10-23 21:44:33 | 显示全部楼层
你的i是什么类型?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2012-9-28
在线时间
0 小时
 楼主| 发表于 2012-10-24 15:01:11 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
谢原子哥,是定义错了,i 放其他变量一起定义成u8了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 16:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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