OpenEdv-开源电子网

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

求大神帮改下dma传输的串口程序,感激不尽

[复制链接]

30

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-3-11
在线时间
123 小时
发表于 2016-4-27 15:31:43 | 显示全部楼层 |阅读模式
10金钱
我原本的发送函数是这样的:
void USARTx_printf(USART_TypeDef* USARTx, uint8_t *Data,u8 len)
{
u8 i;
while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );
for(i=0;i<len;i++)
{
  USART_SendData(USARTx, *Data++);
  while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );
}
}
我想改成dma传输的方式,参考了原子的串口蓝牙里的串口超时法里的一段程序,并且已经配置好了所有的东西,他的发送函数是这样的:
void u2_printf(char* fmt,...)  
{  
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART2_TX_BUF,fmt,ap);
va_end(ap);
while(DMA_GetCurrDataCounter(DMA1_Channel7)!=0);  
UART_DMA_Enable(DMA1_Channel7,strlen((const char*)USART2_TX_BUF));  
}
这个是已经设置好了dma传输的,dma的配置不变,我想把void USARTx_printf(USART_TypeDef* USARTx, uint8_t *Data,u8 len)这个改成dma的方式,应该在这个函数里面怎么改啊?求助大神啊!!


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

使用道具 举报

30

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-3-11
在线时间
123 小时
 楼主| 发表于 2016-4-28 09:30:13 | 显示全部楼层
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11552
金钱
11552
注册时间
2014-4-1
在线时间
1317 小时
发表于 2016-4-28 09:32:33 | 显示全部楼层

这样求助基本没有效果。
还是要先学习DMA的基本概念。

回复

使用道具 举报

30

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
金钱
427
注册时间
2015-3-11
在线时间
123 小时
 楼主| 发表于 2016-4-28 13:47:11 | 显示全部楼层
xuande 发表于 2016-4-28 09:32
这样求助基本没有效果。
还是要先学习DMA的基本概念。

单独用dma大致知道怎么用,但从这个程序来改确实恼火,va_list ap;
va_start(ap,fmt);就比如这个东东,我都不知道它是干什么的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 04:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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