本帖最后由 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部分代码 - void task_create(void)
- {
- init_usart(115200);
- lv_init();
- tft_init();
- init_touch();
-
- //start_task
- xTaskCreate((TaskFunction_t )start_task,
- (const char* )"start_task",
- (uint16_t )START_STK_SIZE,
- (void* )NULL,
- (UBaseType_t )START_TASK_PRO,
- (TaskHandle_t* )&StartTask_Handler);
- vTaskStartScheduler();
- }
- void start_task(void *pvParameters)
- {
- taskENTER_CRITICAL();
-
- BinarySemaphore = xSemaphoreCreateBinary();
- if(BinarySemaphore == NULL)
- {
- printf("Binary Sem Create Failed!\r\n");
- }
- //gui
- xTaskCreate((TaskFunction_t )gui_task,
- (const char* )"gui_task",
- (uint16_t )GUI_STK_SIZE,
- (void* )NULL,
- (UBaseType_t )GUI_TASK_PRIO,
- (TaskHandle_t* )&GuiTask_Handler);
- //task1
- xTaskCreate((TaskFunction_t )task1,
- (const char* )"task1",
- (uint16_t )TASK1_STK_SIZE,
- (void* )NULL,
- (UBaseType_t )TASK1_PRIO,
- (TaskHandle_t* )&Task1Task_Handler);
- //task2
- xTaskCreate((TaskFunction_t )task2,
- (const char* )"task2",
- (uint16_t )TASK2_STK_SIZE,
- (void* )NULL,
- (UBaseType_t )TASK2_PRIO,
- (TaskHandle_t* )&Task2Task_Handler);
- taskEXIT_CRITICAL();
- vTaskDelete(StartTask_Handler);
- }
- //gui
- void gui_task(void *pvParameters)
- {
- setup_ui(&guider_ui);
- events_init(&guider_ui);
- while (1)
- {
- lv_timer_handler();
- vTaskDelay(5);
- }
- }
- //task1
- void task1(void *pvParameters)
- {
- uint8_t d=0;
- char buf[4];
- while (1)
- {
- printf("task1 run ...\r\n");
- led2_tog();
- d++;
- run_flag=1;
- vTaskDelay(100);
- }
- }
- uint8_t fdcan_txdat[20];
- uint8_t fdcan_rxbuf[20];
- //task2
- void task2(void *pvParameters)
- {
- uint8_t jj=0;
- init_fdcan();
- while (1)
- {
- jj++;
- fdcan_txdat[0]=jj;
- fdcan_txdat[1]=0x01;
- //fdcan_send_msg(fdcan_txdat, FDCAN_DLC_BYTES_8);
- if(fdcan_receive_msg(fdcan_rxbuf) !=0 )
- {
- printf("canrx\r\n");
- xSemaphoreGive( BinarySemaphore );
- }
- led3_tog();
- //printf("task2 run ...\r\n");
- vTaskDelay(20);
- }
- }
复制代码
三、作品实物图
设备运行的界面1
设备运行的界面2
四、演示视频
视频:https://www.bilibili.com/video/BV1WK411e7u4/?share_source=copy_web&vd_source=5c43653ace8c8d4fcf66f8c04f6574a4
五、项目文档
|