这是本文档旧的修订版!
银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
技术论坛 | http://www.eeschool.org | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-07-03 | gingko | 初次建立 |
int main(void) { static int led_work_status = 0;//三色LED灯工作状态 static int key_status = KEY_UP;//按键松开状态 /* 配置MCU */ /* 重置所有外围设备,初始化Flash接口和Systick */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化所有已配置的外围设备 */ MX_GPIO_Init(); LED_RED_ON; //初始化LED状态,红灯亮 /* 无限循环 */ //按键按下一次切换一次LED状态 while (1) { if(ARM_KEY_STATE == KEY_UP)key_status = KEY_UP; if(key_status == KEY_UP){ if(ARM_KEY_STATE == KEY_DOWN){ HAL_Delay(20); //按键消抖 if(ARM_KEY_STATE == KEY_DOWN){ key_status = KEY_DOWN; led_work_status += 1; if(led_work_status > 2)led_work_status = 0; //操作LED switch(led_work_status){ case 0: LED_RED_ON; LED_GREEN_OFF; LED_BLUE_OFF; break; case 1: LED_RED_OFF; LED_GREEN_ON; LED_BLUE_OFF; break; case 2: LED_RED_OFF; LED_GREEN_OFF; LED_BLUE_ON; break; default: break; } } } } } }
/*引脚对应 PB2------------ARM_LED_RED (红色LED) PA9------------ARM_LED_BLUE(蓝色LED) PA10-----------ARM_LED_GREEN(绿色LED) PB9------------ARM_KEY(ARM按键) */ /** 将引脚配置为 * Analog * Input * Output * EVENT_OUT * EXTI */ void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; /* GPIO端口时钟使能 */ __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /*配置 PB2引脚输出高电平 */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); /*配置PA9、PA10引脚输出高电平 */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET); /*配置GPIO引脚:PB2 */ GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//引脚输出模式 GPIO_InitStruct.Pull = GPIO_PULLUP; //上拉输出 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;//最大输出速度 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /*配置GPIO引脚: PA9 PA10 */ GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*配置GPIO引脚: PB9,ARM_KEY引脚 */ GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;//输入模式 GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) { /* 检查参数 */ assert_param(IS_GPIO_PIN(GPIO_Pin)); assert_param(IS_GPIO_PIN_ACTION(PinState)); if(PinState != GPIO_PIN_RESET) { GPIOx->BSRR = GPIO_Pin; } else { GPIOx->BSRR = (uint32_t)GPIO_Pin << 16; }
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { GPIO_PinState bitstatus; /* 检查参数 */ assert_param(IS_GPIO_PIN(GPIO_Pin)); if((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET)//判断引脚状态 { bitstatus = GPIO_PIN_SET; } else { bitstatus = GPIO_PIN_RESET; } return bitstatus;//返回引脚状态 }
#define LED_RED_ON HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2,GPIO_PIN_RESET) #define LED_RED_OFF HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2,GPIO_PIN_SET) #define LED_BLUE_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,GPIO_PIN_RESET) #define LED_BLUE_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,GPIO_PIN_SET) #define LED_GREEN_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10,GPIO_PIN_RESET) #define LED_GREEN_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10,GPIO_PIN_SET) #define ARM_KEY_STATE HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_9) #define KEY_UP GPIO_PIN_SET #define KEY_DOWN GPIO_PIN_RESET