你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

UART用DMA传送不定长度的数据,每次发送的数据量不等且时间很随机。

[复制链接]
yzk376 提问时间:2010-10-4 16:34 /
UART用DMA传送不定长度的数据,每次发送的数据量不等且时间很随机。
还有一个问题被发送的数据是局部的变量,等数据发送函数退出时,局部的变量会销毁,此时DMA发送的数据可能就已经不是原来想要发送的数据了。为了解决这个问题,就是把数据先写入一个环形的缓存再进行MDA发送,但被发送的数据写缓存到顶端时返回缓存开始继续写数据,此时DMA怎么知道需要返回?DMA如何判断缓存的开始地址和结束地址(顶端)?DMA如何使用环形的内存?我写了这样一段程序,但程序中间红色的还是在浪费时间,如何解决?
 
下面程序没有经过测试,示意使用。
void UART1_Send_dma(U8 *str,U16 Length)   //发送一串数据

 U32 i;
 U32 BackLength=0;
 // 设置发送目标内存的开始地址
    DMA_InitStructure_UART1.DMA_MemoryBaseAddr = (U32)UART1_Write_MEM_Pointer;
  DMA_InitStructure_UART1.DMA_BufferSize = Length; //定义指定DMA通道的DMA缓存的大小
 for(i=0;iUART1_tx_size) //判断写发送缓存指针越界
  {
   UART1_Write_MEM_Pointer=0;
   BackLength++;  //写发送缓存指针越界后,开始计算返回数据量
  }
 }
 //////////////////////////////////////////////////////////////////////
 if(BackLength==0) //写缓存地址无过零
 {
     while(DMA_GetFlagStatus(DMA1_FLAG_TC4) == RESET); //发送前等待上次发送是否完毕,
  DMA_Init(DMA1_Channel4, &DMA_InitStructure_UART1); //初始化DMA通道4
  USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);     //将USART1模块设置成DMA方式工作
  DMA_Cmd(DMA1_Channel4, ENABLE);//开始一次DMA传输!
 }
  if(BackLength)//写缓存地址有过零
 { 
  DMA_Init(DMA1_Channel4, &DMA_InitStructure_UART1); //初始化DMA通道4
  USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);     //将USART1模块设置成DMA方式工作
  DMA_Cmd(DMA1_Channel4, ENABLE);//开始传输数据!
     while(DMA_GetFlagStatus(DMA1_FLAG_TC4) == RESET) ;//发送前等待上次发送是否完毕,
//设置DMA源:发送目标内存从缓存的开始地址开始
     DMA_InitStructure_UART1.DMA_MemoryBaseAddr = (U32)UART1_Send_Puffer;
  DMA_InitStructure_UART1.DMA_BufferSize = BackLength; //数据返回的数量 定义指定DMA通道的DMA缓存的大小
  DMA_Init(DMA1_Channel4, &DMA_InitStructure_UART1); //初始化DMA通道4
     USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);     //将USART1模块设置成DMA方式工作
     DMA_Cmd(DMA1_Channel4, ENABLE);//开始传输返回的数据!
 }
}
 
 
收藏 评论1 发布时间:2010-10-4 16:34

举报

1个回答
clonehe1225 回答时间:2010-10-8 11:29:48

回复:UART用DMA传送不定长度的数据,每次发送的数据量不等且时间很随机。

请问你的代码如何接受中断数据?

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版