在讀題過程中發現本次使用的是串口2,需要配置串口2。
?但在查看產品手冊時發現PA14同時也是SWCLK。
所以在使用串口2時需要拔下跳線帽去連接CH340。
可能是用到串口2的緣故,在燒錄時發現報了一個錯誤。這時我們要想燒錄得按著復位鍵去點擊燒錄,點完后就松開復位鍵就可以燒錄成功。
使用串口時記得打開串口中斷,否則無法接收到字符。
LED部分運行代碼:
?
void ledProc(void)
{if((uwTick - uwTick_led_set_point) < 200) return;uwTick_led_set_point = uwTick;if((uwTick - uwTick_led_time_point) >= 1000){uwTick_led_time_point = uwTick;uc_led ^= 0x01;}if(change_state == 1){if(resersal_count--){uc_led ^= 0x02;}if(resersal_count == 0){change_state = 0;resersal_count = 10;uc_led = 0;}}if(change_rx_state == 1){if(resersal_rx_count--){uc_led ^= 0x04;}if(resersal_rx_count == 0){change_rx_state = 0;resersal_rx_count = 10;uc_led = 0;}}ledDisp(uc_led);
}
?LED2與LED3的狀態變量,在等級發生改變和串口接收到字符時發生改變。
EEPROM部分代碼:
iic24c02Read(hold_eeprom_string, 0, 3);lecel_grade_hold_one = hold_eeprom_string[0];lecel_grade_hold_two = hold_eeprom_string[1];lecel_grade_hold_three = hold_eeprom_string[2];
if(key_down == 1){i2c24c02Write(&lecel_grade_hold_one, 0, 1);HAL_Delay(1);i2c24c02Write(&lecel_grade_hold_two, 1, 1);HAL_Delay(1);i2c24c02Write(&lecel_grade_hold_three, 2, 1);HAL_Delay(1);LCD_Clear(Black);interface = 0;}
LCD的高亮顯示部分代碼:
case 1:sprintf((char *)lcd_disp_string, " ParameterSetup ");LCD_DisplayStringLine(Line1, lcd_disp_string);sprintf((char *)lcd_disp_string, " Threshold1:%dcm ", lecel_grade_hold_one);if(select_bright_hold == 1)LCD_SetTextColor(Green);LCD_DisplayStringLine(Line3, lcd_disp_string);LCD_SetTextColor(White);sprintf((char *)lcd_disp_string, " Threshold2:%dcm ", lecel_grade_hold_two);if(select_bright_hold == 2)LCD_SetTextColor(Green);LCD_DisplayStringLine(Line4, lcd_disp_string);LCD_SetTextColor(White);sprintf((char *)lcd_disp_string, " Threshold3:%dcm ", lecel_grade_hold_three);if(select_bright_hold == 3)LCD_SetTextColor(Green);LCD_DisplayStringLine(Line5, lcd_disp_string);LCD_SetTextColor(White);break;
背景高亮與文字相同。
串口發送數據到PC部分代碼:
?在下一次等級變化發生前,將現在的等級存入變量中,以便下次比較。
lecel_grade_old = lecel_grade;if(h_int <= lecel_grade_hold_one)lecel_grade = 0;else if((h_int > lecel_grade_hold_one) && (h_int <= lecel_grade_hold_two))lecel_grade = 1;else if((h_int > lecel_grade_hold_two) && (h_int <= lecel_grade_hold_three))lecel_grade = 2;elselecel_grade = 3;
if(lecel_grade > lecel_grade_old){sprintf(str, "A:H%d+L%d+U\r\n", h_int, lecel_grade);HAL_UART_Transmit(&huart2,(unsigned char *)str, strlen(str), 50);change_state = 1;}else if(lecel_grade < lecel_grade_old){sprintf(str, "A:H%d+L%d+D\r\n", h_int, lecel_grade);HAL_UART_Transmit(&huart2,(unsigned char *)str, strlen(str), 50);change_state = 1;}
完整代碼:
嵌入式系統開發-STM32液位檢測報警系統設計-藍橋杯第七屆省賽真題解析與參考代碼資源-CSDN文庫