網頁最後修改時間:2020/08/28
從[1.1]網頁,開始說明如何以 Silicon Labs 的 EFM8 系列晶片(EFM8BB21F16G-QFN20)為主角,撰寫如何建置 8-bit Microcontrollers 的開發環境、如何建立專案以及如何進行韌體燒錄一系列的網頁。
此系列包含:
- Silicon Labs Simplicity Studio 8-bit Microcontrollers 開發環境建置;
主要說明在 Simplicity Studio 建置 Silicon Labs 8-bit Microcontrollers 開發環境時所需要的軟體的下載和安裝。 - Keil C51 的 Silicon Labs C8051 / EFM8 開發環境建置;
主要說明在 Keil µVision 建置 Silicon Labs 8-bit Microcontrollers 開發環境時所需要的軟體的下載和安裝。 - 如何建立一個 Simplicity Studio 專案檔;
- 如何匯入、修改和編譯官方(或既有的)Simplicity Studio v4 專案範例;
說明如何匯入已有的 Simplicity Studio 專案檔,進行編譯和修改。 - Simplicity Studio v4 全新專案建置範例;
說明如何從頭建置一個新的 Simplicity Studio v4 專案檔。 - 如何匯入 Simplicity Studio v4 專案檔至 Keil C51;說明如何匯入 Simplicity Studio v4 專案檔至 Keil C51,進行編譯和修改。
- 離線與 ISP(UART)燒錄;
燒錄 .hex 檔的說明,和使用 ISP(UART)燒錄韌體的方法。
從[2.1.1]開始,連續三篇的網頁,都會用來說明 EFM8BB21F16G-QFN20 這顆晶片韌體專案的建立步驟和方法。而這一篇,是針對 Simplicity Studio v4 全新專案建立的步驟做說明。
EFM8BB21F16G-QFN20 Package Marking(not included bee icon) |
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
本篇的專案檔,請依照此篇的說明自行建置,所需要的程式碼已附在網頁中。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
*********************************************************************************
網頁所用到的開發板與燒錄模擬器:
*********************************************************************************
經過 1.1 Silicon Labs Simplicity Studio 8-bit Microcontrollers 開發環境建置 裡軟體安裝的說明,想必 Simplicity Studio v4 已經完成安裝,現在開始準備要進行 EFM8BB21F16G-QFN20 韌體專案的建立。
我將 Simplicity Studio v4 專案檔的建立分為兩個單元做說明:第一個,是以如何匯入既有的 Simplicity Studio v4 專案為主題,來說明匯入的步驟;第二個,則是以如何建立一個全新的 Simplicity Studio v4 專案為主題,從頭開始來說明建立的步驟。這兩個部分的差異不多,只有前面幾個步驟不同而已,後面的步驟就都很雷同了。
每個單元為了解講的方便,再細分為下面幾個小部份:
- 如何匯入、修改和編譯官方(或既有的)SSv4 專案範例;
- 匯入專案檔;
- 變更晶片型號;
- 創建新的硬體組態檔(.hwconf);
- 修改硬體組態檔;
- 韌體一鍵燒錄;
- EFB8BB2_ExternalInterrupts 韌體測試;
- Simplicity Studio v4 全新專案建置範例;
- 建立新專案;
- 修改硬體組態檔;
- 撰寫程式碼;
- 韌體一鍵燒錄;
- EFM8BB21F16G-C-QFN2-_Demo01 韌體測試;
- an1160-project-collaboration-with-simplicity-studio.pdf;
- AN0821: Simplicity Studio™ C8051F85x Walkthrough.pdf;
開始之前,先建立幾個縮寫字:
- SSv4:代表 Simplicity Studio v4 軟體;
- {SilabsSSv4}:代表 Simplicity Studid v4 安裝的目錄;
【Simplicity Studio v4 全新專案建置範例】
如果有看過前一篇網頁,相信這一篇也會很容易就能了解。只有前面建置專案的幾個步驟不同而已,後面就都差不多的步驟了。
這個專案參考
{SilabsSSv4}\D:\SiliconLabs\SimplicityStudio\v4\developer\sdks\8051\v4.1.7\examples\EFM8BB2_SLSTK2021A\UART\STDIO 這個範例資料夾,都是提示用戶輸入一個字元,然後把這字元轉換為 16 進位後回應給用戶。
兩者之間所不同的是:前者使用了 retargetserial 函式庫;後者採用 stdio 函式庫的 printf() 函式。
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Create a new SSv4 Project - 建立新專案 :
桌面點擊開啟 "Simplicity Studio",在其選單點選 "Project -> Silicon Labs MCU Project...",打開 "New Silicon Labs Project" 對話視窗。
進行下面的選項設定:
選擇新增的專案型式為何?
點選 🔘 Simplicity Configuration Program,再按 "Next >" 進入到下一個畫面。
專案的名稱和專案儲存的位置,如下做設定:
按 "Next >" 進入到下一個畫面。
建立專案中...
一但完成新建專案後,主畫面變化如下所示。
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Create a new SSv4 Project - 修改硬體組態檔 :
新建專案的同時,也會同時新增一個與專案同名但不同附檔名的硬體組態檔(EFM8BB21F16G-C-QFN2-_Demo01.hwconf)。打開它,切換至 "DefaultMode Peripherals" 頁籤,進行如下的群組設定:
各週邊群組的項目選定後,開始 "DefaultMode Port I/O" 的設定;不用切換中間的頁籤,只要使用右上角 "Outline" 頁籤,就可做下面需要的屬性設定。
點選左上角 "Outline" 頁籤中的 Port I/O,下方會出現它的屬性。
設定 Enable Crossbar 為 Enabled。
改點選左上角 "Outline" 頁籤中的 CROSSBAR0,下方會出現它的屬性。
設定 UART 0 的 Data 為 Enabled。
回到剛剛週邊群組的細項屬性設定。
在 Clocking 群組,點選 Clock Select 後,做如下的屬性設定:
在 Communications 群組,點選 UART 0 後,做如下的屬性設定:
在 Timers 群組,點選 Watchdog Timer 後,做如下的屬性設定:
同樣在 Timers 群組,點選 TIMER Setup 後,做如下的屬性設定:
繼續在 Timers 群組,點選 TIMER 0/1 後,做如下的屬性設定:
切換中間畫面視窗的頁籤到 "DefaultMode Port I/O",然後點選晶片圖示上的 <18/P0.4> 接腳。
<18/P0.4> 接腳是作為 UART 的 TX 用,因此接腳必須設定為輸出。
在主畫面右邊中間的屬性視窗,Settings 的 IOMode 設定為 Digital Push-Pull Output。
改點選晶片圖示上的 <17/P0.5> 接腳。
<17/P0.5> 接腳是作為 UART 的 RX 用,因此接腳必須設定為輸入。
在主畫面右邊中間的屬性視窗,預設 Settings 的 IOMode 已設定為 Digital OpenDrain I/O,所以不需要做任何修改。
到此就完成專案的硬體組態檔的設定。
還記得這個專案所參考的,是原本使用 retargetserial 函式庫來處理 UART 通訊的程式,只不過新建專案時不想沿用,而改用其他的方式來實現。由於新專案使用 UART 0,所以可以直接使用 printf() 的方式來做 UART 的輸出,但若是改用其他的 UART 就可能不適用了。這時就需要自己去處理這些輸入和輸出的字元或字串。
retargetserial 函式庫封裝了這些處裡的細節,要做為學習參考或是直接使用都是不錯的選擇,因此順手介紹這個函式庫,說明要怎麼引入和要到哪裡找。
首先在軟體主畫面左邊,滑鼠右鍵點擊 "Project Explorer" 下專案名稱 EMB8BB21F16G-C-QFN20_Demo01,下拉選單選擇 "Properties"。
開啟專案的屬性視窗後,左邊選擇 "C/C++ Build -> Project Modules",然後在 8051 -> EFM8 -> BSP 下勾選 ☑ Efm8 Retargetserial (v4.1.7.0_-2129476106)。
按 "Apply" 應用變更(或按 "OK" 儲存設定並關閉視窗)。
左邊切換選擇 "C/C++ Build -> Path and Symbols",選擇 Assembly 可以看到 retargetserial 函式庫的路徑已經加入。
之後如果需要修改這些路徑的設定,只要按下 "Edit..." 就會開啟視窗讓用戶做修改。
接著變更選擇 GNU C,同時可以看到 retargetserial 函式庫的路徑也被加入。
按 "OK" 儲存並離開專案屬性設定對話視窗。
一但變更這些路徑,請重新編譯專案,否則就無法反映這些路徑的變更。
按 "Yes" 重新編譯專案。
整個 SSv4 專案規劃就如下圖左邊所示。
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Create a new SSv4 Project - 撰寫程式碼:
請複製下面的程式碼,取代原來的 EFM8BB21F16G-C-QFN2-_Demo01.c 裡面的程式碼。
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Create a new SSv4 Project - 韌體一鍵燒錄:
按下紅色框框處的鐵鎚圖示進行編譯。
鐵鎚旁邊的小按鈕裡面包含兩個選項:"... - debug"和 "... - release" 都可以用來編譯,只不過在不需要做除錯的情況之下,直接採用 "... - release" 選項進行編譯就可以。
如果一切正常,將會輸出類似下面的編譯訊息。
** 請務必在進行燒錄之前將燒錄模擬器與開發板連接好,並插上電腦!
SSv4 軟體主畫面中,按 "Flash Programmer" 開始進行韌體燒錄。
選擇編譯之後產生的 hex 檔(這裡指的就是 EFM8BB21F16G-C-QFN20_Demo01.hex),選定之後的 hex 檔會顯示在 "Flash Progrmmer" 的 File 欄位。
燒錄之前要先清除晶片裡面的韌體資料,所以 "Erase" 要先執行一次,之後如果 "Program" 按鈕不能用,那就關閉後再重啟 "Flash Programmer" 一遍,就能使用。
完成晶片記憶體的擦除之後,按下 "Program" 進行燒錄。
燒錄成功後,按下 Close 關閉視窗,現在可以開始準備硬體測試了!
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Create a new SSv4 Project - EFM8BB21F16G-C-QFN2_Demo01 韌體測試:
要進行韌體測試,請預先好準備 USB 轉 TTL 模組或 USB 轉 RS232 線。如果有看過前一篇網頁,相信這一篇也會很容易就能了解。只有前面建置專案的幾個步驟不同而已,後面就都差不多的步驟了。
這個專案參考
{SilabsSSv4}\D:\SiliconLabs\SimplicityStudio\v4\developer\sdks\8051\v4.1.7\examples\EFM8BB2_SLSTK2021A\UART\STDIO 這個範例資料夾,都是提示用戶輸入一個字元,然後把這字元轉換為 16 進位後回應給用戶。
兩者之間所不同的是:前者使用了 retargetserial 函式庫;後者採用 stdio 函式庫的 printf() 函式。
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Create a new SSv4 Project - 建立新專案 :
桌面點擊開啟 "Simplicity Studio",在其選單點選 "Project -> Silicon Labs MCU Project...",打開 "New Silicon Labs Project" 對話視窗。
Create a new SSv4 Project - 建立新專案 - 01 |
- 選擇 Part: 為 EFM8BB21F16G-C-QFN20;
完成設定後,應該如下圖所示。
按 "Next >" 進入到下一個畫面。
Create a new SSv4 Project - 建立新專案 - 02 |
點選 🔘 Simplicity Configuration Program,再按 "Next >" 進入到下一個畫面。
Create a new SSv4 Project - 建立新專案 - 03 |
- Project name:請命名為 EFM8BB21F16G-C-QFN20_Demo01;
- Location:若要使用預設的位置儲存專案,請務必勾選 ☑ Use default location 選項;否則,按 "Browse..." 選擇要儲存的資料夾位置。
按 "Next >" 進入到下一個畫面。
Create a new SSv4 Project - 建立新專案 - 04 |
Create a new SSv4 Project - 建立新專案 - 05 |
Create a new SSv4 Project - 建立新專案 - 06 |
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Create a new SSv4 Project - 修改硬體組態檔 :
新建專案的同時,也會同時新增一個與專案同名但不同附檔名的硬體組態檔(EFM8BB21F16G-C-QFN2-_Demo01.hwconf)。打開它,切換至 "DefaultMode Peripherals" 頁籤,進行如下的群組設定:
- Clocking:
- 勾選 ☑ Clock Control;
- Communications:
- 勾選 ☑ UART 0;
- Timers:
- 勾選 ☑ Timers;
- 勾選 ☑ Watchdog Timer;
Create a new SSv4 Project - 修改硬體組態檔 - 01 |
點選左上角 "Outline" 頁籤中的 Port I/O,下方會出現它的屬性。
設定 Enable Crossbar 為 Enabled。
Create a new SSv4 Project - 修改硬體組態檔 - 02 |
設定 UART 0 的 Data 為 Enabled。
Create a new SSv4 Project - 修改硬體組態檔 - 03 |
在 Clocking 群組,點選 Clock Select 後,做如下的屬性設定:
- Clock Source Divider 設定為 SYSCLK / 1;
Create a new SSv4 Project - 修改硬體組態檔 - 04 |
- Serial Port Control 的 Enable Receive 設定為 Enabled;
Create a new SSv4 Project - 修改硬體組態檔 - 05 |
- WatchDog Control 的 WDT Enable 設定為 Disable;
Create a new SSv4 Project - 修改硬體組態檔 - 06 |
- Timer 1
- Mode 設定為 Mode 2, 8-bit Counter/Timer with Auto-Reload;
- Clock Source 設定為 Use SYSCLK;
- Timer Switch 1:Run Control 設定為 Start;
Create a new SSv4 Project - 修改硬體組態檔 - 07 |
- Timer 1 Mode 2, 8-bit Counter/Timer with Auto-Reload
- Target Overflow Frequency 設定為 230400 (0x38400);
Create a new SSv4 Project - 修改硬體組態檔 - 08 |
<18/P0.4> 接腳是作為 UART 的 TX 用,因此接腳必須設定為輸出。
在主畫面右邊中間的屬性視窗,Settings 的 IOMode 設定為 Digital Push-Pull Output。
Create a new SSv4 Project - 修改硬體組態檔 - 09 |
<17/P0.5> 接腳是作為 UART 的 RX 用,因此接腳必須設定為輸入。
在主畫面右邊中間的屬性視窗,預設 Settings 的 IOMode 已設定為 Digital OpenDrain I/O,所以不需要做任何修改。
Create a new SSv4 Project - 修改硬體組態檔 - 10 |
還記得這個專案所參考的,是原本使用 retargetserial 函式庫來處理 UART 通訊的程式,只不過新建專案時不想沿用,而改用其他的方式來實現。由於新專案使用 UART 0,所以可以直接使用 printf() 的方式來做 UART 的輸出,但若是改用其他的 UART 就可能不適用了。這時就需要自己去處理這些輸入和輸出的字元或字串。
retargetserial 函式庫封裝了這些處裡的細節,要做為學習參考或是直接使用都是不錯的選擇,因此順手介紹這個函式庫,說明要怎麼引入和要到哪裡找。
首先在軟體主畫面左邊,滑鼠右鍵點擊 "Project Explorer" 下專案名稱 EMB8BB21F16G-C-QFN20_Demo01,下拉選單選擇 "Properties"。
開啟專案的屬性視窗後,左邊選擇 "C/C++ Build -> Project Modules",然後在 8051 -> EFM8 -> BSP 下勾選 ☑ Efm8 Retargetserial (v4.1.7.0_-2129476106)。
按 "Apply" 應用變更(或按 "OK" 儲存設定並關閉視窗)。
Create a new SSv4 Project - 修改硬體組態檔 - 11 |
Create a new SSv4 Project - 修改硬體組態檔 - 12 |
Create a new SSv4 Project - 修改硬體組態檔 - 13 |
按 "OK" 儲存並離開專案屬性設定對話視窗。
Create a new SSv4 Project - 修改硬體組態檔 - 14 |
按 "Yes" 重新編譯專案。
Create a new SSv4 Project - 修改硬體組態檔 - 15 |
Create a new SSv4 Project - 修改硬體組態檔 - 16 |
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Create a new SSv4 Project - 撰寫程式碼:
請複製下面的程式碼,取代原來的 EFM8BB21F16G-C-QFN2-_Demo01.c 裡面的程式碼。
EFM8BB21F16G-C-QFN2-_Demo01.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | // Program Description: // // This program demonstrates how to configure the EFM8BB2 to use routines // in STDIO.h to write to and read from the UART0 interface. The program // reads a character using the STDIO routine getchar(), outputs that character // to the screen, and then outputs the ASCII hex value of that character. // // Resources: // SYSCLK - 24.5 MHz HFOSC0 / 1 // UART0 - 115200 baud, 8-N-1 // Timer1 - UART0 clock source // P0.4 - UART0 TX // P0.5 - UART0 RX //========================================================= // src/EFM8BB21F16G-C-QFN20_Demo01_main.c: generated by Hardware Configurator // // This file will be updated when saving a document. // leave the sections inside the "$[...]" comment tags alone // or they will be overwritten!! //========================================================= //----------------------------------------------------------------------------- // Includes //----------------------------------------------------------------------------- #include <SI_EFM8BB2_Register_Enums.h> // SFR declarations #include "InitDevice.h" // $[Generated Includes] #include <stdio.h> // [Generated Includes]$ //----------------------------------------------------------------------------- // SiLabs_Startup() Routine // ---------------------------------------------------------------------------- // This function is called immediately after reset, before the initialization // code is run in SILABS_STARTUP.A51 (which runs before main() ). This is a // useful place to disable the watchdog timer, which is enable by default // and may trigger before main() in some instances. //----------------------------------------------------------------------------- void SiLabs_Startup (void) { // $[SiLabs Startup] // [SiLabs Startup]$ } //----------------------------------------------------------------------------- // main() Routine // ---------------------------------------------------------------------------- int main (void) { uint8_t inputCharacter; // Used to store character from UART // Call hardware initialization routine enter_DefaultMode_from_RESET(); SCON0_TI = 1; // This STDIO library requires TI to // be set for prints to occur while (1) { // $[Generated Run-time code] printf( "\nEnter character: " ); inputCharacter = getchar(); printf( "\nCharacter entered: %c", inputCharacter ); printf( "\n Value in Hex: %bx", inputCharacter ); // [Generated Run-time code]$ } } |
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Create a new SSv4 Project - 韌體一鍵燒錄:
按下紅色框框處的鐵鎚圖示進行編譯。
鐵鎚旁邊的小按鈕裡面包含兩個選項:"... - debug"和 "... - release" 都可以用來編譯,只不過在不需要做除錯的情況之下,直接採用 "... - release" 選項進行編譯就可以。
如果一切正常,將會輸出類似下面的編譯訊息。
Create a new SSv4 Project - 韌體一鍵燒錄 - 01 |
SSv4 軟體主畫面中,按 "Flash Programmer" 開始進行韌體燒錄。
Create a new SSv4 Project - 韌體一鍵燒錄 - 02 |
燒錄之前要先清除晶片裡面的韌體資料,所以 "Erase" 要先執行一次,之後如果 "Program" 按鈕不能用,那就關閉後再重啟 "Flash Programmer" 一遍,就能使用。
Create a new SSv4 Project - 韌體一鍵燒錄 - 03 |
Create a new SSv4 Project - 韌體一鍵燒錄 - 04 |
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Create a new SSv4 Project - EFM8BB21F16G-C-QFN2_Demo01 韌體測試:
根據 EFM8BB21F16G-C-QFN2_Demo01.c 裡面的說明,
// Program Description: // // This program demonstrates how to configure the EFM8BB2 to use routines // in STDIO.h to write to and read from the UART0 interface. The program // reads a character using the STDIO routine getchar(), outputs that character // to the screen, and then outputs the ASCII hex value of that character. // // Resources: // SYSCLK - 24.5 MHz HFOSC0 / 1 // UART0 - 115200 baud, 8-N-1 // Timer1 - UART0 clock source // P0.4 - UART0 TX // P0.5 - UART0 RX
第一種測試方式是使用 USB 轉 TTL 模組,直接將 USB 轉 TTL 模組的接腳,與 EFM8BB2 學習開發板兩邊的晶片接腳相連接即可,電源也使用 USB 轉 TTL 模組的不用外接;此方法不需要用到開發板上的 RS232 晶片。
兩者之間的接線,如下表所示:
第二種測試方式是使用 USB 轉 RS232 線,不過這需要預先將 EFM8BB2 學習開發板上的 RS232 晶片的 <TxD> 和 <RxD> 接腳預先連接到 <P0.5> 和 <P0.4>,然後接上 USB 轉 RS232 線到開發板上的 DB9 接頭,才能進行測試。
兩者之間的接線,如下表所示:
開啟電腦的測試軟體,按下開發板上的 RESET 按鈕,然後輸入 A,輸入/輸出的情況就如下圖所示。
程式執行輸出結果 |
【結論】
本篇,說明了從頭建立一個 SSv4 專案檔的步驟和方法。對於初學者來說,建議使用上一篇匯入專案的方式,來學習與熟悉 EFM8BB21-C-QFN20 晶片韌體程式的開發,這會比從頭建立一個專案檔更容易上手。有任何不懂的地方,官方有提供論壇和豐富的資料文件與應用筆記可供交流、詢問、參考與查閱。
SSv4 支援多種軟體的專案檔匯入,除了 Simplicity Studio 和 Keil C51 專案檔外,其餘沒說到的專案檔匯入步驟和方法,請自行參考官方文件或網路上的教學。
<< 部落格相關文章 >>
- Silicon Labs EFM8 微控制器開發環境建置 [1.1]-Simplicity Studio v4 開發環境安裝
- Silicon Labs EFM8 微控制器開發環境建置 [1.2]-Keil C51 的 Silicon Labs C8051 / EFM8 開發環境建置
- Silicon Labs EFM8 微控制器開發環境建置 [2.1.1]-如何匯入、修改和編譯官方(或既有的)Simplicity Studio v4 專案範例
- Silicon Labs EFM8 微控制器開發環境建置 [2.2]-如何匯入 Simplicity Studio v4 專案檔至 Keil C51
- Silicon Labs EFM8 微控制器開發環境建置 [3.0]-離線與 ISP(UART)燒錄
.
.
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !