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

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

[复制链接]
STMCU小助手 发布时间:2022-6-5 22:00
半主机机制的作用
    半主机是用于ARM目标的一种机制,可将来自STM32单片机应用程序的输入输出请求传送至运行仿真器的PC主机。使用此机制可以启用C库中的函数,如printf()和scanf(),来使用PC主机的屏幕和键盘。这样就可以看到单片机的输入输出,方便进行调试。注意:种机制的运行需要仿真器,否则无法运行。
    简单的来说,半主机模式就是通过仿真器实现开发板在电脑上的输入和输出。
    开发时单片机需要独立运行,开发者就应该去掉仿真器,把printf函数通过单片机的外设来实现,例如通过开发板的串口。
2 m" z: {- X, u0 k
非半主机机制下printf函数的实现方法
Use MicroLIB(微库)
    因为使用微库的话,不会使用半主机模式。
    如下图,在点开MDK软件的魔术棒,勾选Target选项卡中的“Use MicroLIB”。这样就可以使用printf()函数,通过USART输出数据到电脑串口助手。
在主程序中添加代码
    不使用Use MicroLIB(微库),就要在工程中加入以下代码, 以支持printf函数 。代码是写在USART的初始化文件中,记得修改USARTx,换成你要输出的USART端口号。

  1. . U1 |2 U* Q) |+ J# t0 ~- y
  2. /******************************************************************************! x1 J' j2 G; T9 I  B5 z5 t
  3. * 【功  能】 printf函数重定向支持代码6 H' B$ O+ S( L' ~
  4. *           加入以下代码, 使用printf函数时, 不再需要选择use MicroLIB   
    & P0 z+ f% N4 d2 t( Q% L  A
  5. * 参  数:
    $ x/ c* p, o5 X5 I" c2 d; V$ H
  6. * 返回值:
      b# ?9 T2 X  A6 L, k! V! c
  7. ******************************************************************************/  7 t0 k$ @1 r, g* o/ U1 h/ \" q
  8. #pragma import(__use_no_semihosting)     //为确保没有从C库链接使用半主机的函数        
    * I; L6 S- u( \
  9. struct __FILE       { int handle; };     // 标准库需要的支持函数
    6 d: {( R& h* R+ j  J  W
  10. FILE __stdout;                           // FILE 在stdio.h文件
    7 k4 k3 j5 h% q. Y8 i
  11. void _sys_exit(int x)                    // 定义_sys_exit()以避免使用半主机模式
    ' ]% A. W, b3 Q9 T3 I
  12. {  x = x; }         
    8 f  T  Y: |8 s! d3 O  b' _
  13. $ m7 z3 C, }( ?- B- w
  14. int fputc(int ch, FILE *f)               // 重定向fputc函数,使printf的输出,由fputc输出到UART,  这里使用串口1(USART1)
    2 ?* Z( I# B4 V4 d% g: l3 r
  15. {     T& e( _! C" E, ?+ A+ U8 }
  16.     //if(xFlag.PrintfOK == 0) return 0;  // 判断USART是否已配置,防止在配置前调用printf被卡死, {& B5 p- `7 k
  17. % u* v- l& x, C1 [
  18.     while((USARTx ->SR&0X40)==0);        // 等待上一次串口数据发送完成  - }: |8 Q2 g% N) s. z. ]
  19.   USARTx ->DR = (u8) ch;                 // 写DR,串口1将发送数据   
    / Q2 e2 W4 y+ h* E8 v) C, \
  20.   return ch;6 l3 |0 c) x8 V* g; n
  21. }
复制代码

2 p; G" y2 {) t7 z' g0 |2 k6 C
* J- ~  L8 W3 h+ F, X
赞 收藏 评论0 发布时间:2022-6-5 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版