開發環境建立好之後,當然就是要開始寫程式,那怎麼知道寫的程式碼動作正確運行,就是使用GPIO 控制 LED 燈閃爍啦,這篇文章僅說明腳位輸出控制,不包含中斷,未來會在別的章節進行說明,GPIO 的一些知識可以參考"GPIO 輸入輸出模式與實務應用整理"
實驗目的
透過程式控制板子上的 LED 燈亮面,使用提供的函式
使用範例
在官方的 SampleCode 中,找到 GPIO,匯入方式就不再贅述,可以參考此篇
電路說明
由於下載下來的範例程式中,對應的腳位不一樣,所以要依照板子上的電路圖稍作調整將程式碼中的腳位設定改為 PI10 及 PF10
在 N9H31 中,GPIO 控制 LED 的本質是透過設定對應的暫存器位元,而 LED 是否亮起,取決於外部電路的接法(開發板 Active Low)。
![]() |
| N9H31 開發板上的 LED |
程式碼
以下的程式碼可以直接複製貼上,此篇文章中主要學會使用函式控制 LED 亮滅,所以將原本官方的程式進行修改,僅保留控制 LED 的部分
void delay(uint32_t count)
{
while(count--);
}
int main(void)
{
sysDisableCache();
sysFlushCache(I_D_CACHE);
sysEnableCache(CACHE_WRITE_BACK);
sysInitializeUART();
sysprintf("+-------------------------------------------------+\n");
sysprintf("| GPIO Sample Code |\n");
sysprintf("+-------------------------------------------------+\n\n");
/* Configure Port F10 to output mode and pull-up, LED_2 */
GPIO_OpenBit(GPIOF, BIT10, DIR_OUTPUT, PULL_UP);
/* Configure Port I10 to output mode and pull-up, LED_1 */
GPIO_OpenBit(GPIOI, BIT10, DIR_OUTPUT, PULL_UP);
/* Blink LEDs */
for (int i = 0; i < 10; i++)
{
GPIO_SetBit(GPIOF, BIT10);
GPIO_SetBit(GPIOI, BIT10);
delay(0xFFFFFF);
GPIO_ClrBit(GPIOF, BIT10);
GPIO_ClrBit(GPIOI, BIT10);
delay(0xFFFFFF);
}
GPIO_CloseBit(GPIOF, BIT10);
GPIO_CloseBit(GPIOI, BIT10);
sysprintf(" [OK].\n");
while(1);
}
函式說明
這裡只針對上面程式使用到的 GPIO 函式說明,更多說明可以參考 gpio.h gpio.c
- GPIO_OpenBit
- 設定單一 GPIO 腳位的模式(port, bit, direction, pull)
- GPIO_SetBit
- 將指定 port 的 bit 驅動為高電位(1)
- GPIO_ClrBit
- 將指定 port 的 bit 驅動為低電位(0)
- GPIO_CloseBit
- 將單一 bit 恢復為預設/關閉狀態
實際效果
程式參考
Nuvoton 官方 github https://github.com/OpenNuvoton/N9H31_NonOS
延伸閱讀

沒有留言:
發佈留言