半主机机制的作用
半主机是用于arm目标的一种机制,可将来自stm32单片机应用程序的输入输出请求传送至运行仿真器的pc主机。使用此机制可以启用c库中的函数,如printf()和scanf(),来使用pc主机的屏幕和键盘。这样就可以看到单片机的输入输出,方便进行调试。注意:种机制的运行需要仿真器,否则无法运行。
简单的来说,半主机模式就是通过仿真器实现开发板在电脑上的输入和输出。
开发时单片机需要独立运行,开发者就应该去掉仿真器,把printf函数通过单片机的外设来实现,例如通过开发板的串口。
非半主机机制下printf函数的实现方法
use microlib(微库)
因为使用微库的话,不会使用半主机模式。
如下图,在点开mdk软件的魔术棒,勾选target选项卡中的“use microlib”。这样就可以使用printf()函数,通过usart输出数据到电脑串口助手。
在主程序中添加代码
不使用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嵌入式开发
原文标题:stm32的半主机机制
文章出处:【微信公众号:stm32嵌入式开发】欢迎添加关注!文章转载请注明出处。
小米技术全景图公布 便宜并非没好货
基于MEMS热电堆红外传感器的红外探测系统
科裕智能科技感应锁929-8-D简介
高通技术取得突破 通过VR技术发送邀请函
RTX 3090辜负卡皇之名
关于STM32半主机机制的作用
用CW9561构成的感应式防盗报警器,CW9561 guard alarm
PWM芯片及振荡器电路分析
单结晶体管工作性能速测电路图
从英菲尼迪Q50到奥迪E-tron看线控技术之路
小米研发SoC到底是何目的?与老牌玩家华为、高通的差距!
花样百出的XR技术!XR虚拟拍摄在不同行业的运用
华为正准备通过Nova 8系列扩展其Nova系列
光电式转速传感器
智能设备无线充电的几大技术路径介绍
渗透测试如何利用403页面
功能原型系统:算法工程开发常见问题及图形化解决的优点介绍
医用手套不透水性测试仪的特征及参数
中消云和中国电信、华为合作,助力NB-IoT智慧消防大规模商用
小米MIX3和一加6T哪个拍照最好