stm32學習總結:3、Proteus8+STM32CubeMX+MDK很有搞頭
文章目錄
- stm32學習總結:3、Proteus8+STM32CubeMX+MDK很有搞頭
- 一、前言
- 二、資料收集
- 三、實際案例-點燈
- 1、Proteus8安裝
- 2、Proteus創建stm32F013C6項目并添加外圍LED電路
- 3、STM32CubeMX配置F103C6引腳生成MDK工程
- 4、MDK編譯生成hex文件
- 5、Protens導入hex文件進行仿真
- 四、最后
一、前言
前陣子用codesys的軟PLC方案來仿真測試了PLC,以此研究了一陣子PLC和profinet,感觸頗深,這種仿真軟件還真是挺好用的,硬件軟件化真的很方便。最近stm32上有個使用 ADAU1361進行錄放音的研究,正好找到了仿真stm32的方案:Proteus,這個時候我發現這個不就是我們大學仿真C51的時候用的軟件嗎,時間太長不搞這塊的開發感覺都快忘的差不多了,實際軟件開發做多了感覺這類電子控制類的開發也變得有意思了,PLC、C51搞的有點返祖的感覺了。目前Proteus仿真stm32有一些型號還沒有,但是作為基礎研究學習是夠了。此外,正好借著這個機會早點把stm32這塊的一些基礎開發總結完,也拖了不少時間了,后續有時間再進階總結一下使用freertos+stm32cubemx相關的內容。
二、資料收集
Proteus安裝:https://blog.csdn.net/weixin_44543463/article/details/116203188
Proteus使用資料:http://www.tup.tsinghua.edu.cn/upload/books/yz/051322-01.pdf
Proteus仿真stm32:https://blog.csdn.net/mistake11a/article/details/109555825
STM32CubeMX也再熟悉一下:https://www.st.com/resource/zh/user_manual/um1718-stm32cubemx-for-stm32-configuration-and-initialization-c-code-generation-stmicroelectronics.pdf
三、實際案例-點燈
1、Proteus8安裝
參考對應博客直接下載安裝即可,太過于詳細了。
百度網盤鏈接:https://pan.baidu.com/s/1EHGewnvjcnEpPbXnR1qLIA
提取碼: pr89
- (1)右鍵壓縮包,進行解壓。進入解壓的文件夾,右鍵p8.9.sp0.exe文件,使用管理員身份打開。
- 這里可能有些機器會先彈出安裝Visual C++的一個界面,一定要安裝這些勾選的組件,否則后續安裝會出現問題。
- (2)莫得選擇,next
- (3)I accept,然后next
- (4)選擇使用本地的激活證書license key。
- (5)繼續next
- (6)這里會打開一個激活證書管理界面,點擊左下角【Browse For Key File】,找到剛才解壓出來的文件夾,里面解壓后的【Proteus 8.9】文件夾中的【Crack】文件夾下的【Licence.lxk】文件,點擊【打開】。
- (7)點擊 【install】,在彈出的對話框詢問是否繼續,選擇 【是】,安裝完成后點擊【Close】。
- (8)都不用勾選,直接【next】
- (9)這里選擇安裝方式,選擇【Custom】,然后選擇要安裝的路徑,注意:兩個路徑一定要一樣,否則后期軟件使用時會閃退。
- (10)這里不用管,默認【Next】就可以。
- (11)繼續【Next】
- (12)點擊【Install】開始安裝,安裝耗時一分鐘左右。
- (13) 點擊【Close】,不要運行Proteus
- (14)再次進入安裝包解壓后的【Proteus 8.9】文件夾中的【Crack】文件夾,選擇所有文件【復制】。
- (15) 在桌面找到【Proteus 8.9】的快捷方式,右鍵點擊【打開文件所在的位置】
- (16) 在空白處【右鍵-粘貼】,將剛才那三個文件復制過來。
- (17) 右鍵粘貼后的【pp8.9】選擇【以管理員身份運行】。(運行完成后不會彈出任何對話窗,運行一下就可以),建議關閉各種安全管家之后再運行。
- (18) 再次打開解壓后的【Proteus 8.9】文件夾,鼠標右擊【Translations】選擇【復制】。
- (19)再次右鍵桌面【Proteus 8.9】的快捷方式,右鍵點擊【打開文件所在的位置】
- (20)點擊路徑中的【Proteus】文件夾,回到上一級。
- (21)在空白處【右鍵-粘貼】,將剛才復制的Translation文件夾粘過來,可能會有27/28個同名文件,點擊【替換目標中的文件】。
- (22)進入【C:\Program Files (x86)\Labcenter Electronics】目錄下,有一個【Proteus 8 Professional】文件夾,進入此文件夾,【全選-復制這兩個文件夾】。
- (23)回到Proteus的安裝路徑(同19、20步),【右鍵粘貼,替換目標文件】
- (24)至此,安裝完成!
2、Proteus創建stm32F013C6項目并添加外圍LED電路
目前我們一般使用的最小板大多為F103C8T6,Proteus上沒有C8的,但是在論壇上找到C6的引腳基本和C8是一樣的(http://www.51hei.com/bbs/dpj-185185-1.html),只是Flash和RAM小一點,從下圖看F103C4和F103CB也是可以作為簡單demo來匹配C8的:
創建工程很簡單,因為是中文版所以基本上應該都能看懂:
- (1)新建工程
- (2)選擇默認模板
- (3)默認不創建PCB布版設計
- (4)創建固件,選擇相關STM32F103C6的固件,編譯器選擇MDK帶的即可,也可以自己配置arm gcc
- (5)然后下一步并完成即可:
- (6)添加元器件
添加LED-RED:
添加電阻:
- (7)然后簡單布線一下,這里需要相關的電子知識,一般LED需要的電流大小,設置的電阻大小、電壓值計算、串并聯等等,否則燈就亮不起來,或者實際硬件設計時導致燒掉元器件等問題:
3、STM32CubeMX配置F103C6引腳生成MDK工程
接著我們需要開發程序控制STM32F103C6的PA1-PA8輸出電平來使得LED亮滅,這里我們鍛煉使用STM32CubeMX來配置相關引腳,關于STM32CubeMX的安裝之前已經有一些接觸,這個還是比較推薦的,確實會省不少事。
- (1)進入MCU選擇界面:
- (2)左上角搜索STM32F103C6,之后選擇一個型號即可,我們選擇默認的第一個,之后選擇開始項目:
- (3)配置相關引腳(這里設置PA1-PA8為GPIO輸出)
- (4)時鐘配置和Tools我們這里先不需要,在項目管理這里設置工程路徑和工具鏈IDE即可(MDK這里選擇MDK-ARM即可):
最后點擊右上角的GENERATE CODE生成代碼即可,生成完成直接打開工程就進入MDK軟件頁了。
4、MDK編譯生成hex文件
- 1、點擊魔法棒進入配置頁面
- 2、在配置頁面的Output這里配置生成HEX文件
- 3、寫完代碼最后進行編譯或者重編譯生成hex文件
這里我們控制GPIO的拉高拉低來閃爍LED燈,代碼如下(主要是main.c的相關位置添加循環延時控制寄存器,也可以按部就班的寫GPIO引腳的拉高拉低):
...
void delay_ms(uint32_t ms)
{uint32_t i_cnt,j_cnt;for(i_cnt=0; i_cnt < 3000; i_cnt++);for(j_cnt=0; j_cnt < ms; j_cnt++);}
uint32_t i;
/* USER CODE END 0 *//*** @brief The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 */GPIOA->BSRR = 0xff;/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */for(i = 0; i < 8; i++){delay_ms(99000);GPIOA->BRR = (1 << i);delay_ms(99000);GPIOA->BSRR= (1 << i);}for(i = 0; i < 8; i++){delay_ms(99000);GPIOA->BRR = 0x000000ff;delay_ms(99000);GPIOA->BSRR = 0x000000ff;}}/* USER CODE END 3 */
}
...
生成的hex文件位置(MDK項目目錄下):
5、Protens導入hex文件進行仿真
Proteus工程中雙擊元器件導入hex文件:
然后調試->開始仿真即可:
四、最后
Proteus確實好用,有的時候比開發板甚至面包板都好用,用于學習研究再好不過了,也避免了電路設計錯誤燒掉板子等問題,使用過程中也算是簡單鍛煉了設計電路的能力,但是有的時候相關的元器件型號缺失就顯得比較雞肋,從大學那時候學習的記憶看似乎更適合去仿真C51系列的單片機作為教學之類的。(比如我這里需要ADAU1361和STM32F411,但是相關元器件導入要登錄之類的,甚至需要自己去設計電路圖導入導出,這個時候就比較麻煩了,這對于一些新手就比較勸退,折騰不少時間,最后實際項目可能還有差異,所以有能力入手開發板和面包板的還是比較推薦這種方式,如果實在手頭有限但有時間折騰的可以啃一下Proteus,還是可以省不少錢的;我后續會根據自己手頭有的元器件來選擇使用proteus還是實際元器件操作進行總結,我們也不必拘泥于這些外物,學到知識才是關鍵。)