测试方法:实现输入按键控制和输出点亮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);
- }
- }
00_LED.rar
(746.17 KB, 下载次数: 3)
最后串口打印的效果如下,完整的工程看附件,可以放到
M471_Series_BSP_CMSIS_V3.00.000\SampleCode\StdDriver
这个目录下,因为我是用GPIO的例子复制了一份,修改的。
|