本次实验利用开发板上的用户按键控制三个颜色的LED灯(LED2、LED3、LED4),开机时三个LED灯为全熄状,每按压一次用户按键三个LED灯顺序点亮、熄灭。实验目的为学习了解GPIO、及外部中断配置。
一、实验资源
1、AT-START-F407开发板;
2、keil v5.31.0.0;
3、BSP等相关资源;
二、相关知识学习
1、GPIO
再看看AT32F407系列微控制器系统架构,从他庞大的系统架构中可以看到所有GPIO均直接挂载到最高频率为240MHz的“AHB”总线,这一点与之前用到过的几款“ARM”芯片不同,这应该是雅特力微控制器的特色之一。
另外,AT32F407的大部分的IO引脚(除了PC13~PC15、PD0、PD1、PA0、PA11、PA12等几个引脚外)都具备5v电平容忍能力,当然在具体应用中还要按数据手册的要求进行操作。
2、EXTI
三、硬件连接
从以上的原理图中可以看出,三个LED分别与PD13、PD14、PD15三个IO端口相连,当这三个端口输出低电平时LED被点亮;用户按键“B2”一端与“VDD”相连,另外一端通过“R19”与PA0相连,这意味着当“B2”按下会在PA0端口上产生“高电平”或“上升沿”信号,触发“EXTI”线中断。
四、程序实现
为方便学习,利用“AT32F4xx_StdPeriph_Lib_V1.2.8”中的“Templates”改了个模板。
主要代码:
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] Button EXTI0 Interrupt Handler
* @param None
* @retval None
*/
void EXTI0_IRQHandler(void)
{
static uint8_t BUTTON_CONT=0;
Delay_ms(5);
EXTI_ClearIntPendingBit(BUTTON_EXTI_LINE[gButtonType]);
if ((GPIO_ReadInputData(BUTTON_GPIO_PORT[gButtonType]) & BUTTON_GPIO_PIN[gButtonType]) == \
BUTTON_GPIO_PIN[gButtonType])
{
BUTTON_CONT++;
if(BUTTON_CONT>3)
BUTTON_CONT=0;
switch(BUTTON_CONT)
{
case 0: AT32_LEDn_OFF(LED2);AT32_LEDn_OFF(LED3);AT32_LEDn_OFF(LED4);break;
case 1: AT32_LEDn_ON(LED2);AT32_LEDn_OFF(LED3);AT32_LEDn_OFF(LED4);break;
case 2: AT32_LEDn_OFF(LED2);AT32_LEDn_ON(LED3);AT32_LEDn_OFF(LED4);break;
case 3: AT32_LEDn_OFF(LED2);AT32_LEDn_OFF(LED3);AT32_LEDn_ON(LED4);break;
default:break;
}
}
}
五、实验结果
如前描述。
六、总结
通过本次实验对AT-START-F407开发板有了初步的认识,实验的成功得意于雅特力提供各项资料的完美,使得上手学习的过程比较顺利。
七、附件
GPIO_EXIT.rar
(371.43 KB)
|