Cubemx配置
前面的配置依旧一样。
原文链接:https://blog.csdn.net/m0_74246768/article/details/144227188
1.打开cubemx,将PB0到PB1配置为GPIO_EXTI模式。
2.在System-Core中点击GPIO,选择PB0到PB2,
GPIO_Mode(触发模式):External Interrupt Mode with Falling edge trigger detection
GPIO Pull up/Pull down(上下拉):Pull up
3.在System-Core中点击NVIC,勾选EXTI LINE interrupt三条线的使能中断。
4.将三条线的(Preemption Priority)抢占优先级调整低一些,都设置为5(让更高级的优先级处理更紧急的事件)。
5.将Time base: System tick timer的(Preemption Priority)抢占优先级设置为4.
点击GENERATE CODE.
代码编写
中断回调函数:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
my_main.c
#include "my_main.h"
uint8_t led_sta=0x01;
void LED_Disp(uint8_t dsLED)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, dsLED<<8, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
}
uint8_t LED_chg(uint8_t num,uint8_t sta)
{
uint8_t pos=0x01<<(num-1);
led_sta=(led_sta&(~pos))|(pos*sta);
LED_Disp(led_sta);
}
void setup()
{
LED_Disp(0x00);
}
void loop()
{
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_0)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
{
led_sta=(led_sta&0xfd)|0x02;
led_sta=(led_sta&0xfe)|0x00;
LED_Disp(led_sta);
HAL_Delay(100);
}
}
}