打印
[STM32L4]

usart使用中printf重定向

[复制链接]
79|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
everyrobin|  楼主 | 2024-12-25 23:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
方法一:使用微库(微雪)
在usart.c中添加如下代码:
#ifdef __GNUC__  /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf     set to 'Yes') calls __io_putchar() */  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* __GNUC__ *//**  * @brief  Retargets the C library printf function to the USART.  * @param  None  * @retval None  */PUTCHAR_PROTOTYPE{  /* Place your implementation of fputc here */  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);   return ch;}之后引入相关头文件,并在设置中勾选使用微库,编译成功后即可使用printf()进行串口通信。

方法二:使用标准库(原子)
//加入以下代码,支持printf函数,而不需要选择use MicroLIB          #if 1#pragma import(__use_no_semihosting)             //标准库需要的支持函数                 struct __FILE {         int handle; }; FILE __stdout;       //定义_sys_exit()以避免使用半主机模式    void _sys_exit(int x) {         x = x; } //重定义fputc函数 int fputc(int ch, FILE *f){              while((USART1->SR&0X40)==0);//循环发送,直到发送完毕       USART1->DR = (u8) ch;              return ch;}#endif

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

1371

帖子

0

粉丝