使用HAL库实现按键控制LED灯闪烁

使用HAL库实现按键控制LED灯闪烁

  • 前言
  • 一、初建工程
  • 二、代码初始化
    • 1.GPIO初始化代码
    • 2.回调函数编写
  • 三,代码烧录以及LED变化
  • 总结
  • 参考文献


前言

通过按键实现LED灯的闪烁

实现的功能是

按下:灯灭
不按:灯亮

其中

PC13引脚实现外部中断
PA11引脚连接LED灯

使用HAL库实现按键控制LED灯闪烁_第1张图片

一、初建工程

使用HAL库实现按键控制LED灯闪烁_第2张图片
搜索STM32F103C8
创立工程
使用HAL库实现按键控制LED灯闪烁_第3张图片

将PC13设置为GPIO_EXTI13
PA11设置成GPIO_Output
使用HAL库实现按键控制LED灯闪烁_第4张图片
使用HAL库实现按键控制LED灯闪烁_第5张图片

将PC13设置成上升沿触发
使用HAL库实现按键控制LED灯闪烁_第6张图片
使用HAL库实现按键控制LED灯闪烁_第7张图片
使用HAL库实现按键控制LED灯闪烁_第8张图片
使用HAL库实现按键控制LED灯闪烁_第9张图片

使用HAL库实现按键控制LED灯闪烁_第10张图片
使用HAL库实现按键控制LED灯闪烁_第11张图片

进入KEIL5软件中

二、代码初始化

1.GPIO初始化代码

static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(led_GPIO_Port, led_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin : KEY_C13_Pin */
  GPIO_InitStruct.Pin = KEY_C13_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(KEY_C13_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : led_Pin */
  GPIO_InitStruct.Pin = led_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(led_GPIO_Port, &GPIO_InitStruct);

  /* EXTI interrupt init*/
  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

}

其中,最后两个函数是关于中断优先级分组和使能中断的

  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

2.回调函数编写

将编写的回调函数插入main.c的任意位置
不需要动主函数的while循环

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if( GPIO_Pin == KEY_C13_Pin )//判断外部中断源
	{ /* Prevent unused argument(s) compilation warning */
   HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_11); //反转PA11 LED灯的状态
    /* NOTE: This function Should not be modified, when the callback is needed,
             the HAL_GPIO_EXTI_Callback could be implemented in the user file
     */}
}

进行编译
使用HAL库实现按键控制LED灯闪烁_第12张图片
没有错误

三,代码烧录以及LED变化

打开mcuisp软件,连接硬件的usb接口
连接到需要的hex文件,开始烧录

使用HAL库实现按键控制LED灯闪烁_第13张图片

LED初始为灭。按一下后状态反转变为亮,再按下去灯灭,不按的时候为亮。

注意:
不要忘记stm32最小核心板的
BOOT0 置0
BOOT1 置0

否则LED灯只会闪烁一下
下面的拍摄的动态图

总结

经过了这些天的学习,对STM32tubeMX这个软件的了解和运用有了更深刻的认识,让我们对stm32芯片也有了新的认识。

参考文献

https://blog.csdn.net/weixin_43116606/article/details/104206923

你可能感兴趣的:(单片机,stm32,嵌入式硬件)