/**
	* @brief 重定吿 fputc 函数,使 printf 可以通过串口输出
	* @param ch: 要发送的字符
	* @param f: 文件指针 (此处未使甿)
	* @retval 返回发鿁的字符
	*/
	int fputc(int ch, FILE *f)
	{
		// 调用 HAL 库发送单个字笿
		// 参数说明: 
		// &huart1 : 串口句柄指针
		// (uint8_t*)&ch : 数据地址
		// 1 : 数据长度
		// 0xFFFF : 超时时间 (可根据需要调整,0xFFFF 表示长时间等徿)
		HAL_UART_Transmit(&huart2, (uint8_t*)&ch, 1, 0xFFFF); 
		return ch;
	}

使用这个函数的重定向,HAL_UART_Transmit(&huart2, (uint8_t*)&ch, 1, 0xFFFF); 
导致程序中只要存在printf这个函数,程序就会卡住

解决方法:

勾选上 Use Micro LIB 
 

3. 为什么勾选 "Use MicroLIB" 就好了?

MicroLIB 是 ARM 专门为嵌入式资源受限环境优化的微型库。

  • 特点:它去除了所有复杂的隐式初始化逻辑。
  • 行为:它不会在启动时自动检查 I/O,也不会尝试加锁。它假设你自己会处理好一切(比如你自己重定义了 fputc)。
  • 结果:因为它“什么都不做”,所以不会和 FreeRTOS 冲突,程序就能顺利跑过初始化阶段,直到你真的调用 printf 时,才会执行你重定义的 fputc
Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