【AT-START-F425测评】三、GPIO点灯及按键评测
[复制链接]
雅特力F425的开发板,感觉蛮贴近开发,功能比较直观,代码也直观。
根据评测进度,先评测GPIO点灯及按键,点灯例程直接由提供,在fw下面的examples中有个gpio
代码也比较简单,直接是LED2、LED3、LED4的循环闪烁。
看了代码和开发文档,用户按钮连接的是PA0,可以通过R5、R6的电阻切换到PC13上
原理图可见,按钮按下时管脚高电平
LED在原理图中对应的时PC2、PC3和PC5
上述GPIO在例程中都有初始化
例程中也提供了按钮的检测程序,还是带防抖处理的
button_type at32_button_press()
{
static uint8_t pressed = 1;
/* get button state in at_start board */
if((pressed == 1) && (at32_button_state() != RESET))
{
/* debounce */
pressed = 0;
delay_ms(10);
if(at32_button_state() != RESET)
return USER_BUTTON;
}
else if(at32_button_state() == RESET)
{
pressed = 1;
}
return NO_BUTTON;
}
只是这个按钮例程只检测按下的状态,并不是检测释放的瞬间,个人觉得按钮应该要检测按下后释放的一瞬间,并带防抖处理
nt main(void)
{
static uint8_t pressed = 0;
static uint8_t ledmode = 0;
static uint8_t userbtnclick = 0;
system_clock_config();
at32_board_init();
while(1)
{
if(at32_button_state() != RESET) {
//user button按下
pressed++;
} else {
//user button释放
if(pressed >= 2) {
userbtnclick = 1;
}
pressed = 0;
}
if(userbtnclick) {
userbtnclick = 0;
ledmode = ~ledmode;
}
led_toggle(ledmode);
delay_ms(10);
}
}
闪烁例程,相对就比较灵活了,可以做出流水效果,也可以闪烁效果
由于只有一个user button,就简单做了个不同的闪烁效果
uint8_t delaytimes = 0;
void led_toggle(uint8_t flag)
{
delaytimes ++;
if(delaytimes < 30) return;
delaytimes = 0;
if(flag) {
at32_led_toggle(LED2);
//delay_ms(300);
}else {
at32_led_toggle(LED3);
//delay_ms(300);
at32_led_toggle(LED4);
//delay_ms(300);
}
}
为了配合按键扫描,在延时上做了处理。
GPIO应该是MCU例程中最简单的了。
|