找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5890|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

在Keil5中使用FwLib_STC8封裝庫(kù)開發(fā)STC8G/8H(圖文詳解)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
介紹
FwLib_STC8 是一個(gè)針對(duì)STC8G, STC8H系列MCU的C語(yǔ)言封裝庫(kù), 適用于基于這些MCU的快速原型驗(yàn)證.
* 項(xiàng)目地址: [Gitee FwLib_STC8] https://gitee.com/iosetting/fw-lib_-stc8
* 鏡像地址: [GitHub FwLib_STC8]https://github.com/IOsetting/FwLib_STC8

為避免之前STC12封裝庫(kù)存在的問(wèn)題, 這個(gè)封裝庫(kù)在以下方面進(jìn)行了改進(jìn)
1. 兼容SDCC和Keil C51   FwLib_STC12封裝庫(kù)只支持SDCC編譯, 并且寄存器命名與官方不同, 使得基于FwLib_STC12的項(xiàng)目代碼與其他Keil開發(fā)的項(xiàng)目代碼無(wú)法兼容. 在FwLib_STC8的開發(fā)上, 采用了與官方庫(kù)文件一致的命名, 并且增加了對(duì)Keil C51和SDCC的適配. 基于FwLib_STC8的項(xiàng)目, 可以在Linux下使用SDCC編譯, 也可以在Windows下使用Keil C51環(huán)境進(jìn)行編譯.
2. 減小代碼尺寸   FwLib_STC12封裝庫(kù)較多使用函數(shù)的方式對(duì)寄存器進(jìn)行封裝, 而函數(shù)與函數(shù)間的層級(jí)調(diào)用都會(huì)增加棧開支, 這樣一方面8位MCU本來(lái)就不多的內(nèi)存更加捉襟見肘, 另一方面增加了生成的固件尺寸. 在FwLib_STC8封裝庫(kù)中, 大量使用宏語(yǔ)句對(duì)寄存器操作進(jìn)行封裝, 并且控制方法間的層級(jí)調(diào)用深度, 有效節(jié)省了固件體積和堆棧占用.

以下介紹在Windows下Keil55開發(fā)環(huán)境的搭建

前提

1. 已經(jīng)安裝完成Keil5, 并配置好STC的插件, 如果未完成, 請(qǐng)自行搜索網(wǎng)上的教程和說(shuō)明
2. (可選)本機(jī)安裝了Git并且可以在命令行下使用git命令

1. 創(chuàng)建項(xiàng)目目錄

在文件瀏覽器中, 創(chuàng)建項(xiàng)目目錄, 建議目錄路徑中不要有中文和空格, 例如本例使用路徑


2. 創(chuàng)建Keil5項(xiàng)目

打開Keil5, 點(diǎn)擊 Project -> New uVision Project, 在彈出的對(duì)話框中, 選擇剛才創(chuàng)建的目錄, 填入項(xiàng)目名稱, 點(diǎn)擊保存


3. 選擇MCU型號(hào)

剛才的保存點(diǎn)擊后, 會(huì)彈出MCU選擇對(duì)話框, 在里面選擇STC MCU Database,


在下面的列表中選擇自己型號(hào)的那款, 點(diǎn)擊OK保存. 如果沒有完全匹配的型號(hào), 則選擇同樣系列中, 內(nèi)存數(shù)量一致的型號(hào), 例如我使用的是STC8H3K32S2, 在列表中沒有此項(xiàng), 就選用同樣是STC8H系列3K內(nèi)存的STC8H3K64S4


會(huì)彈出一個(gè)對(duì)話框問(wèn)是否復(fù)制STARTUP.A51,  點(diǎn)Yes


4. Keil5 項(xiàng)目結(jié)構(gòu)

Keil5項(xiàng)目就已經(jīng)創(chuàng)建完成, 這時(shí)候其實(shí)就已經(jīng)可以添加官方的頭文件, 直接用寄存器進(jìn)行開發(fā)了


