基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法


基於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芯片方法

圖 1 漢化文件夾


2. 建立STM32F103R6工程

按下圖操作,主要最後一個界面選擇對應型號的MCU

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法


基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

圖 2 工程步驟


3. 添加器件

這個軟件是英國人開發的,使用時左鍵選取、移動。右鍵菜單、中間鍵移動屏幕,滾輪放大縮小,都有功能,用著不爽。

如下圖所示1為選取,2為電子全器件選取、3為ground和VDD、4是示波器等、5和6是模擬仿真的開始於結束。

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

圖 3 項目窗體


點擊2,在右側框中點擊P字母,彈出選取器件窗口。利用關鍵詞找到器件,就添加到器件串口中,後面就可以直接用了,不用每次都搜索。

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法


基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

圖 4 添加候選器件


4. 添加常用器件

如下圖所示,建立三個輸入按鈕、三個輸出LED小燈,一個串口。

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

圖 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是直連關係。

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

圖 6串口參數


5. 程序運行

仿真開始後,利用串口助手打開COM9,因為com9和com8是互通的,這樣com9就可以跟mcu的串口通信了。

5、 MCU加載程序

雙擊MCU,在program file中選擇你的keil項目中的elf文件,晶振自己設置吧。如果用了定時器,最好設置一下。

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

圖 7 加載參數


6、 運行仿真

點擊窗口左下的仿真運行、停止按鈕就可以控制仿真了。仿真過程中有問題,會在message窗口中有紅色文字進行提示,自己理解吧。有問題,一定重啟一下proteus。

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

圖 8 仿真


幾點說明:

(1)現在仿真對cubemx生成的HAL庫程序支持不好,都是彙編語句,沒有辦法單步調試,只能看硬件效果了。

(2)如果修改器件,添加、刪除器件等,一定要停止仿真,才能操作。

(3)如果添加了示波器、邏輯分析儀、虛擬終端等,一定要謹慎,容易導致項目死掉。

(4)啟動仿真報下面這個錯,就是你MCU的程序文件加載錯了,在加載一次。

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

圖 9 MCU文件加載錯誤


7、 Keil工程的配置

默認kei工程生成的是hex文件,如果需要elf文件,需要修改默認選項。

1. 調出項目Option窗口

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

圖 10 調出options窗口


2. 修改output子窗口

去掉hex選項,在輸出文件添加elf擴展名。Proteus的MCU芯片就找這個文件加載就可以了。

基於Proteus8.9和STM32的HAL庫模擬仿真STM32F103R6芯片方法

圖 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仿真可以驗證內部的邏輯,儘量少跟外部端口打交道。



分享到:


相關文章: