
測試方法:實現輸入按鍵控制和輸出點亮LED,輸入可以控制LED閃爍速度
串口可以打印出閃爍的周期。
GPIO的初始化
void led_init(void){GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);PB14 = 1;}//初始化按鍵的端口為輸入模式void button_init(void){GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT);}
實現LED閃爍,并通過傳入一個參數控制延時周期
void led_blink(int i){while(i--)CLK_SysTickDelay(100000);PB14 ^=1;}
這里使用了庫函數進行延時,最小延時單元設置為0.1s,即100000us。通過傳入的變量i,可以控制多少個0.1s后進行翻轉。
按鍵輸入用于控制一個變量從10到1循環變化,通過指針傳入該變量的地址。
//通過按鍵改變一個數字從10到1的變化,用于控制LED閃爍的頻率。void get_button(int *i){if(PH4==0){CLK_SysTickDelay(1000);if(PH4==0){while(PH4==0);(*i)--;if(*i<=0) *i=10;printf("i=%d T=%.2f s \n",*i,(float)*i/5);}}}
每次完成一次變量改變后,打印出變量值和當前對應的周期。代碼實現了松手檢測,按下后,先延時確認是否真的按下,如果是按下了,那么等待松手,松手后進行變量的減一操作,然后判斷變量是否循環到0,然后主函數調用他們。
int32_t main(void){int i=10;/* Init System, IP clock and multi-function I/O. */SYS_Init();/* Init UART0 for printf */UART0_Init();printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz\n", SystemCoreClock);printf("+-------------------------------------------------+\n");printf("| PB.14(Output) and PCH.4(Input) Sample Code |\n");printf("+-------------------------------------------------+\n\n");led_init();button_init();while(1){led_blink(i);get_button(&i);}}
最后串口打印的效果如下,完整的工程看附件,可以放到
M471_Series_BSP_CMSIS_V3.00.000\SampleCode\StdDriver
這個目錄下,因為我是用GPIO的例子復制了一份,修改的。
