| DK板子上有两个用户按键: 
   
 其中,B1是复位按键,B2是用户按键。
 
   
 这与原理图是一致的:
 
   
 在代码中,配置PC13输入模式,并使能下降沿触发中断。
 
 初始化LED,这样在按键按下后,可以改变LED的状态。static void EXTI13_IRQHandler_Config(void)
{
  GPIO_InitTypeDef   GPIO_InitStructure;
  /* Enable GPIOC clock */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  /* Configure PC.13 pin as input floating */
  GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
  GPIO_InitStructure.Pull = GPIO_NOPULL;
  GPIO_InitStructure.Pin = BUTTON_USER_PIN;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
  /* Enable and set line 13 Interrupt to the lowest priority */
  HAL_NVIC_SetPriority(EXTI13_IRQn, 2, 0);
  HAL_NVIC_EnableIRQ(EXTI13_IRQn);
}
 int32_t BSP_LED_Init(Led_TypeDef Led)
{
  int32_t          status = BSP_ERROR_NONE;
  GPIO_InitTypeDef GPIO_Init;
  /* Enable the GPIO_LED Clock */
  if (Led == LED9)
  {
    LED9_GPIO_CLK_ENABLE();
  }
  else /* Led = LED10 */
  {
    /* Enable VddIO2 for GPIOG */
    __HAL_RCC_PWR_CLK_ENABLE();
    HAL_PWREx_EnableVddIO2();
    LED10_GPIO_CLK_ENABLE();
  }
  /* configure the GPIO_LED pin */
  GPIO_Init.Pin   = LED_PIN[Led];
  GPIO_Init.Mode  = GPIO_MODE_OUTPUT_PP;
  GPIO_Init.Pull  = GPIO_PULLUP;
  GPIO_Init.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  HAL_GPIO_Init(LED_PORT[Led], &GPIO_Init);
  HAL_GPIO_WritePin(LED_PORT[Led], LED_PIN[Led], GPIO_PIN_SET);
  return status;
}
下面是中断服务程序:
 
 void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
  if (GPIO_Pin == BUTTON_USER_PIN)
  {
    /* Toggle LED10 */
    BSP_LED_Toggle(LED10);
  }
}
编译代码:
 
 arm-none-eabi-size  GPIO_EXTI.elf 
arm-none-eabi-objdump -h -S GPIO_EXTI.elf  > "GPIO_EXTI.list"
   text           data            bss            dec            hex        filename
   8088             24           1568           9680           25d0        GPIO_EXTI.elf
Finished building: default.size.stdout
 
Finished building: GPIO_EXTI.list
 
22:10:51 Build Finished. 0 errors, 0 warnings. (took 4s.653ms)
烧录程序,失败了,看来ST-LINK升级在所难免。
 
   
 
   
 点击open in update mode
 
   
 升级成功
 
   
 点击小虫子进入debug模式,之后全速运行
 
   
 按下板子上的用户按键,小灯状态会进行翻转。
 
   
 
 
 |