1. 程式人生 > >stm32程式無法進入main函式解決方法

stm32程式無法進入main函式解決方法

如圖所示,進入除錯之後,點選執行run(f5),沒有反應,程式也停留在紅點 BX RO之處,點選執行F5旁邊的向右的黃色小箭頭→,進入彙編執行檢視,如下圖

停留在0x08000908 BEAB BKPT 0xAB 地方,不往下執行,動都不動,原因是可能使用了printf函式。

以前使用printf 都很順利,程式可以很自然地通過串列埠輸出字串,最近使用printf時,程式總是進不去,就是連MAIN函式都不會執行了,只要把printf遮蔽了,軟體就可以正常執行

這個問題的解決辦法是:
在專案設定中 選擇 target選項卡 然後選擇 USE Mcrolib 這樣就可以了
就是說要用printf函式時要用"Use MicroLIB"庫,即: C 微庫(microlib)

還有一種方法:
標準庫函式的預設輸出裝置是顯示器,要實現在串列埠或LCD輸出,必須重定義標準庫函式裡呼叫的與輸出裝置相關的函式,printf輸出到串列埠,只需將putc裡面的輸出指向串列埠就行,另外在使用標準庫函式時必須避免半主機模式,方法是在main檔案里加程式碼:


void _sys_exit(int x) 

    x = x; 


int fputc(int ch, FILE *f)
{     
    while((USART1->SR&0X40)==0);
    USART1->DR = (u8) ch;      
    return ch;
}