全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 处理器/DSP >

STM32的半主机机制介绍

时间:2023-07-10 09:01

人气:

作者:admin

标签: 仿真器  USART串 

导读:半主机是用于ARM目标的一种机制,可将来自STM32单片机应用程序的输入输出请求传送至运行仿真器的PC主机。...

半主机机制的作用

半主机是用于ARM目标的一种机制,可将来自STM32单片机应用程序的输入输出请求传送至运行仿真器的PC主机。使用此机制可以启用C库中的函数,如printf()和scanf(),来使用PC主机的屏幕和键盘。这样就可以看到单片机的输入输出,方便进行调试。注意:种机制的运行需要仿真器,否则无法运行。

简单的来说,半主机模式就是通过仿真器实现开发板在电脑上的输入和输出。

开发时单片机需要独立运行,开发者就应该去掉仿真器,把printf函数通过单片机的外设来实现,例如通过开发板的串口。

非半主机机制下printf函数的实现方法

Use MicroLIB(微库)

因为使用微库的话,不会使用半主机模式。

如下图,在点开MDK软件的魔术棒,勾选Target选项卡中的“Use MicroLIB”。这样就可以使用printf()函数,通过USART输出数据到电脑串口助手。

5fa2d2ca-1e2f-11ee-962d-dac502259ad0.png

在主程序中添加代码

不使用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;
}





审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信