基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法
1、 幾點重要問題說明
1.MCU仿真型號要統一
Proteus中STM32F103就幾個型號,不全。而且proteus的MCU型號必須和利用cubemx生成的工程的MCU型號一致,否則不能用。例如STM32F103R6和STM32F103RE是兩個MCU,不要混了。
2. 無法C調試
利用HAL庫開發,目前在Proteus中只有彙編語言,沒有辦法編譯為C進行單步調試。
3. 選elf格式文件
Proteus中MCU可以加載hex和elf兩個格式文件,建議用elf文件,hex不穩定。
4. MCU的主頻和電源地等可以默認
網上很多例子說必須設置這些參數,目前我利用嚮導建立的工程不需要。
5. 報錯後一定重啟proteus
調試串口的時候總報錯死程序,一定要重啟proteus,否則一堆問題。
2、 安裝Proteus8.9
1. 下載安裝軟件
下載地址,鏈接:https://pan.baidu.com/s/1D9lk8FTMwH15nTiWKumqeQ
提取碼:vcm4
下載後安裝時英文版,裡面有漢化包,複製所有漢化文件到安裝目錄的語言文件夾即可。
![基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法](http://p2.ttnews.xyz/loading.gif)
圖 1 漢化文件夾
2. 建立STM32F103R6工程
按下圖操作,主要最後一個界面選擇對應型號的MCU
![基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法](http://p2.ttnews.xyz/loading.gif)
圖 2 工程步驟
3. 添加器件
這個軟件是英國人開發的,使用時左鍵選取、移動。右鍵菜單、中間鍵移動屏幕,滾輪放大縮小,都有功能,用著不爽。
如下圖所示1為選取,2為電子全器件選取、3為ground和VDD、4是示波器等、5和6是模擬仿真的開始於結束。
圖 3 項目窗體
點擊2,在右側框中點擊P字母,彈出選取器件窗口。利用關鍵詞找到器件,就添加到器件串口中,後面就可以直接用了,不用每次都搜索。
圖 4 添加候選器件
4. 添加常用器件
如下圖所示,建立三個輸入按鈕、三個輸出LED小燈,一個串口。
圖 5 建立測試項目
三、幾點注意事項
1. LED燈
要連接一個100歐姆的電阻,沒有會短路。電阻太大了,電流不夠,不亮。100K就不亮。
2. 開關
用的是上拉電阻模式,軟件的中斷的採樣一定用下降沿觸發中斷。如果用上升沿,按一次會有2次中斷,不知道為什麼,一個坑。
3. 串口
也是坑最大的,網上有人用proteus裡面的虛擬終端調試,我試了一下,不穩定,有亂碼。用COMPIM器件好一點,但是也是不穩定。波特率不要太高了,用9600。另外如果導致工程死機,就重新啟動proteus,否則後面怎麼模擬都有問題一堆。
四、配置串口參數
這個單獨說一下,需要一些第三方的軟件。
1. 安裝虛擬串口
下載地址:https://dl.pconline.com.cn/download/825163.html
2. 串口助手
自己網上找吧。
3. 利用虛擬串口虛擬串口
虛擬兩個COM8和COM9,他們內部已經互相聯通了。
4. 配置串口器件參數
在proteus中雙擊串口器件,添加如下參數。
另外注意,COMPIM和MCU是直連關係。
圖 6串口參數
5. 程序運行
仿真開始後,利用串口助手打開COM9,因為com9和com8是互通的,這樣com9就可以跟mcu的串口通信了。
5、 MCU加載程序
雙擊MCU,在program file中選擇你的keil項目中的elf文件,晶振自己設置吧。如果用了定時器,最好設置一下。
圖 7 加載參數
6、 運行仿真
點擊窗口左下的仿真運行、停止按鈕就可以控制仿真了。仿真過程中有問題,會在message窗口中有紅色文字進行提示,自己理解吧。有問題,一定重啟一下proteus。
圖 8 仿真
幾點說明:
(1)現在仿真對cubemx生成的HAL庫程序支持不好,都是彙編語句,沒有辦法單步調試,只能看硬件效果了。
(2)如果修改器件,添加、刪除器件等,一定要停止仿真,才能操作。
(3)如果添加了示波器、邏輯分析儀、虛擬終端等,一定要謹慎,容易導致項目死掉。
(4)啟動仿真報下面這個錯,就是你MCU的程序文件加載錯了,在加載一次。
圖 9 MCU文件加載錯誤
7、 Keil工程的配置
默認kei工程生成的是hex文件,如果需要elf文件,需要修改默認選項。
1. 調出項目Option窗口
圖 10 調出options窗口
2. 修改output子窗口
去掉hex選項,在輸出文件添加elf擴展名。Proteus的MCU芯片就找這個文件加載就可以了。
圖 11 參數修改
8、 案例
做了一個基於cubemx5.6、keil MDK5.0和proteus8.9的案例。涵蓋GPIO輸入、輸出、外部中斷、定時器中斷、串口輸出、串口中斷輸入的基本功能案例。需要的話下載地址
鏈接:https://pan.baidu.com/s/1HcjC2x7L5MXkPjA3pP2Agw
提取碼:b1rv
9、 Proteus與keil仿真的比較
前面寫過一個keil下stm32F103仿真的方法,跟proteus比較。Keil主要MCU內部功能的仿真,沒有過多的外部接口支持、例如AD /DA/SPI等,只能看管腳和寄存器的0/1狀態,不直觀,分析有一定難度。但是優點是使用簡單、系統穩定。
而proteus可以設計符合實際的模擬各種電路,比較直觀。支持的接口也多。看最後的效果很容易分析問題。但是問題是,proteus的使用需要數字和模擬電路基礎,否則不能配置出合理的工程。另外一點也比較頭痛,就是穩定性問題,過多的監控和通信器件很容易死機,是不是和諧版的問題,不好說。
總體來說,如果有電路基礎,傾向於用proteus,還是更加接近真實。Keil仿真可以驗證內部的邏輯,儘量少跟外部端口打交道。
閱讀更多 物聯網知識 的文章