STM32_串口重定向

前言

最近在学习LVGL时遇到了一个坑,我原来使用的重定向方法必须要勾选Use Micro LIB,否则程序会卡死,但是在移植LVGL时又发现不能勾选Use Micro LIB,否则会报错。那么有没有什么方法能让printf和LVGL都能正常使用呢,在网上查了查,发现了如下解决思路,在这里做个记录。

1、需要勾选Use Micro LIB

在工程中添加如下代码

int fputc(int ch,FILE *f)        //重构定向,printf直接打印到串口1
{
    USART_SendData(USART1,ch);	
	while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
	return ch;
}

并勾选Use Micro LIB在这里插入图片描述

2、不需要勾选Use Micro LIB

在工程中添加如下代码:

#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;
}

这样就算不勾选Use Micro LIB也能正常打印,程序不会卡死。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 17:30:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 17:30:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 17:30:06       82 阅读
  4. Python语言-面向对象

    2024-04-05 17:30:06       91 阅读

热门阅读

  1. 数据结构(无图版)

    2024-04-05 17:30:06       29 阅读
  2. 云之道知识付费系统搭建教程

    2024-04-05 17:30:06       41 阅读
  3. 力扣贪心算法--第三天

    2024-04-05 17:30:06       38 阅读
  4. 为什么android创建Fragment推荐用newInstance

    2024-04-05 17:30:06       35 阅读
  5. 03-Docker入门

    2024-04-05 17:30:06       33 阅读
  6. linux内核常用调优参数

    2024-04-05 17:30:06       32 阅读
  7. Android U user+root实现方案

    2024-04-05 17:30:06       31 阅读
  8. FTP协议

    FTP协议

    2024-04-05 17:30:06      29 阅读
  9. vue3监听div高宽变化自定义分析

    2024-04-05 17:30:06       24 阅读
  10. Postman 请求参数传递指南:Query、Path 和 Body 详解

    2024-04-05 17:30:06       29 阅读