本来不想写这个测试了,在单片机应用中算是比较常规了,后来发现这一版库函数定义还是蛮复杂的,反正比我想的复杂。尤其是中断这块还得需要熟悉。这个测试为了实现按键中断翻转LED灯。这些资源板卡上都有。原理图截图如图1所示:
完成这个功能,就是初始化时钟,引脚定义,外部中断,写中断函数,基本就是这样。我研究了一下库函数,宏写的多,觉得读起来和移植都挺复杂的,就给改成原来熟悉的样子了,简化了一下。 GPIO及中断初始化如下: - GPIO_InitStruct.Pin = GPIO_PIN_13;
- GPIO_InitStruct.Pull = GPIO_PULLDOWN;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- /* Configure Button pin as input with External interrupt */
- GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- (void)HAL_EXTI_GetHandle(&hpb_exti, EXTI_LINE_13);
- (void)HAL_EXTI_RegisterCallback(&hpb_exti, HAL_EXTI_COMMON_CB_ID,0);
- /* Enable and set Button EXTI Interrupt to the lowest priority */
- HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0x00);
- HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
复制代码
调用外部中断Callback函数: - void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
- {
- if (GPIO_Pin ==GPIO_PIN_13)
- {
- // UserButtonStatus = 1;
- HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
- }
- }
复制代码 哦,对了,在初始化main函数中,初始化一下LED引脚的初始状态。 - GPIOA->BSRR = GPIO_PIN_5;
复制代码 这个测试主要就是熟悉外部中断的练习。
效果如图2所示:
|