網頁最後修改時間:2020/08/10
從上一篇,開始說明如何在 Keil µVision 5 建立 nuvoTon(新唐) 8-bit 8051 MCU(微控制器)的韌體開發環境,主要分為下面幾個部分:- Keil C51 開發環境建置所需軟體安裝;
主要說明建置開發環境時所需要的軟體的下載和安裝。 - 如何建立一個全新的 Keil 專案檔(以新唐 N76E003 晶片為例);
包含樣本檔的建立、一鍵燒錄設定和除錯設置等...。 - 離線和 ISP(UART)燒錄;
NuMicro ICP Programming Tool 燒錄 .hex 檔的說明,和使用 ISP(UART)燒錄韌體的方法。
N76E003AT20 晶片, source: direct.nuvoton.com |
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
有購買商品的使用者,網頁中用到的相關資料已放置於雲端硬碟,請自行下載使用!
其餘的使用者,請自行依照提供之連結下載相關資料,程式碼複製貼上使用!
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
*********************************************************************************
網頁所用到的開發板與燒錄模擬器:
*********************************************************************************
經過前一篇軟體的安裝,Keil C51 現在已支援新唐的 8051 系列微控制器,如今要建立一個專案並不困難。
要完成本篇的目的,有下面幾個工作需要被完成:
- 下載 N76E003 開發板支援套件(BSP, Board Support Package);
- 建立專案資料夾目錄結構;
- 建立 Keil 專案(Create a new µVision project);
- Keil 專案項目設定(Manage project items);
- Keil 專案目標選項設定(Options for target);
- Keil 專案編譯與程式燒錄;
- 撰寫 LED Blink 程式碼;
- 改寫 LED Blink 為低態觸發;
- {BSP}:代表 N76E003_BSP_Keil_C51_V1.0.6 資料夾路徑;
- {Template}:代表 N76E003_Template 資料夾路徑;
【下載 N76E003 開發板支援套件】
新唐有提供 N76E003 的 BSP(Board Support Package, 開發板支援套件)方便用戶程式開發使用,它類似於 Arduino 的函式庫,可加快開發和減少用戶開發時翻閱資料手冊的時間,讓用戶能更專注於的開發上。
下載的網頁和網址:
N76E003 軟體下載頁 |
資料夾目錄結構如下圖所示,其中:
- Common\
包含時間延遲和基本 UART 鮑率設定的常用子函式,大多是 .c 檔的格式。 - Include\
存放所有標頭檔和定義的地方。 - Sample_Code\
N76E003 晶片的官方參考範例程式。
N76E003 ADC / PWM / SPI / I2C 等...各功能函數怎麼使用?程式碼怎麼撰寫?這裡有很多範例程式可參考。 - Startup\
放置啟動檔案(Startup file)的資料夾,也就是 STARTUP.A51。 - RM_N76E003 CMSIS BSP Guide v1.06.pdf
BSP 資料夾各目錄和 Sample_Code 裡各範例程式的說明。
N76E003 開發板支援套件資料夾目錄結構 |
【建立專案資料夾目錄結構】
建立一資料夾(命名為 N76E003_Template),裡面結構如下:
N76E003_Template 資料夾目錄樹狀結構 |
- 複製 {BSP} 的 Common 和 Include 兩個資料夾到 {Temprate}\Libraries\FWLib\ 資料夾下面;
- 複製 {BSP}\Startip 資料夾裡的檔案 STARTUP.A51 到 {Temprate}\Startup\ 資料夾中;
- 在 {BSP}\User 資料夾中建立一個 main.c 檔案;
【建立 Keil 專案】
有了專案資料夾之後,開啟 Keil µVision5 準備建立一個新的 Keil 專案。
點選 "Project \ New µVision Project..."。
建立 Keil 專案 - 01 |
建立 Keil 專案 - 02 |
燒錄所需要的 .hex 檔,編譯後會新增到 {Template}\Project\Objects 資料夾中,燒錄時要到這個地方找。
Listings 和 Objects 資料夾裡面的檔案,在需節省磁碟空間的時候,可以完全刪除掉這兩個資料夾裡的檔案,只留下 .hex 檔。
建立 Keil 專案 - 03 |
按 "OK" 進入到下一個畫面。
建立 Keil 專案 - 044 |
按 "否(N)" 儲存專案並離開。
建立 Keil 專案 - 05 |
【Keil 專案項目設定】
滑鼠左擊 Target 1 選擇 "Manage Project Items",開啟專案項目管理視窗。
Keil 專案項目設定 - 01 |
- Project Targets: 欄位值修改為 N76E003_Template;
- Groups: 欄位下面新增 Startup、User 和 Common 三個群組;
- Files: 欄位下對應的是前面 Groups: 選擇之後對應包含的檔案,可由下面 "Add Files..." 加入檔案;
- Startup 選擇加入 {BSP}\Startup\STARTUP.A51;
檔案類型選擇 Asm Source file (*.s;*.src;*.a*)。 - User 選擇加入 {BSP}\User\main.c;
- Common 選擇加入 {BSP}\Common 下的 Common.c 和 Dealy.c;
Keil 專案項目設定 - 02 |
Keil 專案項目設定 - 03 |
Keil 專案項目設定 - 04 |
Keil 專案項目設定 - 05 |
完成專案項目的設定後,整個專案項目目錄就如下圖所示。
Keil 專案項目設定 - 06 |
【Keil 專案目標選項設定】
滑鼠左擊 N76E003_Template,下拉選單選擇 "Options for Target 'N76E003_Template'..."。
Keil 專案目標選項設定 - 01 |
新增一個路徑欄位,再點選旁邊的按鈕加入 {Template}\Libraries\FWlib\Include 資料夾路徑。
要特別注意的是:Keil 只會在同一層的資料夾中搜尋,如果該資料夾下面還有子目錄的話,路徑一定要往下添加到最後一層子目錄中。
最後按 "OK" 回到上一個畫面。
Keil 專案目標選項設定 - 02 |
如果之後要使用除錯的話,則 Code Optimization 的 Level: 請改選 4: Register variables。
** 如果要先儲存剛剛設定的參數的話,請按下 "OK" 再重新開啟專案目標選項設定的對話視窗,要不就直接切換到其他頁籤繼續做設定。
Keil 專案目標選項設定 - 03 |
"Select Folder for Objects..." 預設使用的輸出目錄為 {Template}\Project\Objects,若沒有特別需求的話,維持預設值即可。
Keil 專案目標選項設定 - 04 |
Keil 專案目標選項設定 - 05 |
按 "OK" 儲存所有設定後離開。
Keil 專案目標選項設定 - 06 |
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
關於燒錄器更詳細的使用方式,以及像是在 IAR 和 CooCox CoIDE 使用的設定,可參考新唐官網的 Nu-Link 的用戶手冊,它裡面有說明,這跟套件中所使用的燒錄模擬器是相容的。
nuvoTon Nu-Link 官方網頁
用戶手冊 V1.01 [中文] [英文]
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
【Keil 專案編譯與程式燒錄】
如果上面關於專案的設定都做得正確的話,接下來就只剩下撰寫 main.c 的程式碼了。
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 撰寫 LED Blink 程式碼:
複製 / 貼上下面的程式到 main.c。
N76E003_Template, main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include "N76E003.h" #include "SFR_Macro.h" #include "Function_define.h" #include "Common.h" #include "Delay.h" const bit ON = 1; const bit OFF = 0; sbit Led = P1^2; // method 01 // sbit LED = P12; // method 02 void main() { Set_All_GPIO_Quasi_Mode; // Defined in Funciton_define.h while(1) { //** on 100, off 1000 Led = ON; Timer0_Delay1ms(100); Led = OFF; Timer3_Delay100ms(10); } } |
其中,
- line 1 ~ 5:基本上,這 5 個標頭檔,就是撰寫 N76E003 韌體基本需要的文件;
- line 7 ~ 8:這兩個常數是作為 LED亮滅指定用的;
- line 10:定義板載 LED 的位址;
- line 14:設定 N76E003 的接腳為近似雙向模式(Quasi-bidirectional);
- line 18 ~ 21:ON 100ms, OFF 1000ms;
撰寫 LED Blink 程式碼 - 01 |
撰寫 LED Blink 程式碼 - 02 |
撰寫 LED Blink 程式碼 - 03 |
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 解決 *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS:
下面是在網路上面找到的解決方法,可以去除 WARNING L16 的警告出現,並恢復被多佔據的空間。
滑鼠左擊 N76E003_Template,下拉選單選擇 "Options for Target 'N76E003_Template'..."。
切換到 "Device" 頁籤,勾選 [✔] Use Ectended Linker (LX51) instrad of BL51。
"OK" 可以先不按。
WARNING L16 解決方法 - 01 |
WARNING L16 解決方法 - 02 |
可以發現,編譯輸出中沒有再出現 WARNING L16 警告了,而且編譯後的大小也小了很多。
WARNING L16 解決方法 - 03 |
不過燒錄之前請先接好燒錄模擬器和開發板(如下圖所示),否則除錯、模擬和燒錄都不會動作!
燒錄模擬器與 N76E003 系統板接線示意圖 |
WARNING L16 解決方法 - 04 |
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 改寫 LED Blink 為低態觸發:
由於一開始忘記板載的 LED 是採用低態觸發的,因此燒錄好韌體之後的 LED 亮滅是反向的。
下面的程式碼是改寫 LED 為低態觸發的程式碼,請複製貼上後重新編譯再燒錄
N76E003_Template, main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include "N76E003.h" #include "SFR_Macro.h" #include "Function_define.h" #include "Common.h" #include "Delay.h" const bit OFF = 1; const bit ON = 0; // active low sbit Led = P1^2; // method 01 // sbit LED = P12; // method 02 void main() { Set_All_GPIO_Quasi_Mode; // Defined in Funciton_define.h while(1) { //** on 100, off 1000 Led = ON; Timer0_Delay1ms(100); Led = OFF; Timer3_Delay100ms(10); } } |
紅色框是主要改寫的部分。
按 "Rebuild" 重新進行編譯。
改寫 LED Blink 為低態觸發 - 01 |
改寫 LED Blink 為低態觸發 - 02 |
【結論】
雖然這一篇沒有說到任何撰寫程式的技巧,但是已經把程式撰寫的環境佈置好了,只要之前有過 8051 單晶片的開發經驗,N76E003 只不過就是多了其他週邊功能的加強板的 8051 單晶片而已,語法上沒什麼太大不同,加上其 {BSP} 中有很多的程式範例可供學習參考,相信各位聰明的看倌,要學的話很快就能學會!
<< 部落格相關文章 >>
- nuvoTon(新唐)8bit 8051 微控制器開發環境建置 [1]-Keil C51 開發環境建置所需軟體安裝
- nuvoTon(新唐)8bit 8051 微控制器開發環境建置 [3]-離線和 ISP(UART)燒錄
.
Thank you
回覆刪除不客氣,有幫助到就好!
刪除