微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > --中断功能的初步理解

--中断功能的初步理解

时间:10-02 整理:3721RD 点击:




从电路连接上:PC13--BUTTON
PB7--LED2
PB13--LED3
按键在没有被按下的时候PC13是低电平,当按键被按下之后,对应得电平变为高电平。
首先在STM32CUBEMX选择对应的IO的功能,对应的BUTTON选择为EXIT13的中断的功能。


然后进入对应的GPIO的设置中,设置LED的输出电平,还有就是BUTTON的触发方式。


第一个选项中,可以选择对应的触发方式,上升沿触发,下降沿触发,上升下降沿吃法,根据我们BUTTON的电路,需要在按下的时候响应我们的请求,因此设置为上升沿触发。
接下来就是使能对应的中断,并且设计对应的中断优先级


中断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 function 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();
        }
}
通过运行以后可以得到测试结果:


之所以会连续发送,是存在抖动的结果。可以通过软件去抖实现对应的避免,也可以通过硬件电路来解决这个问题。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top