[应用相关]

【经验分享】STM32的半主机机制

[复制链接]
357|11
手机看帖
扫描二维码
随时随地手机跟帖
cr315|  楼主 | 2022-6-6 17:17 | 显示全部楼层 |阅读模式
半主机机制的作用
    半主机是用于ARM目标的一种机制,可将来自STM32单片机应用程序的输入输出请求传送至运行仿真器的PC主机。使用此机制可以启用C库中的函数,如printf()和scanf(),来使用PC主机的屏幕和键盘。这样就可以看到单片机的输入输出,方便进行调试。注意:种机制的运行需要仿真器,否则无法运行。
    简单的来说,半主机模式就是通过仿真器实现开发板在电脑上的输入和输出。
    开发时单片机需要独立运行,开发者就应该去掉仿真器,把printf函数通过单片机的外设来实现,例如通过开发板的串口。

使用特权

评论回复
cr315|  楼主 | 2022-6-6 17:17 | 显示全部楼层
非半主机机制下printf函数的实现方法
Use MicroLIB(微库)
    因为使用微库的话,不会使用半主机模式。
    如下图,在点开MDK软件的魔术棒,勾选Target选项卡中的“Use MicroLIB”。这样就可以使用printf()函数,通过USART输出数据到电脑串口助手。
640?wx_fmt=png.jpg

使用特权

评论回复
cr315|  楼主 | 2022-6-6 17:19 | 显示全部楼层
在主程序中添加代码
    不使用Use MicroLIB(微库),就要在工程中加入以下代码, 以支持printf函数 。代码是写在USART的初始化文件中,记得修改USARTx,换成你要输出的USART端口号。
  • /******************************************************************************
  • * 【功  能】 printf函数重定向支持代码
  • *           加入以下代码, 使用printf函数时, 不再需要选择use MicroLIB
  • * 参  数:
  • * 返回值:
  • ******************************************************************************/
  • #pragma import(__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;
  • }

复制代码


使用特权

评论回复
tpgf| | 2022-7-4 13:20 | 显示全部楼层
第一次了解这个名词

使用特权

评论回复
aoyi| | 2022-7-4 13:29 | 显示全部楼层
我还是不能理解

使用特权

评论回复
nawu| | 2022-7-4 13:39 | 显示全部楼层
不是很明白二者的区别

使用特权

评论回复
zljiu| | 2022-7-4 13:48 | 显示全部楼层
非主机不可以启用吗

使用特权

评论回复
gwsan| | 2022-7-4 13:55 | 显示全部楼层
主要用在哪些应用上呢

使用特权

评论回复
tfqi| | 2022-7-4 14:03 | 显示全部楼层
请问 什么是微库啊

使用特权

评论回复
dongnanxibei| | 2022-7-4 17:42 | 显示全部楼层
谢谢分享

使用特权

评论回复
sadicy| | 2022-7-10 18:37 | 显示全部楼层
没太理解

使用特权

评论回复
Uriah| | 2022-10-3 11:30 | 显示全部楼层

编程器定位插字节

使用特权

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

本版积分规则

1190

主题

2989

帖子

0

粉丝