1 配置时钟
配置RCC。
配置 SYS。将Timebase Source配置为TIM1, SysTick留给FreeRTOS用。
注意: 由于第一次配置的时候忘记配置这个步骤,导致工程第一次烧录成功后,后面一直无法烧录,报以下错误:
keil no target connect
Error: Flash Download failed - Target DLL has been cancelled
解决方案:BOOT0拉高, BOOT1拉低,重新上电烧录,烧录成功后断电,再把BOOT0拉低,之后就可以重新烧录了。
配置系统时钟。
2 配置GPIO
配置控制 LED 的GPIO.
LED_R – PB0: GPIO_Output
LED_G – PB1: GPIO_Output
LED_B – PB5: GPIO_Output
鼠标左键点击对应的引脚,选择 GPIO_Output.
所有GPIO输出默认电平为高,推挽输出,带上拉,低速。因为LED另一端连接3.3V电源,所以配置为高电平,默认不点亮LED。
流水灯代码:
uint16_t time = 100;HAL_GPIO_WritePin(GPIOB, LED_R_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, LED_G_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, LED_B_Pin, GPIO_PIN_SET);HAL_Delay(time);HAL_GPIO_WritePin(GPIOB, LED_R_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, LED_G_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, LED_B_Pin, GPIO_PIN_SET);HAL_Delay(time);HAL_GPIO_WritePin(GPIOB, LED_R_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, LED_G_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, LED_B_Pin, GPIO_PIN_RESET);HAL_Delay(time);
3 配置按键
3.1 轮询方式
Key1 – PA0
Key2 – PG15
Key3 – PC13
Key4 – PE3
int keyPoll(void)
{if (HAL_GPIO_ReadPin(KEY1_UP_GPIO_Port, KEY1_UP_Pin) == GPIO_PIN_RESET) {HAL_Delay(5); //延时 5ms, 按键消抖 if(HAL_GPIO_ReadPin(KEY1_UP_GPIO_Port, KEY1_UP_Pin) == GPIO_PIN_RESET) {printf("KEY1_UP is pressed\r\n"); } }if (HAL_GPIO_ReadPin(KEY2_DOWN_GPIO_Port, KEY2_DOWN_Pin) == GPIO_PIN_RESET) {HAL_Delay(5);if(HAL_GPIO_ReadPin(KEY2_DOWN_GPIO_Port, KEY2_DOWN_Pin) == GPIO_PIN_RESET) {printf("KEY1_DOWN is pressed\r\n"); }}if (HAL_GPIO_ReadPin(KEY3_LEFT_GPIO_Port, KEY3_LEFT_Pin) == GPIO_PIN_RESET) {HAL_Delay(5);if(HAL_GPIO_ReadPin(KEY3_LEFT_GPIO_Port, KEY3_LEFT_Pin) == GPIO_PIN_RESET) {printf("KEY1_LEFT is pressed\r\n"); }}if (HAL_GPIO_ReadPin(KEY4_RIGHT_GPIO_Port, KEY4_RIGHT_Pin) == GPIO_PIN_RESET) {HAL_Delay(5);if(