HAL库编写 STM32F103C8 按键
时间: 2024-02-17 07:27:56 浏览: 48
以下是使用HAL库编写STM32F103C8按键的代码,其中PA0和PA1被用作按键输入:
```c
#include "stm32f1xx_hal.h"
GPIO_InitTypeDef GPIO_InitStruct;
void GPIO_Init(void);
void EXTI_Init(void);
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
int main(void)
{
HAL_Init();
GPIO_Init();
EXTI_Init();
while (1)
{
// do nothing
}
}
void GPIO_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void EXTI_Init(void)
{
__HAL_RCC_AFIO_CLK_ENABLE();
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_0)
{
// PA0 button pressed
// do something
}
else if (GPIO_Pin == GPIO_PIN_1)
{
// PA1 button pressed
// do something
}
}
void EXTI0_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}
void EXTI1_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
}
```
在这个例子中,我们使用了HAL库中的GPIO和EXTI模块来初始化GPIOA的PA0和PA1引脚,并设置为输入模式。我们还初始化了外部中断EXTI,并设置了中断优先级,最后使用HAL_NVIC_EnableIRQ()函数启用中断。在按键按下时,HAL_GPIO_EXTI_Callback()函数将被调用,我们可以在其中进行相应的操作。我们还实现了EXTI0_IRQHandler()和EXTI1_IRQHandler()函数来处理中断。