YangTwo 发表于 2025-3-3 22:41

【STM32L562E-DK测评】-2-外部GPIO中断测试

DK板子上有两个用户按键:


其中,B1是复位按键,B2是用户按键。


这与原理图是一致的:


在代码中,配置PC13输入模式,并使能下降沿触发中断。
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);
}初始化LED,这样在按键按下后,可以改变LED的状态。
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;
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, &GPIO_Init);

HAL_GPIO_WritePin(LED_PORT, LED_PIN, 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-sizeGPIO_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模式,之后全速运行


按下板子上的用户按键,小灯状态会进行翻转。



页: [1]
查看完整版本: 【STM32L562E-DK测评】-2-外部GPIO中断测试