谷动谷力

标题: STM32F103RCT6开发板M3单片机教程03--usart串口通信 [打印本页]

作者: sunsili    时间: 2021-11-7 22:36
标题: STM32F103RCT6开发板M3单片机教程03--usart串口通信
本帖最后由 sunsili 于 2023-12-12 13:53 编辑

STM32F103RCT6开发板M3单片机教程03--usart串口通信


首先了解编译调试硬件连接,查看原理图

STM32F103RCT6开发板用Jlink供电,USB转串口板电脑USB供电,那么连接只需3线

*          TXD(PB9)     ->   USB转串口板RXD     
*           RXD(PB10) -> USB转串口T板XD      
*           GND       -> USB转串口板GND

方法不再重复,经过前两节练习,大家应该是会了.
但发现程序不跑了,单调试发现程序卡在printf不动了。为什么呢?因为MCU不像电脑只要添加stdio.h, 就能用printf。MCU要重定向c库函数printf到USART1(不一定USART1,实际用哪个定义到哪个),标准库代码内容还会被优化掉,编译时不输出。如何让它跑起来了呢。
在usart.c中添加函数
  1. ///重定向c库函数printf到USART1
  2. int fputc(int ch, FILE *f)
  3. {
  4.                 /* 发送一个字节数据到USART1 */
  5.                 USART_SendData(USART1, (uint8_t) ch);
  6.                
  7.                 /* 等待发送完毕 */
  8.                 while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);               
  9.         
  10.                 return (ch);
  11. }

  12. ///重定向c库函数scanf到USART1
  13. int fgetc(FILE *f)
  14. {
  15.                 /* 等待串口1输入数据 */
  16.                 while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

  17.                 return (int)USART_ReceiveData(USART1);
  18. }
复制代码

设置编译时,加入MCU适用标准库函数



再次编译调试一切如愿。符合我们当初的设计。

工程源码(回复后可下载)




作者: 微信用户    时间: 2024-1-20 13:07
支持一下
作者: yangzs    时间: 2024-2-20 15:42
试一下                                                
作者: rehuosheng    时间: 2024-3-12 11:13
谢谢分享!
作者: 零食    时间: 2024-3-28 08:41
感谢分享!
作者: TiAmoXQ    时间: 2024-4-18 11:42
huoquyuanma
作者: xl123    时间: 2024-4-19 09:49
STM32F103RCT6开发板M3单片机教程03--usart串口通信
作者: 寂然ing    时间: 2024-4-29 19:30
感谢分享




欢迎光临 谷动谷力 (http://bbs.sunsili.com/) Powered by Discuz! X3.2