|
半主机机制的作用 $ S3 {7 ?8 t# u4 I% u: D1 \, z 半主机是用于ARM目标的一种机制,可将来自STM32单片机应用程序的输入输出请求传送至运行仿真器的PC主机。使用此机制可以启用C库中的函数,如printf()和scanf(),来使用PC主机的屏幕和键盘。这样就可以看到单片机的输入输出,方便进行调试。注意:这种机制的运行需要仿真器,否则无法运行。 简单的来说,半主机模式就是通过仿真器实现开发板在电脑上的输入和输出。 开发时单片机需要独立运行,开发者就应该去掉仿真器,把printf函数通过单片机的外设来实现,例如通过开发板的串口。 3 L) E+ ]. [. `- i( z: W非半主机机制下printf函数的实现方法 ; ^* X# t7 E! \, {Use MicroLIB(微库) 因为使用微库的话,不会使用半主机模式。 5 j* g; j/ Q! H0 o7 ~ 如下图,在点开MDK软件的魔术棒,勾选Target选项卡中的“Use MicroLIB”。这样就可以使用printf()函数,通过USART输出数据到电脑串口助手。相关推荐:STM32打印数据到串口助手。 ' v" {/ w8 H) j
在主程序中添加代码 不使用Use MicroLIB(微库),就要在工程中加入以下代码, 以支持printf函数 。代码是写在USART的初始化文件中,记得修改USARTx,换成你要输出的USART端口号。 ! ~ S4 d; `- g, y' u7 H/ j9 x: Z6 F$ X /****************************************************************************** ( }, D1 f$ A; F& X' J8 j7 j * 【功 能】 printf函数重定向支持代码 * 加入以下代码, 使用printf函数时, 不再需要选择use MicroLIB # j) S8 H, ^% D7 `8 l * 参 数: * 返回值:' W* j* o7 m+ m& ?1 J1 U. r6 R9 p ******************************************************************************/ #pragma import(__use_no_semihosting) //为确保没有从C库链接使用半主机的函数 7 B, V+ U$ ^0 b2 ` struct __FILE { int handle; }; // 标准库需要的支持函数 FILE __stdout; // FILE 在stdio.h文件4 V: ?2 c E2 g+ f0 G3 z void _sys_exit(int x) // 定义_sys_exit()以避免使用半主机模式 { x = x; } int fputc(int ch, FILE *f) // 重定向fputc函数,使printf的输出,由fputc输出到UART, 这里使用串口1(USART1)9 _% o5 l4 h8 I+ ~ {+ [( O; }* V" z1 @ //if(xFlag.PrintfOK == 0) return 0; // 判断USART是否已配置,防止在配置前调用printf被卡死 while((USARTx ->SR&0X40)==0); // 等待上一次串口数据发送完成 USARTx ->DR = (u8) ch; // 写DR,串口1将发送数据9 \7 K, y4 b, z5 Y( l" C return ch; }' A ]+ \$ y: I( u/ W$ V 4 x7 A9 C" c. B; C8 r : k6 a) H, y7 f7 `; d + i& g- ]( q. {, p6 ]6 Q. k i# _& ^# E2 \' `6 e9 p% p D) X* z6 y: a5 }$ a( l 5 D8 ]! B5 J! [% m' P- C 4 Y# d; Z) }- ^/ V . `. }* Q- A$ x; R5 F& A+ t0 ` |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版