- /** Configure pins as
- * Analog
- * Input
- * Output
- * EVENT_OUT
- * EXTI
- */
- void ATC_GPIO_Init(void)
- {
- GPIO_SetFunc(GPIOA, GPIO_PIN11, GPIO_FUN0);
- GPIO_SetFunc(GPIOC, GPIO_PIN6, GPIO_FUN0);
- GPIO_SetFunc(GPIOC, GPIO_PIN7, GPIO_FUN0);
- GPIO_SetFunc(GPIOC, GPIO_PIN9, GPIO_FUN0);
- GPIO_SetDir(GPIOA, GPIO_PIN11, GPIO_IN);
- GPIO_SetDir(GPIOC, GPIO_PIN6, GPIO_IN);
- GPIO_SetDir(GPIOC, GPIO_PIN7, GPIO_OUT);
- GPIO_SetDir(GPIOC, GPIO_PIN9, GPIO_OUT);
- GPIO_SetCallback(GPIO_PIN11, K7_Callback);
- GPIO_SetCallback(GPIO_PIN6, K6_Callback);
- GPIO_EnableExtInterrupt(GPIOA, GPIO_PIN11, EXTI_TRIGGER_FALLING);
- GPIO_EnableExtInterrupt(GPIOC, GPIO_PIN6, EXTI_TRIGGER_RISING_FALLING);
- GPIO_SetPinLevel(GPIOC, GPIO_PIN7, GPIO_LEVEL_LOW);
- GPIO_SetPinLevel(GPIOC, GPIO_PIN9, GPIO_LEVEL_LOW);
- GPIO_SetDrivingAbility(GPIOC, GPIO_PIN7, GPIO_DRIVING_4MA);
- GPIO_SetDrivingAbility(GPIOC, GPIO_PIN9, GPIO_DRIVING_4MA);
- /* EXTI interrupt init*/
- NVIC_SetPriority(EXTI3_8_IRQn, 0);
- NVIC_EnableIRQ(EXTI3_8_IRQn);
- NVIC_SetPriority(EXTI9_15_IRQn, 0);
- NVIC_EnableIRQ(EXTI9_15_IRQn);
- }
上述代码是GPIO端口的配置代码,其中的两行
GPIO_SetCallback(GPIO_PIN11, K7_Callback);
GPIO_SetCallback(GPIO_PIN6, K6_Callback);要根据中断回调函数名称修改一下,下面就是两个按键的回调函数:
- //按下K7产生下降沿电平点亮LED3;再次按下后熄灭LED3
- void K7_Callback(void *device, uint32_t wpara, uint32_t lpara)
- {
- static uint8_t LED3_flag = 1;
- if(GPIO_LEVEL_LOW == GPIO_GetPinLevel(K7_GPIO_Port, K7_Pin))
- {
- if(LED3_flag)
- {
- GPIO_SetPinBit(LED3_GPIO_Port, LED3_Pin);
- LED3_flag = 0;
- }
- else
- {
- LED3_flag = 1;
- GPIO_ResetPinBit(LED3_GPIO_Port, LED3_Pin);
- }
- }
- }
- //K6按下时检测到K6电平下降沿点亮LED2;K6松开时检测到K6电平上升沿熄灭LED2;
- void K6_Callback(void *device, uint32_t wpara, uint32_t lpara)
- {
- if(GPIO_LEVEL_HIGH == GPIO_GetPinLevel(K6_GPIO_Port, K6_Pin))
- GPIO_ResetPinBit(LED2_GPIO_Port, LED2_Pin);
- if(GPIO_LEVEL_LOW == GPIO_GetPinLevel(K6_GPIO_Port, K6_Pin))
- GPIO_SetPinBit(LED2_GPIO_Port, LED2_Pin);
- }
四、实验结果
满足了实验设计。
五、实验总结
通过实验对AC7801x中断有了初步认识,学会了EXTI外部中断的基本操作。另外网友“dengyonglei”建议将“AutoGen Studio”更新为1.3.0版本,由于本地网断了几天,这个实验在之前已经完成,所以还是按1.2.0版本进行了描述。在此向@dengyonglei 表示感谢!
六、附件
GPIO.rar
(952.38 KB, 下载次数: 8)