简介
基于 第一篇文章 的介绍, 我们新增按键的中断控制;
开发板 : Bearpi Std(小熊派标准板)
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出即可 \ 高电平点亮
KEY1 : PB2 \ 上拉 \ 按下下降沿触发(一次)/上下沿触发(两次,实现按下开、松开关)
KEY2 : PB3 \ 上拉 \ 按下下降沿触发(一次)/上下沿触发(两次,实现按下开、松开关)
步骤
创建项目
-
打开STM32CubeMX创建工程
-
配置
RCC、Clock、USER_LED配置参考1
KEY1和2配置如下
PB2 配置成外部中断输入
修改PB2引脚配置
下降沿触发方式\上拉模式\标签USER_KEY1
PB3同样方法设置
将PB2/PB3的外部中断启用
-
生成工程
- 项目名称路径
- 生成Code配置
只要相关库即可,不需要所有库
- 项目名称路径
-
加入功能代码
main 函数while循环增加延时,死循环会导致时间片被暂用导致无法响应中断
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(1000); //
}
/* USER CODE END 3 */
}
main.c 中加入中断响应回调, 当中断触发时回调此函数, 记住在USER Code BEGIN4的注释BEGIN到END内添加, 这样下次使用STM32CubeMX增加功能时会保留块内代码
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==USER_KEY1_Pin)
{
HAL_GPIO_TogglePin(USER_LED_GPIO_Port,USER_LED_Pin);
}
if(GPIO_Pin==USER_KEY2_Pin)
{
HAL_GPIO_TogglePin(USER_LED_GPIO_Port,USER_LED_Pin);
}
}
/* USER CODE END 4 */
- 编译、烧录、复位、完成
BearPi_LED_KEY_IRQ 完整工程
BearPi Std 板从入门到放弃 - 1 引气入体篇(1)