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

查看: 5487|回复: 1

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

[复制链接]

10

主题

33

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2010-10-4 16:34:02 | 显示全部楼层 |阅读模式
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);//开始传输返回的数据!
 }
}
 
 
回复

使用道具 举报

2

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2010-10-8 11:29:48 | 显示全部楼层

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

请问你的代码如何接受中断数据?
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版