第12届蓝桥杯嵌入式(不完整)
时间记录
4月7日晚 先写了一个LED_DISP的函数,对小灯进行了初始化。
4月8日早 初始化了LCD屏幕,然后写了单击按键的程序,一次成功~~以及将按键和屏幕显示相匹配
———————————————————吃饭—————————————————
4月8日午 开始编写串口,不太顺利
————————————————小组开会和做物理实验————————————
4月8日晚 emmmm得好好复习了,第十二届的蓝桥杯的的代码就且烂尾吧(
串口碰到的问题
回调函数记不得了,不过在stm32g4xx_hal_uart.c中找到了,顺带一提按键的回调函数在stm32g4xx_hal_tim.c中(两者命名比较相似)
然后串口的接收还是和中断有关的HAL_UART_Receive_IT
调用自己编写的串口函数的时候不能直接调用,而是要判断一下是否接收完全,例如
1 /* USER CODE BEGIN WHILE */ 2 while (1) 3 { 4 key_proc(); 5 lcd_proc(); 6 led_proc(); 7 if(rx_pointer>0) 8 { 9 uint16_t rx_pointer_temp = rx_pointer; 10 HAL_Delay(20); 11 if(rx_pointer_temp == rx_pointer) 12 { 13 usart_proc(); 14 } 15 } 16 /* USER CODE END WHILE */ 17 18 /* USER CODE BEGIN 3 */ 19 }
然后忘记怎么使用sscanf了,将字符串保存到字符串数组中时,不用&符号
sscanf(rxdata,"%4s:%4s:%12s",car_type,car_number,car_time);
然后学习了一个比较字符串是否一样的函数,感觉有点奇葩(,它是两个字符串如果一样返回0。()
1 if(rx_pointer==22) 2 { 3 sscanf(rxdata,"%4s:%4s:%12s",car_inf[cpoint].car_type,car_inf[cpoint].car_number,car_inf[cpoint].car_time); 4 if(!strcmp(car_inf[cpoint].car_type,"CNBR")) 5 { 6 CNBR_Data += 1; 7 IDLE_Data -= 1; 8 } 9 if(!strcmp(car_inf[cpoint].car_type,"VNBR")) 10 { 11 VNBR_Data += 1; 12 IDLE_Data -= 1; 13 } 14 cpoint++; 15 }
然后再学习一个取整数的方法
直接取整数部分——int i = 2.5;i = (int) 2.5;
取小于等于某数的整数值——floor(2.5) = 2;floor(-2.5) = -3 ;
取大于等于某数的整数值——ceil(2.5) = 3;ceil(-2.5) = -2 ;
取四舍五入的值——round();