咱們的開源宗旨:自由 協調 開放 合做 共享git
擁抱開源,豐富國內開源生態,開展多人運動,歡迎加入咱們哈~github
和一羣志同道合的人,作本身所熱愛的事!數組
項目開源地址:https://github.com/Cai-Zi/STM32_RC_Transmitterapp
QQ交流羣:1091996634 【密碼:J20】框架
這篇文章一方面是爲了方便初學者閱讀修改程序,另外一方面是便於團隊成員快速瞭解程序框架,作到心中有數。函數
受限於篇幅,這裏只是對程序作一個簡要的介紹,要作更深刻的瞭解仍是要通讀源代碼的,畢竟數千行代碼沒法一五一十地講解。工具
keil默認的主題是白色的,比較傷眼且不美觀。優化
先來看美化後的效果,黑色的主題看起來舒服多了~編碼
下載文件 https://files.cnblogs.com/files/cai-zi/global.zip,解壓後獲得global.prop文件;spa
將其複製到keil5安裝目錄(筆者的是D:\Keil_v5\MDK\UV4\global.prop),重啓keil便可。
工具欄中點擊魔法棒圖標,選擇Debug窗口,選擇下載器爲ST-Link Debugger;
將ST-Link V2下載器與STM32鏈接,USB端鏈接電腦。
GND 電源地
3V3 接3.3v
SWCLK 接DCLK
SWDIO 接DIO
每次修改完程序,須要先編譯,經過後再點擊序號3圖標,進入調試。
在行數旁邊點擊鼠標左鍵,打斷點,而後點擊序號2圖標,運行程序,程序會在斷點處中止;
此時可查看程序運行的時長,各個變量當前的值等等。
有時候變量結構過於複雜,而且想要實時查看,不適合經過串口輸出,這時就要用調試手段了。
完成第2步操做,進入調試後,選擇某個變量名(以PWMvalue數組爲例),點擊鼠標右鍵,如圖選擇,便可在Watch1中查看變量。
GPIO的狀態其實是由寄存器控制的,因此查看對應的寄存器的值就能夠了,這裏以PC13的高低電平爲例。
完成第2步操做,進入調試後,如圖選擇。
先運行程序至斷點。選擇ODR13,勾選表明寄存器的數值爲1,未勾選爲0。
勾選與否可以控制LED燈的亮滅,能夠嘗試一下哈~
選擇函數名或者變量名,按F12便可快速到達其定義的位置。
打開.h文件方法以下:
設置GPIO爲模擬輸入,應先查看芯片數據手冊的引腳定義,看是否支持ADC。
使用有限狀態機識別按鈕的短按、長按,這樣作能夠避免延時消抖帶來的阻塞問題,具體可參考筆者的這篇博客 https://blog.csdn.net/weixin_42268054/article/details/107393669
若要添加按鈕,在key.h文件中增長按鈕名(寫在KEY_NUM以前),在key.c文件中添加初始化程序。
中斷服務程序裏面只進行變量的讀寫操做,不要添加耗時的程序!
使用上升沿觸發中斷,在中斷服務程序裏面檢測旋轉方向,而旋轉編碼器的按鈕則看成普通的按鍵處理。
先捋一捋這三個概念:
FLASH閃存(程序存儲空間)是C程序的存儲位置。
SRAM是程序在運行時建立和操縱變量的地方。
EEPROM是能夠用來存儲長期信息的存儲空間。
FLASH和EEPROM存儲器是非易失性的(電源關閉後該信息仍然存在),SRAM是易失性的,重啓後會丟失。(FLASH閃存存儲器(PROGMEM)只能在程序刻錄時填充。程序開始運行後,您將沒法更改閃存中的值。)
因爲STM32F103C8T6芯片中只有64k的FLASH,而沒有EEPROM,因此咱們使用FLASH的最後1頁(64k分紅了64頁,因此1頁是1k字節的存儲空間)來永久存儲數據。
咱們把用戶數據都存儲在了setData結構體中,程序開始運行時,從最後一頁的地址中讀取對應字節至setData結構體中,就能夠獲取到用戶數據了。
每次用戶更改數據,直接修改setData結構體的變量值,再將結構體寫入寄存器便可。
如圖兩行代碼實現以上操做。
注意程序的總大小不能超過63k字節,即Code+RO Data+RW Data會燒錄進FLASH中,18140+9468+2124=29732(再除以1024,約29k)
程序運行的時候:RW Data + ZI Data。
一樣使用狀態機的思想,定義結構體以下,其中最後一個函數指針便是要顯示的界面函數。
OLED屏幕每個界面都對應着一個顯示函數,也擁有惟一的索引值(這裏是0-13),可繼續擴充。
具體可參考筆者這篇博客:https://blog.csdn.net/weixin_42268054/article/details/107613192
首先感謝項目中全部的貢獻者!(截止2020.08.20)
* 蔡子CaiZi(B站up主) https://space.bilibili.com/349576976
* A-XIN;
* 小何;
* ZL_Studio(B站up主)https://space.bilibili.com/364251289
* 王每天@WangTiantian139 https://wangtiantian139.github.io/
* 劉桶桶;
* 簡繁;
* 王博;
* 與非門;
* Talons;
* 大米粥;
* P a S S ||;特別感謝正點原子提供的STM32例程和開源社區http://www.openedv.com/
因爲筆者學業繁忙,時間有限,沒法投入過多的精力,因此歡迎更多學有餘力的模友,加入到項目的開發和維護工做中哈,如今基礎的程序框架已經搭建完成,剩下的要作的就是填充、優化和擴展了,有意願的模友加羣后請私聊羣主喔~
QQ交流羣:1091996634 【密碼:J20】
本文歡迎轉載,請註明出處哈~