STC8H開發(一): 在Keil5中配置和使用FwLib_STC8封裝庫(圖文詳解)

介紹

FwLib_STC8 是一個針對STC8G, STC8H系列MCU的C語言封裝庫, 適用於基於這些MCU的快速原型驗證.

為避免之前STC12封裝庫存在的問題, 這個封裝庫在以下方面進行了改進

  1. 兼容SDCC和Keil C51
    FwLib_STC12封裝庫只支援SDCC編譯, 並且暫存器命名與官方不同, 使得基於FwLib_STC12的項目程式碼與其他Keil開發的項目程式碼無法兼容. 在FwLib_STC8的開發上, 採用了與官方庫文件一致的命名, 並且增加了對Keil C51和SDCC的適配. 基於FwLib_STC8的項目, 可以在Linux下使用SDCC編譯, 也可以在Windows下使用Keil C51環境進行編譯.
  2. 減小程式碼尺寸
    FwLib_STC12封裝庫較多取樣函數方式對暫存器進行封裝, 而函數與函數間的層級調用都會增加棧開支, 這樣一方面容易對8位MCU的記憶體造成佔用, 另一方面增加了韌體尺寸. 在FwLib_STC8封裝庫中, 儘可能使用宏的方式對暫存器操作進行封裝, 控制方法間的層級調用深度, 相比較FwLib_STC12, 在韌體體積和堆棧佔用上有很大提升.

以下介紹在Windows下Keil55開發環境的搭建

配置Keil5開發環境運行演示用例

前提:

  1. 已經安裝完成Keil5, 並配置好STC的插件, 如果未完成, 請自行搜索網上的教程和說明
  2. 本機安裝了Git並且可以在命令行下使用git命令,
  3. 如果無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__ 是將當前編譯環境配置為C51
  • MCU_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封裝庫進行環境配置和運行演示用例的說明, 如果有問題請留言