項(xiàng)目的目錄結(jié)構(gòu)為

  1. stc8h_demo/
  2. |
  3. │  STARTUP.A51
  4. │  stc8h_demo.uvproj
  5. ├─Listings
  6. └─Objects
復(fù)制代碼

5. 下載FwLib_STC8


可以通過(guò)git clone導(dǎo)出項(xiàng)目代碼, 或者直接下載zip包解壓

**方式一: 通過(guò)git導(dǎo)出**  
在命令行下執(zhí)行
  1. # github
  2. git clone https://github.com/IOsetting/FwLib_STC8.git FwLib_STC8
  3. # 或者giteee
  4. git clone https://gitee.com/iosetting/fw-lib_-stc8.git FwLib_STC8
復(fù)制代碼


**方式二: 下載zip包后解壓**
訪問(wèn)這篇文章頂部的項(xiàng)目鏈接, 在頁(yè)面上, 點(diǎn)擊"克隆/下載" 下載ZIP, 并解壓成目錄

6. 將FwLib_STC8放入項(xiàng)目目錄

將上一步得到的目錄, 復(fù)制到Keil5項(xiàng)目的目錄下, 復(fù)制完成后的項(xiàng)目目錄結(jié)構(gòu)如下
  1. stc8h_demo/
  2. |
  3. │  STARTUP.A51
  4. │  stc8h_test003.uvproj
  5. ├─FwLib_STC8
  6. │  ├─demo
  7. │  ├─include
  8. │  └─src
  9. ├─Listings
  10. └─Objects
復(fù)制代碼

在文件系統(tǒng)中的目錄列表


7. 在Keil5中添加封裝庫(kù)庫(kù)

通過(guò)菜單點(diǎn)開Project -> Manage -> Project Items, 或者直接從圖標(biāo)欄點(diǎn)擊對(duì)應(yīng)的圖標(biāo),
  

打開文件管理對(duì)話框, 在Groups中增加一項(xiàng), 名稱"FwLib_STC8", 這個(gè)可以根據(jù)需要自己改成別的名稱也可以, 點(diǎn)中這個(gè)新增加的Group, 在右側(cè)那列點(diǎn)擊下面的Add Files, 會(huì)彈出一個(gè)文件選擇對(duì)話框


在文件選擇對(duì)話框中瀏覽到FwLib_STC8\src, 全選全部c文件(可以使用Ctrl+A), 點(diǎn)Add, 然后點(diǎn)Close,
  

可以看到文件都已經(jīng)添加進(jìn)來(lái)了


8. 在Keil5中添加演示用例

保持上一步的窗口不動(dòng), 點(diǎn)擊選中Source Group 1, 在右側(cè)那列點(diǎn)擊下面的Add Files, 會(huì)彈出一個(gè)文件選擇對(duì)話框


瀏覽到 FwLib_STC8\demo\uart, 選中uart1_timer1_tx.c, 這是一個(gè)用定時(shí)器1做波特率時(shí)鐘源的串口1測(cè)試樣例


添加之后, 可以看到增加了對(duì)應(yīng)的文件, 點(diǎn)擊OK保存


可以看到, 剛才添加的文件都已經(jīng)出現(xiàn)在項(xiàng)目樹結(jié)構(gòu)中


9. 在Keil5中對(duì)項(xiàng)目進(jìn)行配置

直接對(duì)剛才的項(xiàng)目結(jié)構(gòu)進(jìn)行編譯是不行的, 還需要配置一下環(huán)境變量, 通過(guò)菜單點(diǎn)開Project -> Options for Target ... , 或者直接從圖標(biāo)欄點(diǎn)擊項(xiàng)目選項(xiàng)圖標(biāo)


打開選項(xiàng)對(duì)話框


