第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();

 

posted @ 2023-04-07 00:02  Euphonium611  阅读(55)  评论(1编辑  收藏  举报