Bootstrap

STM32之按键点亮LED灯(中断法)

目录

1、操作思路

2、用CubeMX工具生成的代码——main的主函数

3、GPIO代码-----gpio.c

4、编写中断服务函数

5、用外部中断共用入口函数,来调用外部中断处理回调函数

6、编写外部中断处理回调函数(在这里编写项目设计的逻辑)

7、把上述的外部中断处理回调函数,放到main主函数中


中断(Interrupt)模式:
为了提高CPU的效率和使系统具有良好的实时性,可以采用中断控制I/O方式。采用中断方式CPU就不必花费大量时间去查询各外围设备的状态了。而是当外围设备需要请求服务时,向CPU发出中断请求(ARQ),CPU响应外围设备中断,停止执行当前程序,转去执行一个外围设备服务的程序,此服务程序称为中断服务处理程序,或称中断服务子程序。中断处理完毕,CPU又返回来执行原来的程序。
 

1、操作思路

输入(按键):
KEY1:PA0
KEY2:PA1


输出(LED灯):
LED1:PB8
LED2:PB9

2、用CubeMX工具生成的代码——main的主函数

#include "main.h"
#include "gpio.h"

void SystemClock_Config(void);  //因为这个函数在main函数中,如果想要使用这个函数,需要提前声明

int main(void)
{
  HAL_Init();                   //初始化HAL库
  SystemClock_Config();         //初始化系统时钟
  MX_GPIO_Init();               //初始化GPIO引脚口

void SystemClock_Config(void)   //配置系统时钟函数
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYS

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;