該文章主要介紹在MDK5上進行STM32設計跑馬燈程序並進行編譯;以及基於51單片機進行交通信號燈的程序設計之后對其進行Proteus軟件仿真
一、STM32跑馬燈設計
設計須知:
stm32的IO口可以由軟件配置如下8種模式:
1、輸入浮空 | 3、輸入下拉 | 5、開漏輸入 | 7、推挽式復用功能 |
---|---|---|---|
2、輸入上拉 | 4、模擬輸入 | 6、推挽輸入 | 8、開漏復用功能 |
每個IO口由7各寄存器控制分別有:2個32位端口配置寄存器CRL/CRH;2個32位數據寄存器IDR/ODR;1個32位置位寄存器BSRR;1個16位的伏位寄存器BRR;1個32位鎖存寄存器LCKR;具體IO口如何配置可以參考《STM32參考手冊》,這里就不做過多說明。
在配置時,CRL控制低8位輸出口,CRH控制高8位輸出口。作用完全一樣。
程序設計(參考正點原子的庫函數與開發指南)
step0:進行工程配置
將啟動文件startup_stm32f10x_hd.s(官方給出)添加到Source Group1里
將delay.c、sys.c、usart.c文件添加到SYSTEM文件里
具體內容可以參考http://www.openedv.com里開發指南3.2節,這里就不再詳細講解
工程配置好如下:
step1:建立相關程序
新建HERDWARE文件夾,並在文件夾下建my_led文件夾,用來存放此次設計相關函數
編寫led.c函數
編寫led.h函數
step2:添加函數至工程
在 Manage Components界面中,在HARDWARE文件夾下添加my_led.c函數,再打開Option for target -->C/C++添加讀取頭文件的路徑:
step3:建立主函數
為了實現燈1和2的從暗到亮再一起亮,一起暗的功能,建立主函數如下:
建立文件夾USER,並加入主函數,配置工程如下:
可能出現的錯誤解釋
當工程建立之后進行編譯時很可能遇到如下問題:
提示文件最后一行沒有新起一行作為結束。
(據說這是個軟件bug。只要最后一行多敲兩個回車警告就會消失)
編譯及連接
一切處理好后,就可以編譯並連接了
step1:
這里我使用的是JLINK下載程序(也可使用STLINK)使用之前需要配置一下DEBUG,使用JLINK下載
錯誤解釋:
如果遇到如下錯誤:
可以點擊小魔術棒->DEBUG->選擇下載器那里點Setting設置如下:
step2:
之后燒入程序仿真,實物圖如下:
二、基於Proteus的51單片機的程序設計及仿真
該程序是本人設計的一個交通信號燈,基本設計思路如下:
通過全局變量來存時間,采用T0來定時,采用方式1,每100ms發一個脈沖,用T1來計數。,專門用一個函數來現實兩位數碼管的計數,
通過程序設計實現了當東西方向是紅燈時,南北方向為綠燈,LED來倒計時,當綠燈剩3s時變為黃燈;紅燈到0s時直接變為綠燈。實現交通信號燈的要求。
程序代碼如下(只展示部分):
生成hex文件,燒入proteus中已經連接好的51單片機中,並開始運行。運行結果如下:
總結:
首先感謝正點原子,其stm32相關資料對本人學習stm32提供了很大幫助。stm32不同於51單片機,更為復雜的引腳,更加繁瑣的封裝等都是初學者必須面臨挑戰。從一個跑馬燈起步,開始stm32之旅吧!大家一起學習,共同進步。