本次实验利用开发板上的用户按键控制三个颜色的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, 下载次数: 16)
 
  |