在读题过程中发现本次使用的是串口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;
else
lecel_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;
}
完整代码: