请问如何在USART3上使用printf函数?

2019-08-17 07:33发布

求原子哥与大神帮助啊~
我需要在USART3上用printf函数向外输出数据,串口1和串口2我都已经使用了,所以要用串口3,直接改串口1的printf的设置为串口3;但发现串口3用printf不好使啊,用硬件仿真时没有反应,执行到printf那里就不动了。
可能是串口3使用printf与串口1不同,可是我不知道怎么弄,希望能给与帮助呀~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
27条回答
Carlos
1楼-- · 2019-08-17 22:08
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-08-18 00:28
回复【8楼】Carlos:
---------------------------------
只能有一个fputc。
你这里面的东西是串口几,就会发送到串口几。
cetcnav
3楼-- · 2019-08-18 02:08


原子哥,u2_printf不用DMA传输的话,应该怎么改啊?
[mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true]//串口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发送出去 }[/mw_shl_code]
我改的贴在下边了,改好之后,我u2_printf("OK"),结果却发到串口调试助手的却不是OK。

[mw_shl_code=c,true]void u2_printf(char* fmt,...) { va_list ap; va_start(ap,fmt); vsprintf((char*)myUsart2.TxBuf,fmt,ap); va_end(ap); while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET); // USART_SendData(USART2,(const char*)myUsart2.TxBuf); USART_SendData(USART2,strlen((const char*)myUsart2.TxBuf)); }[/mw_shl_code]
下边是串口调试助手的截图:



请原子哥指点迷津,谢谢!
正点原子
4楼-- · 2019-08-18 05:48
将dma哪里,改成一个while/for循环,循环发送完就可以了.
cetcnav
5楼-- · 2019-08-18 06:00
改成while或者for循环,都需要一个判断条件啊,这个条件是什么?
正点原子
6楼-- · 2019-08-18 11:15
 精彩回答 2  元偷偷看……

一周热门 更多>