STC8H開發(一): 在Keil5中配置和使用FwLib_STC8封裝庫(圖文詳解)
- 2022 年 1 月 5 日
- 筆記
- FwLib_STC8, MCS-51, Mobile/Embed, STC8G, STC8H
介紹
FwLib_STC8 是一個針對STC8G, STC8H系列MCU的C語言封裝庫, 適用於基於這些MCU的快速原型驗證.
- 項目地址: Gitee FwLib_STC8
- 鏡像地址: GitHub FwLib_STC8
為避免之前STC12封裝庫存在的問題, 這個封裝庫在以下方面進行了改進
- 兼容SDCC和Keil C51
FwLib_STC12封裝庫只支援SDCC編譯, 並且暫存器命名與官方不同, 使得基於FwLib_STC12的項目程式碼與其他Keil開發的項目程式碼無法兼容. 在FwLib_STC8的開發上, 採用了與官方庫文件一致的命名, 並且增加了對Keil C51和SDCC的適配. 基於FwLib_STC8的項目, 可以在Linux下使用SDCC編譯, 也可以在Windows下使用Keil C51環境進行編譯. - 減小程式碼尺寸
FwLib_STC12封裝庫較多取樣函數方式對暫存器進行封裝, 而函數與函數間的層級調用都會增加棧開支, 這樣一方面容易對8位MCU的記憶體造成佔用, 另一方面增加了韌體尺寸. 在FwLib_STC8封裝庫中, 儘可能使用宏的方式對暫存器操作進行封裝, 控制方法間的層級調用深度, 相比較FwLib_STC12, 在韌體體積和堆棧佔用上有很大提升.
以下介紹在Windows下Keil55開發環境的搭建
配置Keil5開發環境運行演示用例
前提:
- 已經安裝完成Keil5, 並配置好STC的插件, 如果未完成, 請自行搜索網上的教程和說明
- 本機安裝了Git並且可以在命令行下使用git命令,
- 如果無git, 則需要有zip解壓工具
1. 創建項目目錄
在文件瀏覽器中, 創建項目目錄, 建議目錄路徑中不要有中文和空格, 例如本例使用路徑
2. 創建Keil5項目
打開Keil5, 點擊 Project -> New uVision Project, 在彈出的對話框中, 選擇剛才創建的目錄, 填入項目名稱, 點擊保存
3. 選擇MCU型號
剛才的保存點擊後, 會彈出MCU選擇對話框, 在裡面選擇STC MCU Database,
在下面的列表中選擇最接近自己型號的那款, 點擊OK保存
會彈出一個對話框問是否複製STARTUP.A51, 點Yes
4. Keil5 項目結構
Keil5項目就已經創建完成, 這時候其實就已經可以添加官方的頭文件, 直接用暫存器進行開發了
項目的目錄結構為
stc8h_demo/
|
│ STARTUP.A51
│ stc8h_demo.uvproj
├─Listings
└─Objects
5. 下載FwLib_STC8
可以通過git clone導出項目程式碼, 或者直接下載zip包解壓
方式一: 通過git導出
在命令行下執行
# github
git clone //github.com/IOsetting/FwLib_STC8.git FwLib_STC8
# 或者giteee
git clone //gitee.com/iosetting/fw-lib_-stc8.git FwLib_STC8
方式二: 下載zip包後解壓
訪問這篇文章頂部的項目鏈接, 在頁面上, 點擊”克隆/下載” 下載ZIP, 並解壓成目錄
6. 將FwLib_STC8放入項目目錄
將上一步得到的目錄, 複製到Keil5項目的目錄下, 複製完成後的項目目錄結構如下
stc8h_demo/
|
│ STARTUP.A51
│ stc8h_test003.uvproj
├─FwLib_STC8
│ ├─demo
│ ├─include
│ └─src
├─Listings
└─Objects
7. 在Keil5中添加封裝庫庫
通過菜單點開Project -> Manage -> Project Items, 或者直接從圖標欄點擊對應的圖標,
打開文件管理對話框, 在Groups中增加一項, 名稱”FwLib_STC8″, 這個可以根據需要自己改成別的名稱也可以, 點中這個新增加的Group, 在右側那列點擊下面的Add Files, 會彈出一個文件選擇對話框
在文件選擇對話框中瀏覽到FwLib_STC8\src, 全選全部c文件(可以使用Ctrl+A), 點Add, 然後點Close,
可以看到文件都已經添加進來了
8. 在Keil5中添加演示用例
保持上一步的窗口不動, 點擊選中Source Group 1, 在右側那列點擊下面的Add Files, 會彈出一個文件選擇對話框
瀏覽到 FwLib_STC8\demo\uart, 選中uart1_timer1_tx.c, 這是一個用定時器1做波特率的串口1測試樣例
添加之後, 可以看到增加了對應的文件, 點擊OK保存
可以看到, 剛才添加的文件都已經出現在項目樹結構中
8. 在Keil5中對項目進行配置
直接對剛才的項目結構進行編譯是不行的, 還需要配置一下環境變數, 通過菜單點開Project -> Options for Target … , 或者直接從圖標欄點擊項目選項圖標
打開選項對話框
如上圖, 選中C51標籤頁, 在”2″標識的輸入框中, 輸入
__CX51__, __CONF_MCU_MODEL=MCU_MODEL_STC8H3K32S2,__CONF_FOSC=36864000UL
對上面各項的說明
__CX51__
是將當前編譯環境配置為C51MCU_MODEL_STC8H3K32S2
是對應的MCU型號, 如果你的晶片不是這個, 需要修改成對應的型號, 具體的型號可以在FwLib_STC8/include/fw_conf.h中查找__CONF_FOSC
是這個程式運行時將使用的振蕩頻率, 取決於你用STC-ISP燒錄時會用什麼頻率, 在這裡填入對應的數字, 最後的UL
代表這個數字是無符號長整數
然後點擊”3″, 在彈出的對話框中, 選中FwLib_STC8/include 目錄, 這裡是配置封裝庫的頭文件路徑.
配置完成後,
再選中Output標籤頁, 在上面勾選 Create HEX File, 這一步是為了編譯後生成用於燒錄的hex文件
上面完成後, 點擊OK保存
9. 調整程式碼並編譯
因為Windows下使用STC-ISP可以直接設置時鐘頻率, 所以程式碼中不需要對MCU時鐘進行調整, 這裡要打開樣例的程式碼, 如下圖所示, 將SYS_SetClock();
這行注釋掉, 或刪掉, 然後保存文件
點擊”3″標識的按鈕編譯項目, 如果要完整編譯, 按右邊的按鈕, 平時用左邊的按鈕就可以, 或者使用快捷鍵F7
因為封裝庫中很多方法未使用, 編譯會提示warning, 這些可以忽略, 只要Errors數量為0
10. 用STC-ISP燒錄
在STC-ISP中選中對應的晶片訊號, 點擊”打開程式文件”, 選中剛才生成的hex文件, 文件位置在項目的Objects目錄下. 然後點擊”下載/編程”, 給晶片重新上電後, 就會下載並運行.
11. 觀察串口輸出
使用任意串口工具, 使用波特率115200連接對應的串口, 可以看到間隔1秒輸出的”T40UString”.
運行其他用例
如果需要運行其他用例, 將剛才的用例文件從項目樹中移除, 再按照前面的流程, 重新添加其他的用例文件就可以了.
也可以自行創建文件編寫程式碼
結束
以上就是針對Keil5環境, 使用FwLib_STC8封裝庫進行環境配置和運行演示用例的說明, 如果有問題請留言