这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32的半主机机制

共9条 1/1 1 跳转至

STM32的半主机机制

高工
2022-06-05 21:18:10     打赏

半主机机制的作用

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

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

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

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

Use MicroLIB(微库)

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

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

image.png

在主程序中添加代码

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





关键词: STM32     主机     机制    

院士
2022-06-05 22:21:48     打赏
2楼

看看


专家
2022-06-06 01:18:58     打赏
3楼

知道了


专家
2022-06-06 08:04:05     打赏
4楼

学习了


专家
2022-06-06 08:05:25     打赏
5楼

学习了


专家
2022-06-06 08:13:47     打赏
6楼

感谢分享 


专家
2022-06-06 08:40:43     打赏
7楼

感谢分享



院士
2022-06-06 09:24:34     打赏
8楼

我是一直反对使用这种 semi-host的方式。

我认为效果不如直接配置好串口要方便


专家
2022-06-06 09:56:54     打赏
9楼

谢谢分享


共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]