半主机机制的作用
半主机是用于ARM目标的一种机制,可将来自STM32单片机应用程序的输入输出请求传送至运行仿真器的PC主机。使用此机制可以启用C库中的函数,如printf()和scanf(),来使用PC主机的屏幕和键盘。这样就可以看到单片机的输入输出,方便进行调试。注意:种机制的运行需要仿真器,否则无法运行。
简单的来说,半主机模式就是通过仿真器实现开发板在电脑上的输入和输出。
开发时单片机需要独立运行,开发者就应该去掉仿真器,把printf函数通过单片机的外设来实现,例如通过开发板的串口。
非半主机机制下printf函数的实现方法
Use MicroLIB(微库)
因为使用微库的话,不会使用半主机模式。
如下图,在点开MDK软件的魔术棒,勾选Target选项卡中的“Use MicroLIB”。这样就可以使用printf()函数,通过USART输出数据到电脑串口助手。

在主程序中添加代码
不使用Use MicroLIB(微库),就要在工程中加入以下代码, 以支持printf函数 。代码是写在USART的初始化文件中,记得修改USARTx,换成你要输出的USART端口号。
/******************************************************************************
* 【功 能】 printf函数重定向支持代码
* 加入以下代码, 使用printf函数时, 不再需要选择use MicroLIB
* 参 数:
*返回值:
******************************************************************************/
#pragmaimport(__use_no_semihosting)//为确保没有从C库链接使用半主机的函数
struct __FILE { int handle; }; // 标准库需要的支持函数
FILE __stdout; // FILE 在stdio.h文件
void _sys_exit(int x) // 定义_sys_exit()以避免使用半主机模式
{ x = x; }
int fputc(int ch, FILE *f) // 重定向fputc函数,使printf的输出,由fputc输出到UART, 这里使用串口1(USART1)
{
//if(xFlag.PrintfOK == 0) return 0; // 判断USART是否已配置,防止在配置前调用printf被卡死
while((USARTx ->SR&0X40)==0); // 等待上一次串口数据发送完成
USARTx ->DR = (u8) ch; // 写DR,串口1将发送数据
return ch;
}
上一篇:STM32与GD32横向对比区别
下一篇:STM32时钟系统的基础知识
- 热门资源推荐
- 热门放大器推荐
- 使用 ROHM Semiconductor 的 BD48E54G 的参考设计
- LTC1871,一种高效率 5V、2A 网络逻辑电源
- LT6657AHMS8-2.5 低噪声统计平均基准的典型应用电路
- LT8705AIUHF 用于电信稳压器的降压-升压型 DC/DC 控制器的典型应用
- LT8390EFE 98% 效率 48W (12V/4A) 微型降压-升压型稳压器的典型应用电路
- LTC3452 的典型应用 - 同步降压-升压主 / 相机白光 LED 驱动器
- 具有 5V 输出的 LT1076IR 正负转换器的典型应用
- MPC8308RDB: MPC8308-RDB参考平台
- 使用 MaxLinear, Inc 的 AS431 的参考设计
- LTC3106EFE 简单宽输入电压降压-升压转换器的典型应用电路

非常经典的关于LLC的杨波博士论文
NJU7061V(TE2)

VI-27WIU






京公网安备 11010802033920号