专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
请问如何在USART3上使用printf函数?
2019-08-17 07:33
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
17309
27
921
求原子哥与大神帮助啊~
我需要在USART3上用printf函数向外输出数据,串口1和串口2我都已经使用了,所以要用串口3,直接改串口1的printf的设置为串口3;但发现串口3用printf不好使啊,用硬件仿真时没有反应,执行到printf那里就不动了。
可能是串口3使用printf与串口1不同,可是我不知道怎么弄,希望能给与帮助呀~
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
27条回答
正点原子
1楼-- · 2019-08-17 09:08
你怎么改的?
加载中...
Aningsk
2楼-- · 2019-08-17 10:19
精彩回答 2 元偷偷看……
加载中...
正点原子
3楼-- · 2019-08-17 15:48
看上去OK啊.
加载中...
Aningsk
4楼-- · 2019-08-17 18:04
回复【4楼】正点原子:
---------------------------------
可是就是在printf那里没有反应。在网上找答案,见过有说:printf只能用在串口1上,而用在串口2,3时,就要修改printf的底层代码了,写个新的printf函数,如USART2_printf()。可是不知道这个底层怎么改啊~~~
加载中...
正点原子
5楼-- · 2019-08-17 21:12
回复【5楼】Aningsk:
---------------------------------
可以的,任何一个串口都可以映射到PRINTF,你说在printf死机了,那检查下是死在哪里?然后看看串口3的寄存器配置,就能找出问题了.
至于冲定义printf也很简单,下面给你个例子:
//串口2,printf 函数
//确保一次发送数据不超过USART2_MAX_SEND_LEN字节
void u2_printf(char* fmt,...)
{
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART2_TX_BUF,fmt,ap);
va_end(ap);
while(DMA1_Channel7->CNDTR!=0); //等待通道7传输完成
UART_DMA_Enable(DMA1_Channel7,strlen((const char*)USART2_TX_BUF)); //通过dma发送出去
}
这就是我们例程(GSM模块例程/蓝牙例程等)里面的串口2的printf实现,很简单,用了dma,如果你不想用dma,就把DMA部分做成while发送就是了.
加载中...
Aningsk
6楼-- · 2019-08-17 21:13
回复【6楼】正点原子:
---------------------------------
好的~我去试一下!
加载中...
1
2
3
4
5
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
---------------------------------
可是就是在printf那里没有反应。在网上找答案,见过有说:printf只能用在串口1上,而用在串口2,3时,就要修改printf的底层代码了,写个新的printf函数,如USART2_printf()。可是不知道这个底层怎么改啊~~~
---------------------------------
可以的,任何一个串口都可以映射到PRINTF,你说在printf死机了,那检查下是死在哪里?然后看看串口3的寄存器配置,就能找出问题了.
至于冲定义printf也很简单,下面给你个例子:
//串口2,printf 函数
//确保一次发送数据不超过USART2_MAX_SEND_LEN字节
void u2_printf(char* fmt,...)
{
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART2_TX_BUF,fmt,ap);
va_end(ap);
while(DMA1_Channel7->CNDTR!=0); //等待通道7传输完成
UART_DMA_Enable(DMA1_Channel7,strlen((const char*)USART2_TX_BUF)); //通过dma发送出去
}
这就是我们例程(GSM模块例程/蓝牙例程等)里面的串口2的printf实现,很简单,用了dma,如果你不想用dma,就把DMA部分做成while发送就是了.
---------------------------------
好的~我去试一下!
一周热门 更多>