STM32------点灯
1.开发准备
开发环境:keil5,STM32CubeMX
开发语言:C语言
烧录工具:ST-Link
库函数:HAL库
2.点灯
常用的GPIO HAL库函数:
c
//GPIO初始化
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
//调制电平
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
//反转
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
结构体 GPIO_InitTypeDef 定义:
c
typedef struct
{
uint32_t Pin;
uint32_t Mode;
uint32_t Pull;
uint32_t Speed;
} GPIO_InitTypeDef;
3.按键点亮LED灯(轮询法)
输入(按键):
- KEY1:PA0
- KEY2:PA1
输出(LED灯):
- LED1:PB8
- LED2:PB9
c
#define KEY_ON 0
#define KEY_OFF 1
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
if( HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == GPIO_PIN_RESET)
{
/* 按键按下 */
return KEY_ON;
}
else
{
/* 按键松开 */
while(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET);
return KEY_OFF;
}
}
while (1)
{
/* USER CODE END WHILE */
if(Key_Scan(GPIOA,GPIO_PIN_0) == KEY_ON)
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
if(Key_Scan(GPIOA,GPIO_PIN_1) == KEY_ON)
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
/* USER CODE BEGIN 3 */
}
4.按键点亮LED灯(中断法)
-
配置时钟
-
配置GPIO口
-
使能中断
-
配置工程
cvoid HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { switch(GPIO_Pin) { HAL_Delay(50); case GPIO_PIN_0: if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET) HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8); break; case GPIO_PIN_1: if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==GPIO_PIN_RESET) HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9); break; } }