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(