硬汉嵌入式论坛

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

[DMA] [求助帖]STM32H7B0VET6使用串口DMA发送数据到串口助手失败

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2024-4-29 15:43:42 | 显示全部楼层 |阅读模式
遇到的问题:
使用DMA进行如下的字符传输串口助手可以正常接收
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)"data:3.14\r\n", 14);

但是采用下面的方式发送就失败了
floatangle[2] ={1.12,2.23};
staticchar StrBuf[20] = {0};
sprintf(StrBuf,"RP:%.2f, %.2f\n", angle[0], angle[1]);
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)StrBuf,strlen(StrBuf));
能进一次DMA函数,但是串口助手也是接收不到,进一次后 if (huart->gState == HAL_UART_STATE_READY) 就进不去了。
另外使用串口中断可以正常收发数据

有没有大佬遇到过这种问题啊

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2024-4-30 08:54:53 | 显示全部楼层
1、这个strlen(StrBuf)大小是多少,14个吗? StrBuf[20] 改成50放心。
2、然后就是1次发送完成后,在串口发送完成中断里面设置标志,主程序等待到这个标志后才可以发第2次。

我此贴的用法和你这个一样

https://www.armbbs.cn/forum.php? ... &extra=page%3D1

回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2024-4-30 10:30:56 | 显示全部楼层
eric2013 发表于 2024-4-30 08:54
1、这个strlen(StrBuf)大小是多少,14个吗? StrBuf[20] 改成50放心。
2、然后就是1次发送完成后,在串口 ...

感谢回复!
1.好的,StrBuf最大好像可以到64
2.我只要用StrBuf来发,第一次发的上面也收不到,但是直接这样发HAL_UART_Transmit_DMA(&huart1, (uint8_t *)"data:3.14\r\n", 14); 是可以一直收的,搞不懂这是为啥

我加了完成标志也没用,之前用过F3的DMA是没问题的,这个H7没开DCache和MPU,就是最基础的设置,感觉这个问题有点玄学
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART1)
    {
        txCplt = 1;
    }
}

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 20:54 , Processed in 0.157496 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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