你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32的半主机机制

[复制链接]
y369369 发布时间:2021-4-7 13:18
半主机机制的作用
    半主机是用于ARM目标的一种机制,可将来自STM32单片机应用程序的输入输出请求传送至运行仿真器的PC主机。使用此机制可以启用C库中的函数,如printf()和scanf(),来使用PC主机的屏幕和键盘。这样就可以看到单片机的输入输出,方便进行调试。注意:种机制的运行需要仿真器,否则无法运行。
    简单的来说,半主机模式就是通过仿真器实现开发板在电脑上的输入和输出。
    开发时单片机需要独立运行,开发者就应该去掉仿真器,把printf函数通过单片机的外设来实现,例如通过开发板的串口。
非半主机机制下printf函数的实现方法
Use MicroLIB(微库)
    因为使用微库的话,不会使用半主机模式。
    如下图,在点开MDK软件的魔术棒,勾选Target选项卡中的“Use MicroLIB”。这样就可以使用printf()函数,通过USART输出数据到电脑串口助手。
1.1.png
在主程序中添加代码
    不使用Use MicroLIB(微库),就要在工程中加入以下代码, 以支持printf函数 。代码是写在USART的初始化文件中,记得修改USARTx,换成你要输出的USART端口号。
  1. /******************************************************************************
    2 R8 W1 m' G, f- l% M
  2. * 【功  能】 printf函数重定向支持代码) ^- o/ I6 h1 ^
  3. *           加入以下代码, 使用printf函数时, 不再需要选择use MicroLIB   * a: L0 \" H$ C8 b
  4. * 参  数:, Q0 Z* }5 @3 P0 y5 x; J; v* W' N
  5. * 返回值:
    3 o  g* {* e' I
  6. ******************************************************************************/    m' @; p; `5 U: m
  7. #pragma import(__use_no_semihosting)     //为确保没有从C库链接使用半主机的函数        / i' l5 v* L9 P- m6 N4 ]+ i
  8. struct __FILE       { int handle; };     // 标准库需要的支持函数
    8 C9 M$ |% ?  \5 \( u# ~5 }5 l& a
  9. FILE __stdout;                           // FILE 在stdio.h文件
    9 d) y7 U& s2 N/ ]- O
  10. void _sys_exit(int x)                    // 定义_sys_exit()以避免使用半主机模式
    3 C- |3 x) Y) G) r- \
  11. {  x = x; }         
    + Q0 }( H' L3 {/ F

  12. - r0 i- z- Q# v# L4 }
  13. int fputc(int ch, FILE *f)               // 重定向fputc函数,使printf的输出,由fputc输出到UART,  这里使用串口1(USART1)
    9 H8 [8 c: o( C* V7 ]
  14. {   1 M  `: \* |: y- X4 q* M/ p
  15.     //if(xFlag.PrintfOK == 0) return 0;  // 判断USART是否已配置,防止在配置前调用printf被卡死
    2 Q* o4 w- u( C/ L% w: J: U# ?

  16. ) @( n# X9 k3 Q0 _# D& |) k
  17.     while((USARTx ->SR&0X40)==0);        // 等待上一次串口数据发送完成  3 r* q& v# G; L: k
  18.   USARTx ->DR = (u8) ch;                 // 写DR,串口1将发送数据    , ~( ^7 V) k7 K9 B; @  L; e% C! `6 j
  19.   return ch;% W: D  O+ l+ i) [2 _1 Y4 r
  20. }
复制代码

% [! x  V% Z5 V; I( E6 L
文章出处: STM32嵌入式开发

8 a1 x- K! N8 q. i
收藏 评论0 发布时间:2021-4-7 13:18

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版