硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2838|回复: 4
收起左侧

[有问必答] [求助] 关于STM32F1 USART DMA发送,怎么才能类似printf

[复制链接]

15

主题

117

回帖

162

积分

初级会员

积分
162
发表于 2020-3-21 12:39:17 | 显示全部楼层 |阅读模式
昨天找了一天USART DMA printf发送函数,结果实际都不能正常运行,希望硬汉指点指点,多谢!

找到的代码如下:
结构体定义:
  1. typedef struct  
  2. {  
  3. uint16_t RX_Size;          //receive length
  4. uint8_t  RX_pData[RX_LEN]; //DMA receive buffer
  5. uint8_t  TX_pData[RX_LEN]; //DMA translate buffer
  6. }USART_RECEIVETYPE
复制代码
  1. USART_RECEIVETYPE UsartType
复制代码
函数如下:
  1. void Usart2DmaPrintf(const char *format,...)
  2. {
  3.     uint16_t len;

  4.        while((USART2->SR&0X40)==0);
  5.         va_list args;   
  6.         va_start(args,format);
  7.         len = vsnprintf((char *)UsartType.TX_pData,sizeof(UsartType.TX_pData)+1,(char*)format,args);
  8.         va_end(args);

  9.         HAL_UART_Transmit_DMA(&huart2, UsartType.TX_pData, len);
  10. }
复制代码
能发送数据,但发送不完整,丢数据。求助,谢谢!


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2020-3-21 14:03:04 | 显示全部楼层
先把函数
HAL_UART_Transmit_DMA(&huart2, UsartType.TX_pData, len);调试通了。估计你这个函数做的有问题。

这个函数有个专门的DMA发送完成回调函数,在里面做个标志,判断标志等待发送完成。
回复

使用道具 举报

15

主题

117

回帖

162

积分

初级会员

积分
162
 楼主| 发表于 2020-3-21 15:47:58 | 显示全部楼层
eric2013 发表于 2020-3-21 14:03
先把函数
HAL_UART_Transmit_DMA(&huart2, UsartType.TX_pData, len);调试通了。估计你这个函数做的有问题 ...

这个函数用的HAL库V1.8的,没有修改,研究研究
回复

使用道具 举报

15

主题

117

回帖

162

积分

初级会员

积分
162
 楼主| 发表于 2020-3-21 15:52:08 | 显示全部楼层
eric2013 发表于 2020-3-21 14:03
先把函数
HAL_UART_Transmit_DMA(&huart2, UsartType.TX_pData, len);调试通了。估计你这个函数做的有问题 ...

HAL_UART_Transmit_DMA(&huart2, UsartType.TX_pData, len); 这个函数我直接发送是对的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2020-3-21 17:13:54 | 显示全部楼层
lhaoyue 发表于 2020-3-21 15:52
HAL_UART_Transmit_DMA(&huart2, UsartType.TX_pData, len); 这个函数我直接发送是对的
如果DMA发送函数问题,基本就锁定在你的Usart2DmaPrintf实现上了。
试试直接sprintf配合 HAL_UART_Transmit_DMA,删掉你这个 while((USART2->SR&0X40)==0)判断,不合理,你应该在你的 HAL_UART_Transmit_DMA后面加上串口DMA发送完成死等



回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-8 21:02 , Processed in 0.293200 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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