回答

收藏

《2023 DigiKey 汽车应用创意挑战赛》CAN通信显示控制器

#竞赛 #竞赛 1997 人阅读 | 0 人回复 | 2024-01-19

本帖最后由 TLLED 于 2024-1-19 10:40 编辑

一、项目名称:

CAN通信显示控制器

二、项目概述:

       本系统是基于M7内核的STM32H7B3主芯片,主频可达280MHz,内部有两路FDCAN,使用FDCAN1与外部CAN设备进行通信,接收CAN设备数据在显示屏上显示。系统移植了freeRTOS系统和LVGL图形库,采集了汽车的左右转向信号、刹车信号、车速、测距传感器的距离信号。

      2.1、系统框图

      控制去采集车辆的信号、速度信息及一些控制执行机构等,开发板显示屏显示要获取的信号和数据,通过显示屏可设置设备的参数和控制命令信息等,实现人机交互。
      

       2.2、创建任务

       freeRTOS系统创建3个任务
      
  
    2.3、freeRTOS部分代码
  1. void task_create(void)
  2. {
  3.         init_usart(115200);
  4.         lv_init();
  5.         tft_init();
  6.         init_touch();
  7.         
  8.         //start_task
  9.         xTaskCreate((TaskFunction_t )start_task,                  
  10.                                                         (const char*    )"start_task",               
  11.                                                         (uint16_t       )START_STK_SIZE,         
  12.                                                         (void*          )NULL,                  
  13.                                                         (UBaseType_t    )START_TASK_PRO,            
  14.                                                         (TaskHandle_t*  )&StartTask_Handler);   

  15.         vTaskStartScheduler();
  16. }

  17. void start_task(void *pvParameters)
  18. {
  19.         taskENTER_CRITICAL();
  20.         
  21.         BinarySemaphore = xSemaphoreCreateBinary();
  22.         if(BinarySemaphore == NULL)
  23.         {
  24.                         printf("Binary Sem Create Failed!\r\n");
  25.         }
  26.         //gui
  27.         xTaskCreate((TaskFunction_t )gui_task,                  
  28.                                                         (const char*    )"gui_task",               
  29.                                                         (uint16_t       )GUI_STK_SIZE,         
  30.                                                         (void*          )NULL,                  
  31.                                                         (UBaseType_t    )GUI_TASK_PRIO,            
  32.                                                         (TaskHandle_t*  )&GuiTask_Handler);  
  33.         //task1
  34.         xTaskCreate((TaskFunction_t )task1,                  
  35.                                                         (const char*    )"task1",               
  36.                                                         (uint16_t       )TASK1_STK_SIZE,         
  37.                                                         (void*          )NULL,                  
  38.                                                         (UBaseType_t    )TASK1_PRIO,            
  39.                                                         (TaskHandle_t*  )&Task1Task_Handler);   
  40.         //task2
  41.         xTaskCreate((TaskFunction_t )task2,                  
  42.                                                         (const char*    )"task2",               
  43.                                                         (uint16_t       )TASK2_STK_SIZE,        
  44.                                                         (void*          )NULL,                  
  45.                                                         (UBaseType_t    )TASK2_PRIO,            
  46.                                                         (TaskHandle_t*  )&Task2Task_Handler);
  47.         taskEXIT_CRITICAL();
  48.         vTaskDelete(StartTask_Handler);                                                
  49. }

  50. //gui
  51. void gui_task(void *pvParameters)
  52. {
  53.         setup_ui(&guider_ui);
  54.         events_init(&guider_ui);
  55.         while (1)
  56.         {
  57.                 lv_timer_handler();
  58.                 vTaskDelay(5);
  59.         }
  60. }

  61. //task1
  62. void task1(void *pvParameters)
  63. {
  64.         uint8_t d=0;
  65.         char buf[4];
  66.         while (1)
  67.         {
  68.                         printf("task1 run ...\r\n");
  69.                         led2_tog();
  70.                         d++;
  71.                         run_flag=1;
  72.                         vTaskDelay(100);
  73.         }
  74. }

  75. uint8_t fdcan_txdat[20];
  76. uint8_t fdcan_rxbuf[20];
  77. //task2
  78. void task2(void *pvParameters)
  79. {
  80.                 uint8_t jj=0;
  81.                 init_fdcan();
  82.     while (1)
  83.     {        
  84.                         jj++;
  85.                         fdcan_txdat[0]=jj;
  86.                         fdcan_txdat[1]=0x01;
  87.                         //fdcan_send_msg(fdcan_txdat, FDCAN_DLC_BYTES_8);
  88.                         if(fdcan_receive_msg(fdcan_rxbuf) !=0 )
  89.                         {
  90.                                 printf("canrx\r\n");
  91.                                 xSemaphoreGive( BinarySemaphore );        
  92.                         }
  93.                         led3_tog();
  94.                         //printf("task2 run ...\r\n");
  95.                         vTaskDelay(20);
  96.     }
  97. }
复制代码
  

三、作品实物图

  设备运行的界面1
   

   设备运行的界面2
   


四、演示视频

    视频:https://www.bilibili.com/video/BV1WK411e7u4/?share_source=copy_web&vd_source=5c43653ace8c8d4fcf66f8c04f6574a4

五、项目文档

    程序文档:
stm32h7b3i_freertos_lvgl8_3_prj_20210119-1.7z (16.19 MB, 下载次数: 11)

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条