半主機(jī)機(jī)制的作用
半主機(jī)是用于ARM目標(biāo)的一種機(jī)制,可將來自STM32單片機(jī)應(yīng)用程序的輸入輸出請(qǐng)求傳送至運(yùn)行仿真器的PC主機(jī)。使用此機(jī)制可以啟用C庫中的函數(shù),如printf()和scanf(),來使用PC主機(jī)的屏幕和鍵盤。這樣就可以看到單片機(jī)的輸入輸出,方便進(jìn)行調(diào)試。注意:種機(jī)制的運(yùn)行需要仿真器,否則無法運(yùn)行。
簡單的來說,半主機(jī)模式就是通過仿真器實(shí)現(xiàn)開發(fā)板在電腦上的輸入和輸出。
開發(fā)時(shí)單片機(jī)需要獨(dú)立運(yùn)行,開發(fā)者就應(yīng)該去掉仿真器,把printf函數(shù)通過單片機(jī)的外設(shè)來實(shí)現(xiàn),例如通過開發(fā)板的串口。
非半主機(jī)機(jī)制下printf函數(shù)的實(shí)現(xiàn)方法
Use MicroLIB(微庫)
因?yàn)槭褂梦斓脑挘粫?huì)使用半主機(jī)模式。
如下圖,在點(diǎn)開MDK軟件的魔術(shù)棒,勾選Target選項(xiàng)卡中的“Use MicroLIB”。這樣就可以使用printf()函數(shù),通過USART輸出數(shù)據(jù)到電腦串口助手。

在主程序中添加代碼
不使用Use MicroLIB(微庫),就要在工程中加入以下代碼, 以支持printf函數(shù) 。代碼是寫在USART的初始化文件中,記得修改USARTx,換成你要輸出的USART端口號(hào)。
/******************************************************************************
* 【功 能】 printf函數(shù)重定向支持代碼
* 加入以下代碼, 使用printf函數(shù)時(shí), 不再需要選擇use MicroLIB
* 參 數(shù):
*返回值:
******************************************************************************/
#pragmaimport(__use_no_semihosting)//為確保沒有從C庫鏈接使用半主機(jī)的函數(shù)
struct __FILE { int handle; }; // 標(biāo)準(zhǔn)庫需要的支持函數(shù)
FILE __stdout; // FILE 在stdio.h文件
void _sys_exit(int x) // 定義_sys_exit()以避免使用半主機(jī)模式
{ x = x; }
int fputc(int ch, FILE *f) // 重定向fputc函數(shù),使printf的輸出,由fputc輸出到UART, 這里使用串口1(USART1)
{
//if(xFlag.PrintfOK == 0) return 0; // 判斷USART是否已配置,防止在配置前調(diào)用printf被卡死
while((USARTx ->SR&0X40)==0); // 等待上一次串口數(shù)據(jù)發(fā)送完成
USARTx ->DR = (u8) ch; // 寫DR,串口1將發(fā)送數(shù)據(jù)
return ch;
}
審核編輯:劉清
-
仿真器
+關(guān)注
關(guān)注
14文章
1048瀏覽量
86776 -
ARM處理器
+關(guān)注
關(guān)注
6文章
361瀏覽量
43129 -
STM32單片機(jī)
+關(guān)注
關(guān)注
59文章
553瀏覽量
60318 -
printf函數(shù)
+關(guān)注
關(guān)注
0文章
31瀏覽量
6226 -
USART串口
+關(guān)注
關(guān)注
0文章
32瀏覽量
7227
原文標(biāo)題:STM32的半主機(jī)機(jī)制
文章出處:【微信號(hào):單片機(jī)與嵌入式,微信公眾號(hào):單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何在POSC中使用半主機(jī)?
何謂半主機(jī)方式?
如何構(gòu)建用于非半主機(jī)環(huán)境的應(yīng)用程序
什么是半主機(jī)模式?為什么不用它
嵌入式USB主機(jī)系統(tǒng)的研究與設(shè)計(jì)
自主機(jī)器人足球系統(tǒng)的通信機(jī)制
"MODBUS移植STM32,分別配置STM32做從機(jī)和主機(jī)"
STM32的半主機(jī)機(jī)制
STM32Cube USB主機(jī)庫

STM32的半主機(jī)機(jī)制介紹
評(píng)論