中断EXIT13是在中断线EXIT15_10上面的,所以如图勾选,在后面的两项中可以设置对应的中断优先级。
设置完以后就可以生成代码。
然后添加我们需要的一些功能,测试一下:
这边首先写一个电平翻转+串口发送的功能。
①串口定向功能
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
* @brief Retargets the C library printf func
tion to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
②:LED控制,作为中断服务程序
void GPIO_Toggle()
{
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin);
printf("OK");
}
③:中断服务程序
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_13)
{
GPIO_Toggle();
}
}
通过运行以后可以得到测试结果:
之所以会连续发送,是存在抖动的结果。可以通过软件去抖实现对应的避免,也可以通过硬件电路来解决这个问题。