如上圖, 選中C51標(biāo)簽頁(yè), 在"2"標(biāo)識(shí)的輸入框中, 輸入
  1. __CX51__, __CONF_MCU_MODEL=MCU_MODEL_STC8H3K32S2,__CONF_FOSC=36864000UL
復(fù)制代碼

對(duì)上面各項(xiàng)的說(shuō)明
* `__CX51__` 是將當(dāng)前編譯環(huán)境配置為C51
* `__CONF_MCU_MODEL`, 這里設(shè)置對(duì)應(yīng)的MCU型號(hào), 當(dāng)前使用的型號(hào)為`MCU_MODEL_STC8H3K32S2`, 如果你的芯片不是這個(gè), 需要修改成對(duì)應(yīng)的型號(hào), 具體的型號(hào)可以在FwLib_STC8/include/fw_conf.h中查找. 注: STC8G只列了大型號(hào), 只需要填大型號(hào)即可.
* `__CONF_FOSC` 是這個(gè)程序運(yùn)行時(shí)將使用的振蕩頻率, 取決于你用STC-ISP燒錄時(shí)會(huì)用什么頻率, 在這里填入對(duì)應(yīng)的數(shù)字, 最后的`UL`代表這個(gè)數(shù)字是無(wú)符號(hào)長(zhǎng)整數(shù)

然后點(diǎn)擊"3", 在彈出的對(duì)話框中, 選中FwLib_STC8/include 目錄, 這里是配置封裝庫(kù)的頭文件路徑.
  

配置完成后,
  

再選中Output標(biāo)簽頁(yè), 在上面勾選 Create HEX File, 這一步是為了編譯后生成用于燒錄的hex文件


上面完成后, 點(diǎn)擊OK保存

10. 調(diào)整代碼并編譯

因?yàn)閃indows下使用STC-ISP可以直接設(shè)置時(shí)鐘頻率, 所以代碼中不需要對(duì)MCU時(shí)鐘進(jìn)行調(diào)整, 這里要打開樣例的代碼, 如下圖所示, 將`SYS_SetClock();`這行注釋掉, 或刪掉, 然后保存文件


點(diǎn)擊"3"標(biāo)識(shí)的按鈕編譯項(xiàng)目, 如果要完整編譯, 按右邊的按鈕, 平時(shí)用左邊的按鈕就可以, 或者使用快捷鍵`F7`


因?yàn)榉庋b庫(kù)中很多方法未使用, 編譯會(huì)提示warning, 這些可以忽略, 只要Errors數(shù)量為0

11. 用STC-ISP燒錄

STC-ISP中選中對(duì)應(yīng)的芯片信號(hào), 點(diǎn)擊"打開程序文件", 選中剛才生成的hex文件, 文件位置在項(xiàng)目的Objects目錄下. 然后點(diǎn)擊"下載/編程", 給芯片重新上電后, 就會(huì)下載并運(yùn)行.

12. 觀察串口輸出

使用任意串口工具, 使用波特率115200連接對(duì)應(yīng)的串口, 可以看到間隔1秒輸出的"T40UString".

13. 運(yùn)行其他用例

如果需要運(yùn)行其他用例, 將剛才的用例文件從項(xiàng)目樹中移除, 再按照前面的流程, 重新添加其他的用例文件就可以了.


也可以自行創(chuàng)建文件編寫代碼

結(jié)束

以上就是針對(duì)Keil5環(huán)境, 使用FwLib_STC8封裝庫(kù)進(jìn)行環(huán)境配置和運(yùn)行演示用例的說(shuō)明, 如果有問(wèn)題請(qǐng)留言


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:319585 發(fā)表于 2022-1-7 19:36 來(lái)自手機(jī) | 只看該作者
這個(gè)感覺不錯(cuò),應(yīng)該比直接用要簡(jiǎn)單一些吧。
回復(fù)

使用道具 舉報(bào)

板凳
ID:915491 發(fā)表于 2022-6-19 08:33 | 只看該作者
太實(shí)用了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表