硬汉嵌入式论坛

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

[有问必答] STM32F407IGT6串口DMA控制器发送问题_C语言处理方式

[复制链接]

12

主题

22

回帖

58

积分

初级会员

积分
58
发表于 2023-3-15 08:11:07 | 显示全部楼层 |阅读模式
本帖最后由 951319804 于 2023-3-15 09:06 编辑

目的:通过芯片上的串口3DMA控制器,进行发送Ascii码给电脑进行通信。类似像AT指令一样。

问题:1,使用了DMA控制器发送串口,不能使用printf("PFSET_%d\r", OutputPowerSet);
       2,使用DMA控制器,发送PFSET_XXXX[CR],其中XXXX就是变量里面内容。应该怎么实现呢?
以下是发送固定报文,已经实现了。请参考。
        #define  StringCommand_RF_ON "RFON"//RF_ON命令

        Usart3_SendByteCount=5;
        USART3_DMA_Send((uint8_t*)StringCommand_RF_ON"\r",Usart3_SendByteCount);


请教问题,如何实现PFSET_XXXX[CR],其中XXXX就是变量里面内容。因为PFSET_是固定的报文。XXXX是Integer变量,后面还有一个[CR]即换行命令
像这样的命令还有20多条,想请教函数。以及实现思路。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2023-3-15 09:58:35 | 显示全部楼层
开个缓冲,比如100字节,这个缓冲可以存储最大AT字符串。

每次发送前清理,填充数据,strlen求长度,dma发送即可
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2023-3-15 13:35:28 | 显示全部楼层
#define printf_dma(fmt, ...)  HAL_UART_Transmit_DMA(&huart3, huartx.pTxBuf, sprintf((char *)huartx.pTxBuf, fmt, ##__VA_ARGS__))
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2023-3-15 13:36:58 | 显示全部楼层
#define printf_dma(fmt, ...)  HAL_UART_Transmit_DMA(&huart3, huartx.pTxBuf, sprintf((char *)huartx.pTxBuf, fmt, ##__VA_ARGS__))

注意 huartx.pTxBuf 缓冲区的大小, 然后接下来就可以愉快的像使用printf一样了

printf_dma("PFSET_%d\r\n", OutputPowerSet);
回复

使用道具 举报

12

主题

22

回帖

58

积分

初级会员

积分
58
 楼主| 发表于 2023-3-15 15:41:40 | 显示全部楼层
eric2013 发表于 2023-3-15 09:58
开个缓冲,比如100字节,这个缓冲可以存储最大AT字符串。

每次发送前清理,填充数据,strlen求长度,dma ...

谢谢,大哥思路好。
回复

使用道具 举报

12

主题

22

回帖

58

积分

初级会员

积分
58
 楼主| 发表于 2023-3-15 15:42:35 | 显示全部楼层
旮旯旭 发表于 2023-3-15 13:36
#define printf_dma(fmt, ...)  HAL_UART_Transmit_DMA(&huart3, huartx.pTxBuf, sprintf((char *)huartx.p ...

好的,大哥。谢谢啦。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 14:55 , Processed in 0.299447 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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