2026年4月13日星期一

NK-N9H31A2 開發板:GPIO output

開發環境建立好之後,當然就是要開始寫程式,那怎麼知道寫的程式碼動作正確運行,就是使用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 &lt 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

延伸閱讀






沒有留言:

發佈留言

打賞按讚