目錄
- STC8H開發(一): 在Keil5中配置和使用FwLib_STC8封裝庫(圖文詳解)
- STC8H開發(二): 在Linux VSCode中配置和使用FwLib_STC8封裝庫(圖文詳解)
- STC8H開發(三): 基於FwLib_STC8的模數轉換ADC介紹和演示用例說明
- STC8H開發(四): FwLib_STC8 封裝庫的介紹和使用注意事項
- STC8H開發(五): SPI驅動nRF24L01無線模塊
- STC8H開發(六): SPI驅動ADXL345三軸加速度檢測模塊
- STC8H開發(七): I2C驅動MPU6050三軸加速度+三軸角速度檢測模塊
- STC8H開發(八): NRF24L01無線傳輸音頻(對講機原型)
- STC8H開發(九): STC8H8K64U模擬USB HID外設
- STC8H開發(十): SPI驅動Nokia5110 LCD(PCD8544)
- STC8H開發(十一): GPIO單線驅動多個DS18B20數字溫度計
- STC8H開發(十二): I2C驅動AT24C08,AT24C32系列EEPROM存儲
- STC8H開發(十三): I2C驅動DS3231高精度實時時鍾芯片
- STC8H開發(十四): I2C驅動RX8025T高精度實時時鍾芯片
- STC8H開發(十五): GPIO驅動Ci24R1無線模塊
- STC8H開發(十六): GPIO驅動XL2400無線模塊
介紹
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封裝庫中, 大量使用宏語句對寄存器操作進行封裝, 並且控制方法間的層級調用深度, 有效節省了固件體積和堆棧占用.
以下介紹在Windows下Keil55開發環境的搭建
配置Keil5開發環境運行演示用例
前提
- 已經安裝完成Keil5, 並配置好STC的插件, 如果未完成, 請自行搜索網上的教程和說明
- (可選)本機安裝了Git並且可以在命令行下使用git命令
1. 創建項目目錄
在文件瀏覽器中, 創建項目目錄, 建議目錄路徑中不要有中文和空格, 例如本例使用路徑
2. 創建Keil5項目
打開Keil5, 點擊 Project -> New uVision Project, 在彈出的對話框中, 選擇剛才創建的目錄, 填入項目名稱, 點擊保存
3. 選擇MCU型號
剛才的保存點擊后, 會彈出MCU選擇對話框, 在里面選擇STC MCU Database,
在下面的列表中選擇自己型號的那款, 點擊OK保存. 如果沒有完全匹配的型號, 則選擇同樣系列中, 內存數量一致的型號, 例如我使用的是STC8H3K32S2, 在列表中沒有此項, 就選用同樣是STC8H系列3K內存的STC8H3K64S4
會彈出一個對話框問是否復制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 https://github.com/IOsetting/FwLib_STC8.git FwLib_STC8
# 或者giteee
git clone https://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保存
可以看到, 剛才添加的文件都已經出現在項目樹結構中
9. 在Keil5中對項目進行配置
直接對剛才的項目結構進行編譯是不行的, 還需要配置一下環境變量, 通過菜單點開Project -> Options for Target ... , 或者直接從圖標欄點擊項目選項圖標
打開選項對話框
如上圖, 選中C51標簽頁, 在"2"標識的輸入框中, 輸入
__CX51__, __CONF_MCU_MODEL=MCU_MODEL_STC8H3K32S2,__CONF_FOSC=36864000UL
對上面各項的說明
__CX51__
是將當前編譯環境配置為C51__CONF_MCU_MODEL
, 這里設置對應的MCU型號, 當前使用的型號為MCU_MODEL_STC8H3K32S2
, 如果你的芯片不是這個, 需要修改成對應的型號, 具體的型號可以在FwLib_STC8/include/fw_conf.h中查找. 注: STC8G只列了大型號, 只需要填大型號即可.__CONF_FOSC
是這個程序運行時將使用的振盪頻率, 取決於你用STC-ISP燒錄時會用什么頻率, 在這里填入對應的數字, 最后的UL
代表這個數字是無符號長整數
然后點擊"3", 在彈出的對話框中, 選中FwLib_STC8/include 目錄, 這里是配置封裝庫的頭文件路徑.
配置完成后,
再選中Output標簽頁, 在上面勾選 Create HEX File, 這一步是為了編譯后生成用於燒錄的hex文件
上面完成后, 點擊OK保存
10. 調整代碼並編譯
因為Windows下使用STC-ISP可以直接設置時鍾頻率, 所以代碼中不需要對MCU時鍾進行調整, 這里要打開樣例的代碼, 如下圖所示, 將SYS_SetClock();
這行注釋掉, 或刪掉, 然后保存文件
點擊"3"標識的按鈕編譯項目, 如果要完整編譯, 按右邊的按鈕, 平時用左邊的按鈕就可以, 或者使用快捷鍵F7
因為封裝庫中很多方法未使用, 編譯會提示warning, 這些可以忽略, 只要Errors數量為0
11. 用STC-ISP燒錄
在STC-ISP中選中對應的芯片信號, 點擊"打開程序文件", 選中剛才生成的hex文件, 文件位置在項目的Objects目錄下. 然后點擊"下載/編程", 給芯片重新上電后, 就會下載並運行.
12. 觀察串口輸出
使用任意串口工具, 使用波特率115200連接對應的串口, 可以看到間隔1秒輸出的"T40UString".
13. 運行其他用例
如果需要運行其他用例, 將剛才的用例文件從項目樹中移除, 再按照前面的流程, 重新添加其他的用例文件就可以了.
也可以自行創建文件編寫代碼
問題和說明
警告"WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS"
出現這種錯誤是因為封裝庫中未使用的函數, 可以忽略, 如果不希望再顯示這類的警告, 可以通過以下配置:
- 通過菜單點開Project -> Options for Target ...
- 切換到 BL51 Misc 標簽頁
- 在 Warnings, Disable Warning Numbers 中填入
16
- 點擊 OK 保存
再運行, 就不會報 L16 的警告了
錯誤"ERROR L107: ADDRESS SPACE OVERFLOW"
出現這種錯誤, 是因為設置的內存空間不夠了, 在 Keil 里面需要設置成 PDATA 或 XDATA, 通過以下配置:
- 通過菜單點開Project -> Options for Target ...
- 切換到 Target 標簽頁
- 在 Memory Model 中, 選擇 Compact: variables in PDATA 或者 Large: variables in XDATA
- 點擊 OK 保存
PDATA是256字節, XDATA的空間是最大的, 例如STC8H3K32S2有3K內存, XDATA的空間就是3K字節, 但是訪問XDATA 比PDATA慢.
訪問XDATA慢的原因: 1)需要通過MOVX訪問, 2)地址是16bit因此准備地址也需要多使用一個時鍾
結束
以上就是針對Keil5環境, 使用FwLib_STC8封裝庫進行環境配置和運行演示用例的說明, 如果有問題請留言