基本功能完成
This commit is contained in:
parent
093acec059
commit
16cebb3314
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -6,6 +6,7 @@
|
||||
"lv_port_disp.h": "c",
|
||||
"lvgl.h": "c",
|
||||
"gpio.h": "c",
|
||||
"lcd_font.h": "c"
|
||||
"lcd_font.h": "c",
|
||||
"can.h": "c"
|
||||
}
|
||||
}
|
@ -3283,7 +3283,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>User/device</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@ -3358,18 +3358,6 @@
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\User\task\adc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>adc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>11</GroupNumber>
|
||||
<FileNumber>253</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\User\task\can.c</PathWithFileName>
|
||||
<FilenameWithoutPath>can.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
@ -3377,7 +3365,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>11</GroupNumber>
|
||||
<FileNumber>254</FileNumber>
|
||||
<FileNumber>253</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -3389,7 +3377,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>11</GroupNumber>
|
||||
<FileNumber>255</FileNumber>
|
||||
<FileNumber>254</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -3401,7 +3389,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>11</GroupNumber>
|
||||
<FileNumber>256</FileNumber>
|
||||
<FileNumber>255</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -3413,7 +3401,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>11</GroupNumber>
|
||||
<FileNumber>257</FileNumber>
|
||||
<FileNumber>256</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -3425,7 +3413,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>11</GroupNumber>
|
||||
<FileNumber>258</FileNumber>
|
||||
<FileNumber>257</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -3435,6 +3423,18 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>11</GroupNumber>
|
||||
<FileNumber>258</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\User\task\disp.c</PathWithFileName>
|
||||
<FilenameWithoutPath>disp.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
|
@ -2571,11 +2571,6 @@
|
||||
<Group>
|
||||
<GroupName>User/task</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>adc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\User\task\adc.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>can.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
@ -2606,6 +2601,11 @@
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\User\task\user_task.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>disp.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\User\task\disp.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
135
README.md
135
README.md
@ -1,22 +1,119 @@
|
||||
# Sick(DT35)电科--4-20mA_Acquisition_System
|
||||
|
||||
## can
|
||||
- id :0x001;在User\task\can.c中修改结构体默认值
|
||||
- 数据帧
|
||||
- 标准帧
|
||||
- DLC 8位
|
||||
|
||||
数据为1,2位拼一个uint16。发送的是原始数据
|
||||
频率100hz
|
||||
|
||||
## uart
|
||||
# Micro_usb :100hz float型:计算后的毫米数据
|
||||
需要修改User\component\user_math.c中的标定函数。
|
||||
# Mini_Core 核心板 STM32F105RBT6
|
||||
|
||||
|
||||
## Led
|
||||
LED1 闪烁表示线程正常
|
||||
LED2 闪烁表示can发送中
|
||||
适配扩展版 -- Sick 中心板
|
||||
|
||||
## TODO :
|
||||
自动化标定
|
||||
---
|
||||
|
||||

|
||||
|
||||
## 硬件说明
|
||||
|
||||
### 核心板
|
||||
- **型号**: STM32F105RBT6
|
||||
- **扩展功能**: Sick 数据处理中心板。
|
||||
|
||||

|
||||
|
||||
### 扩展版
|
||||
- **CAN1**: 接收 Sick 数据。
|
||||
- **CAN2**: 发送 Sick 数据。
|
||||
- **USART3**: PC通信。
|
||||
- **USART2**: 串口通信。
|
||||
|
||||

|
||||
|
||||
## 功能概述
|
||||
|
||||
### CAN 通信
|
||||
- **CAN1**: 接收 4 个 Sick 数据帧(ID: `0x101`, `0x102`, `0x103`, `0x104`)。
|
||||
- **CAN2**: 发送格式为 `Sick1 Sick2 Sick3 Sick4` 的数据帧。
|
||||
- **ID**: `0x110`
|
||||
- **帧类型**: 标准帧
|
||||
- **数据长度**: DLC 8 位
|
||||
- **频率**: 100Hz
|
||||
|
||||
### UART 通信
|
||||
- **Micro USB**: 数据发送频率为 100Hz。
|
||||
|
||||
### LED 指示
|
||||
- 绿色 LED 闪烁,指示系统运行状态。
|
||||
|
||||
---
|
||||
|
||||
## 当前进展
|
||||
|
||||
### 已实现
|
||||
- CAN1 接收 Sick 数据。
|
||||
- CAN2 发送 Sick 数据。
|
||||
- 串口通信功能正常运行。
|
||||
|
||||
### 待完成
|
||||
1. **屏幕适配**:
|
||||
- 当前屏幕尺寸为 1.14 英寸,需适配至 0.96 英寸。
|
||||
2. **按键功能**:
|
||||
- 按键功能尚未实现。
|
||||
3. **LVGL 绘制优化**:
|
||||
- LVGL 的绘制功能未使用 DMA。
|
||||
4. **串口 DMA**:
|
||||
- USART3 的 DMA 功能未启用(启用后系统异常,需要进一步调试)。
|
||||
|
||||
---
|
||||
|
||||
## 系统架构
|
||||
|
||||
### 数据流
|
||||
1. **CAN1 接收**:
|
||||
- 接收 Sick 数据帧并存储到消息队列。
|
||||
2. **CAN2 发送**:
|
||||
- 从消息队列读取 Sick 数据并发送。
|
||||
3. **UART 发送**:
|
||||
- 通过 USART3 以 100Hz 频率发送 Sick 数据。
|
||||
|
||||
### 任务分配
|
||||
- **Task_Can**:
|
||||
- 初始化 CAN。
|
||||
- 接收 CAN 数据并存储到消息队列。
|
||||
- 定时发送 Sick 数据。
|
||||
- **Task_PC**:
|
||||
- 从消息队列读取 Sick 数据。
|
||||
- 通过 USART3 发送数据。
|
||||
- **Task_Disp**:
|
||||
- 初始化屏幕和 LVGL。
|
||||
- 显示 Sick 数据。
|
||||
|
||||
---
|
||||
|
||||
## 硬件说明
|
||||
|
||||
### 核心板
|
||||
- **型号**: STM32F105RBT6
|
||||
- **扩展功能**: Sick 数据处理中心板。
|
||||
|
||||
### 通信接口
|
||||
- **CAN1**: 接收 Sick 数据。
|
||||
- **CAN2**: 发送 Sick 数据。
|
||||
- **USART3**: 串口通信。
|
||||
|
||||
---
|
||||
|
||||
## 使用说明
|
||||
|
||||
1. **编译与烧录**:
|
||||
- 使用 Keil 或 STM32CubeIDE 编译项目。
|
||||
- 通过 ST-Link 烧录固件到核心板。
|
||||
|
||||
2. **运行环境**:
|
||||
- 供电方式: Micro USB 或外部电源。
|
||||
- 数据通信: 通过 CAN 和 UART 接口。
|
||||
|
||||
3. **调试**:
|
||||
- 使用串口调试工具查看 Sick 数据发送情况。
|
||||
- 使用 CAN 分析仪监控 CAN 数据帧。
|
||||
|
||||
---
|
||||
|
||||
## 贡献者
|
||||
- **作者**: Robofish
|
||||
- **项目名称**: Mini_Core
|
||||
- **版本**: v1.0
|
@ -14,7 +14,7 @@
|
||||
#include "component\user_math.h"
|
||||
|
||||
/* Private define ----------------------------------------------------------- */
|
||||
#define CAN_Mini_Croe (0x002)
|
||||
#define CAN_Mini_Croe (0x110)
|
||||
/* Private macro ------------------------------------------------------------ */
|
||||
/* Private typedef ---------------------------------------------------------- */
|
||||
/* Private variables -------------------------------------------------------- */
|
||||
|
@ -20,13 +20,6 @@ static void LCD_WriteData(uint8_t data) {
|
||||
LCD_CS_HIGH();
|
||||
}
|
||||
|
||||
// // 写多个数据到LCD
|
||||
// static void LCD_WriteDataBuffer(uint8_t *data, uint16_t size) {
|
||||
// LCD_DC_HIGH();
|
||||
// LCD_CS_LOW();
|
||||
// HAL_SPI_Transmit(&hspi1, data, size, HAL_MAX_DELAY);
|
||||
// LCD_CS_HIGH();
|
||||
// }
|
||||
|
||||
// 使用 DMA 写多个数据到 LCD
|
||||
static void LCD_WriteDataBuffer_DMA(uint8_t *data, uint16_t size) {
|
||||
@ -174,40 +167,40 @@ void LCD_DrawPixel(uint16_t x, uint16_t y, uint16_t color) {
|
||||
LCD_WriteDataBuffer(color_data, 2);
|
||||
}
|
||||
|
||||
void LCD_DrawChar(uint16_t x, uint16_t y, char ch, uint16_t color, uint16_t bgColor) {
|
||||
const unsigned char *font = ascii_1206[ch - ' '];
|
||||
uint8_t char_buffer[FONT_WIDTH * FONT_HEIGHT * 2]; // 每个像素 2 字节
|
||||
uint32_t index = 0;
|
||||
// void LCD_DrawChar(uint16_t x, uint16_t y, char ch, uint16_t color, uint16_t bgColor) {
|
||||
// const unsigned char *font = ascii_1206[ch - ' '];
|
||||
// uint8_t char_buffer[FONT_WIDTH * FONT_HEIGHT * 2]; // 每个像素 2 字节
|
||||
// uint32_t index = 0;
|
||||
|
||||
// 将字符数据按列存储到缓冲区(逆时针旋转 90 度 + 左右镜像)
|
||||
for (uint8_t i = 0; i < FONT_WIDTH; i++) { // 遍历字体宽度(列)
|
||||
for (uint8_t j = 0; j < FONT_HEIGHT; j++) { // 遍历字体高度(行)
|
||||
// 左右镜像:将列索引从 FONT_WIDTH - 1 - i 开始
|
||||
if (font[j] & (1 << (FONT_WIDTH - 1 - i))) { // 判断像素是否为前景色
|
||||
char_buffer[index++] = color >> 8;
|
||||
char_buffer[index++] = color & 0xFF;
|
||||
} else { // 背景色
|
||||
char_buffer[index++] = bgColor >> 8;
|
||||
char_buffer[index++] = bgColor & 0xFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
// // 将字符数据按列存储到缓冲区(逆时针旋转 90 度 + 左右镜像)
|
||||
// for (uint8_t i = 0; i < FONT_WIDTH; i++) { // 遍历字体宽度(列)
|
||||
// for (uint8_t j = 0; j < FONT_HEIGHT; j++) { // 遍历字体高度(行)
|
||||
// // 左右镜像:将列索引从 FONT_WIDTH - 1 - i 开始
|
||||
// if (font[j] & (1 << (FONT_WIDTH - 1 - i))) { // 判断像素是否为前景色
|
||||
// char_buffer[index++] = color >> 8;
|
||||
// char_buffer[index++] = color & 0xFF;
|
||||
// } else { // 背景色
|
||||
// char_buffer[index++] = bgColor >> 8;
|
||||
// char_buffer[index++] = bgColor & 0xFF;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// 设置显示窗口(注意旋转后宽高互换)
|
||||
LCD_SetAddressWindow(x, y, FONT_HEIGHT, FONT_WIDTH);
|
||||
// // 设置显示窗口(注意旋转后宽高互换)
|
||||
// LCD_SetAddressWindow(x, y, FONT_HEIGHT, FONT_WIDTH);
|
||||
|
||||
// 使用 DMA 传输字符像素数据
|
||||
LCD_WriteDataBuffer_DMA(char_buffer, sizeof(char_buffer));
|
||||
}
|
||||
// // 使用 DMA 传输字符像素数据
|
||||
// LCD_WriteDataBuffer_DMA(char_buffer, sizeof(char_buffer));
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// 绘制字符串(沿y轴绘制)
|
||||
void LCD_DrawString(uint16_t x, uint16_t y, const char *str, uint16_t color, uint16_t bgColor) {
|
||||
y = LCD_HEIGHT-7 -y;
|
||||
while (*str) {
|
||||
LCD_DrawChar(x, y, *str, color, bgColor);
|
||||
y -= FONT_WIDTH; // 每个字符向下移动一个字符宽度
|
||||
str++;
|
||||
}
|
||||
}
|
||||
// void LCD_DrawString(uint16_t x, uint16_t y, const char *str, uint16_t color, uint16_t bgColor) {
|
||||
// y = LCD_HEIGHT-7 -y;
|
||||
// while (*str) {
|
||||
// LCD_DrawChar(x, y, *str, color, bgColor);
|
||||
// y -= FONT_WIDTH; // 每个字符向下移动一个字符宽度
|
||||
// str++;
|
||||
// }
|
||||
// }
|
||||
|
@ -31,6 +31,6 @@
|
||||
void LCD_Init(void);
|
||||
void LCD_Clear(uint16_t color);
|
||||
void LCD_DrawPixel(uint16_t x, uint16_t y, uint16_t color);
|
||||
void LCD_DrawChar(uint16_t x, uint16_t y, char ch, uint16_t color, uint16_t bgColor);
|
||||
void LCD_DrawString(uint16_t x, uint16_t y, const char *str, uint16_t color, uint16_t bgColor);
|
||||
// void LCD_DrawChar(uint16_t x, uint16_t y, char ch, uint16_t color, uint16_t bgColor);
|
||||
// void LCD_DrawString(uint16_t x, uint16_t y, const char *str, uint16_t color, uint16_t bgColor);
|
||||
#endif // __LCD_H
|
||||
|
@ -1,104 +1,104 @@
|
||||
#pragma once
|
||||
// #pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
// #include <stdint.h>
|
||||
|
||||
#define FONT_WIDTH 6
|
||||
#define FONT_HEIGHT 12
|
||||
// #define FONT_WIDTH 6
|
||||
// #define FONT_HEIGHT 12
|
||||
|
||||
const unsigned char ascii_1206[][12]={
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
|
||||
{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x00,0x00},/*"!",1*/
|
||||
{0x14,0x14,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
|
||||
{0x00,0x00,0x0A,0x0A,0x1F,0x0A,0x0A,0x1F,0x0A,0x0A,0x00,0x00},/*"#",3*/
|
||||
{0x00,0x04,0x0E,0x15,0x05,0x06,0x0C,0x14,0x15,0x0E,0x04,0x00},/*"$",4*/
|
||||
{0x00,0x00,0x12,0x15,0x0D,0x15,0x2E,0x2C,0x2A,0x12,0x00,0x00},/*"%",5*/
|
||||
{0x00,0x00,0x04,0x0A,0x0A,0x36,0x15,0x15,0x29,0x16,0x00,0x00},/*"&",6*/
|
||||
{0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
|
||||
{0x10,0x08,0x08,0x04,0x04,0x04,0x04,0x04,0x08,0x08,0x10,0x00},/*"(",8*/
|
||||
{0x02,0x04,0x04,0x08,0x08,0x08,0x08,0x08,0x04,0x04,0x02,0x00},/*")",9*/
|
||||
{0x00,0x00,0x00,0x04,0x15,0x0E,0x0E,0x15,0x04,0x00,0x00,0x00},/*"*",10*/
|
||||
{0x00,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00,0x00,0x00},/*"+",11*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x01,0x00},/*",",12*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00},/*".",14*/
|
||||
{0x00,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x01,0x00},/*"/",15*/
|
||||
{0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x11,0x0E,0x00,0x00},/*"0",16*/
|
||||
{0x00,0x00,0x04,0x06,0x04,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"1",17*/
|
||||
{0x00,0x00,0x0E,0x11,0x11,0x08,0x04,0x02,0x01,0x1F,0x00,0x00},/*"2",18*/
|
||||
{0x00,0x00,0x0E,0x11,0x10,0x0C,0x10,0x10,0x11,0x0E,0x00,0x00},/*"3",19*/
|
||||
{0x00,0x00,0x08,0x0C,0x0C,0x0A,0x09,0x1F,0x08,0x1C,0x00,0x00},/*"4",20*/
|
||||
{0x00,0x00,0x1F,0x01,0x01,0x0F,0x11,0x10,0x11,0x0E,0x00,0x00},/*"5",21*/
|
||||
{0x00,0x00,0x0C,0x12,0x01,0x0D,0x13,0x11,0x11,0x0E,0x00,0x00},/*"6",22*/
|
||||
{0x00,0x00,0x1E,0x10,0x08,0x08,0x04,0x04,0x04,0x04,0x00,0x00},/*"7",23*/
|
||||
{0x00,0x00,0x0E,0x11,0x11,0x0E,0x11,0x11,0x11,0x0E,0x00,0x00},/*"8",24*/
|
||||
{0x00,0x00,0x0E,0x11,0x11,0x19,0x16,0x10,0x09,0x06,0x00,0x00},/*"9",25*/
|
||||
{0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00},/*":",26*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x04,0x00},/*";",27*/
|
||||
{0x00,0x00,0x10,0x08,0x04,0x02,0x02,0x04,0x08,0x10,0x00,0x00},/*"<",28*/
|
||||
{0x00,0x00,0x00,0x00,0x3F,0x00,0x3F,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
|
||||
{0x00,0x00,0x02,0x04,0x08,0x10,0x10,0x08,0x04,0x02,0x00,0x00},/*">",30*/
|
||||
{0x00,0x00,0x0E,0x11,0x11,0x08,0x04,0x04,0x00,0x04,0x00,0x00},/*"?",31*/
|
||||
{0x00,0x00,0x1C,0x22,0x29,0x2D,0x2D,0x1D,0x22,0x1C,0x00,0x00},/*"@",32*/
|
||||
{0x00,0x00,0x04,0x04,0x0C,0x0A,0x0A,0x1E,0x12,0x33,0x00,0x00},/*"A",33*/
|
||||
{0x00,0x00,0x0F,0x12,0x12,0x0E,0x12,0x12,0x12,0x0F,0x00,0x00},/*"B",34*/
|
||||
{0x00,0x00,0x1E,0x11,0x01,0x01,0x01,0x01,0x11,0x0E,0x00,0x00},/*"C",35*/
|
||||
{0x00,0x00,0x0F,0x12,0x12,0x12,0x12,0x12,0x12,0x0F,0x00,0x00},/*"D",36*/
|
||||
{0x00,0x00,0x1F,0x12,0x0A,0x0E,0x0A,0x02,0x12,0x1F,0x00,0x00},/*"E",37*/
|
||||
{0x00,0x00,0x1F,0x12,0x0A,0x0E,0x0A,0x02,0x02,0x07,0x00,0x00},/*"F",38*/
|
||||
{0x00,0x00,0x1C,0x12,0x01,0x01,0x39,0x11,0x12,0x0C,0x00,0x00},/*"G",39*/
|
||||
{0x00,0x00,0x33,0x12,0x12,0x1E,0x12,0x12,0x12,0x33,0x00,0x00},/*"H",40*/
|
||||
{0x00,0x00,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"I",41*/
|
||||
{0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x07},/*"J",42*/
|
||||
{0x00,0x00,0x37,0x12,0x0A,0x06,0x0A,0x12,0x12,0x37,0x00,0x00},/*"K",43*/
|
||||
{0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x22,0x3F,0x00,0x00},/*"L",44*/
|
||||
{0x00,0x00,0x3B,0x1B,0x1B,0x1B,0x15,0x15,0x15,0x35,0x00,0x00},/*"M",45*/
|
||||
{0x00,0x00,0x3B,0x12,0x16,0x16,0x1A,0x1A,0x12,0x17,0x00,0x00},/*"N",46*/
|
||||
{0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x11,0x0E,0x00,0x00},/*"O",47*/
|
||||
{0x00,0x00,0x0F,0x12,0x12,0x0E,0x02,0x02,0x02,0x07,0x00,0x00},/*"P",48*/
|
||||
{0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x17,0x19,0x0E,0x18,0x00},/*"Q",49*/
|
||||
{0x00,0x00,0x0F,0x12,0x12,0x0E,0x0A,0x12,0x12,0x37,0x00,0x00},/*"R",50*/
|
||||
{0x00,0x00,0x1E,0x11,0x01,0x06,0x08,0x10,0x11,0x0F,0x00,0x00},/*"S",51*/
|
||||
{0x00,0x00,0x1F,0x15,0x04,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"T",52*/
|
||||
{0x00,0x00,0x33,0x12,0x12,0x12,0x12,0x12,0x12,0x0C,0x00,0x00},/*"U",53*/
|
||||
{0x00,0x00,0x33,0x12,0x12,0x0A,0x0A,0x0C,0x04,0x04,0x00,0x00},/*"V",54*/
|
||||
{0x00,0x00,0x15,0x15,0x15,0x15,0x0E,0x0A,0x0A,0x0A,0x00,0x00},/*"W",55*/
|
||||
{0x00,0x00,0x1B,0x0A,0x0A,0x04,0x04,0x0A,0x0A,0x1B,0x00,0x00},/*"X",56*/
|
||||
{0x00,0x00,0x1B,0x0A,0x0A,0x0A,0x04,0x04,0x04,0x0E,0x00,0x00},/*"Y",57*/
|
||||
{0x00,0x00,0x1F,0x09,0x08,0x04,0x04,0x02,0x12,0x1F,0x00,0x00},/*"Z",58*/
|
||||
{0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1C,0x00},/*"[",59*/
|
||||
{0x00,0x02,0x02,0x04,0x04,0x04,0x08,0x08,0x08,0x10,0x10,0x00},/*"\",60*/
|
||||
{0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x00},/*"]",61*/
|
||||
{0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F},/*"_",63*/
|
||||
{0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x1C,0x12,0x3C,0x00,0x00},/*"a",65*/
|
||||
{0x00,0x03,0x02,0x02,0x02,0x0E,0x12,0x12,0x12,0x0E,0x00,0x00},/*"b",66*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x1C,0x12,0x02,0x12,0x0C,0x00,0x00},/*"c",67*/
|
||||
{0x00,0x18,0x10,0x10,0x10,0x1C,0x12,0x12,0x12,0x3C,0x00,0x00},/*"d",68*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x1E,0x02,0x1C,0x00,0x00},/*"e",69*/
|
||||
{0x00,0x18,0x24,0x04,0x04,0x1E,0x04,0x04,0x04,0x1E,0x00,0x00},/*"f",70*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x3C,0x12,0x0C,0x02,0x1C,0x22,0x1C},/*"g",71*/
|
||||
{0x00,0x03,0x02,0x02,0x02,0x0E,0x12,0x12,0x12,0x37,0x00,0x00},/*"h",72*/
|
||||
{0x00,0x04,0x04,0x00,0x00,0x06,0x04,0x04,0x04,0x0E,0x00,0x00},/*"i",73*/
|
||||
{0x00,0x08,0x08,0x00,0x00,0x0C,0x08,0x08,0x08,0x08,0x08,0x07},/*"j",74*/
|
||||
{0x00,0x03,0x02,0x02,0x02,0x1A,0x0A,0x06,0x0A,0x13,0x00,0x00},/*"k",75*/
|
||||
{0x00,0x07,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"l",76*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x0F,0x15,0x15,0x15,0x15,0x00,0x00},/*"m",77*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x37,0x00,0x00},/*"n",78*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x12,0x12,0x0C,0x00,0x00},/*"o",79*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x0E,0x02,0x07},/*"p",80*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x1C,0x12,0x12,0x12,0x1C,0x10,0x38},/*"q",81*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x1B,0x06,0x02,0x02,0x07,0x00,0x00},/*"r",82*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x1E,0x02,0x0C,0x10,0x1E,0x00,0x00},/*"s",83*/
|
||||
{0x00,0x00,0x00,0x04,0x04,0x1E,0x04,0x04,0x04,0x1C,0x00,0x00},/*"t",84*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x1B,0x12,0x12,0x12,0x3C,0x00,0x00},/*"u",85*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x1B,0x0A,0x0A,0x04,0x04,0x00,0x00},/*"v",86*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x0E,0x0A,0x0A,0x00,0x00},/*"w",87*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x1B,0x0A,0x04,0x0A,0x1B,0x00,0x00},/*"x",88*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x33,0x12,0x12,0x0C,0x08,0x04,0x03},/*"y",89*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x1E,0x08,0x04,0x04,0x1E,0x00,0x00},/*"z",90*/
|
||||
{0x18,0x08,0x08,0x08,0x08,0x0C,0x08,0x08,0x08,0x08,0x18,0x00},/*"{",91*/
|
||||
{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},/*"|",92*/
|
||||
{0x06,0x04,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x06,0x00},/*"}",93*/
|
||||
{0x16,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
|
||||
};
|
||||
// const unsigned char ascii_1206[][12]={
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
|
||||
// {0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x00,0x00},/*"!",1*/
|
||||
// {0x14,0x14,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
|
||||
// {0x00,0x00,0x0A,0x0A,0x1F,0x0A,0x0A,0x1F,0x0A,0x0A,0x00,0x00},/*"#",3*/
|
||||
// {0x00,0x04,0x0E,0x15,0x05,0x06,0x0C,0x14,0x15,0x0E,0x04,0x00},/*"$",4*/
|
||||
// {0x00,0x00,0x12,0x15,0x0D,0x15,0x2E,0x2C,0x2A,0x12,0x00,0x00},/*"%",5*/
|
||||
// {0x00,0x00,0x04,0x0A,0x0A,0x36,0x15,0x15,0x29,0x16,0x00,0x00},/*"&",6*/
|
||||
// {0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
|
||||
// {0x10,0x08,0x08,0x04,0x04,0x04,0x04,0x04,0x08,0x08,0x10,0x00},/*"(",8*/
|
||||
// {0x02,0x04,0x04,0x08,0x08,0x08,0x08,0x08,0x04,0x04,0x02,0x00},/*")",9*/
|
||||
// {0x00,0x00,0x00,0x04,0x15,0x0E,0x0E,0x15,0x04,0x00,0x00,0x00},/*"*",10*/
|
||||
// {0x00,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00,0x00,0x00},/*"+",11*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x01,0x00},/*",",12*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00},/*".",14*/
|
||||
// {0x00,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x01,0x00},/*"/",15*/
|
||||
// {0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x11,0x0E,0x00,0x00},/*"0",16*/
|
||||
// {0x00,0x00,0x04,0x06,0x04,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"1",17*/
|
||||
// {0x00,0x00,0x0E,0x11,0x11,0x08,0x04,0x02,0x01,0x1F,0x00,0x00},/*"2",18*/
|
||||
// {0x00,0x00,0x0E,0x11,0x10,0x0C,0x10,0x10,0x11,0x0E,0x00,0x00},/*"3",19*/
|
||||
// {0x00,0x00,0x08,0x0C,0x0C,0x0A,0x09,0x1F,0x08,0x1C,0x00,0x00},/*"4",20*/
|
||||
// {0x00,0x00,0x1F,0x01,0x01,0x0F,0x11,0x10,0x11,0x0E,0x00,0x00},/*"5",21*/
|
||||
// {0x00,0x00,0x0C,0x12,0x01,0x0D,0x13,0x11,0x11,0x0E,0x00,0x00},/*"6",22*/
|
||||
// {0x00,0x00,0x1E,0x10,0x08,0x08,0x04,0x04,0x04,0x04,0x00,0x00},/*"7",23*/
|
||||
// {0x00,0x00,0x0E,0x11,0x11,0x0E,0x11,0x11,0x11,0x0E,0x00,0x00},/*"8",24*/
|
||||
// {0x00,0x00,0x0E,0x11,0x11,0x19,0x16,0x10,0x09,0x06,0x00,0x00},/*"9",25*/
|
||||
// {0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00},/*":",26*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x04,0x00},/*";",27*/
|
||||
// {0x00,0x00,0x10,0x08,0x04,0x02,0x02,0x04,0x08,0x10,0x00,0x00},/*"<",28*/
|
||||
// {0x00,0x00,0x00,0x00,0x3F,0x00,0x3F,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
|
||||
// {0x00,0x00,0x02,0x04,0x08,0x10,0x10,0x08,0x04,0x02,0x00,0x00},/*">",30*/
|
||||
// {0x00,0x00,0x0E,0x11,0x11,0x08,0x04,0x04,0x00,0x04,0x00,0x00},/*"?",31*/
|
||||
// {0x00,0x00,0x1C,0x22,0x29,0x2D,0x2D,0x1D,0x22,0x1C,0x00,0x00},/*"@",32*/
|
||||
// {0x00,0x00,0x04,0x04,0x0C,0x0A,0x0A,0x1E,0x12,0x33,0x00,0x00},/*"A",33*/
|
||||
// {0x00,0x00,0x0F,0x12,0x12,0x0E,0x12,0x12,0x12,0x0F,0x00,0x00},/*"B",34*/
|
||||
// {0x00,0x00,0x1E,0x11,0x01,0x01,0x01,0x01,0x11,0x0E,0x00,0x00},/*"C",35*/
|
||||
// {0x00,0x00,0x0F,0x12,0x12,0x12,0x12,0x12,0x12,0x0F,0x00,0x00},/*"D",36*/
|
||||
// {0x00,0x00,0x1F,0x12,0x0A,0x0E,0x0A,0x02,0x12,0x1F,0x00,0x00},/*"E",37*/
|
||||
// {0x00,0x00,0x1F,0x12,0x0A,0x0E,0x0A,0x02,0x02,0x07,0x00,0x00},/*"F",38*/
|
||||
// {0x00,0x00,0x1C,0x12,0x01,0x01,0x39,0x11,0x12,0x0C,0x00,0x00},/*"G",39*/
|
||||
// {0x00,0x00,0x33,0x12,0x12,0x1E,0x12,0x12,0x12,0x33,0x00,0x00},/*"H",40*/
|
||||
// {0x00,0x00,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"I",41*/
|
||||
// {0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x07},/*"J",42*/
|
||||
// {0x00,0x00,0x37,0x12,0x0A,0x06,0x0A,0x12,0x12,0x37,0x00,0x00},/*"K",43*/
|
||||
// {0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x22,0x3F,0x00,0x00},/*"L",44*/
|
||||
// {0x00,0x00,0x3B,0x1B,0x1B,0x1B,0x15,0x15,0x15,0x35,0x00,0x00},/*"M",45*/
|
||||
// {0x00,0x00,0x3B,0x12,0x16,0x16,0x1A,0x1A,0x12,0x17,0x00,0x00},/*"N",46*/
|
||||
// {0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x11,0x0E,0x00,0x00},/*"O",47*/
|
||||
// {0x00,0x00,0x0F,0x12,0x12,0x0E,0x02,0x02,0x02,0x07,0x00,0x00},/*"P",48*/
|
||||
// {0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x17,0x19,0x0E,0x18,0x00},/*"Q",49*/
|
||||
// {0x00,0x00,0x0F,0x12,0x12,0x0E,0x0A,0x12,0x12,0x37,0x00,0x00},/*"R",50*/
|
||||
// {0x00,0x00,0x1E,0x11,0x01,0x06,0x08,0x10,0x11,0x0F,0x00,0x00},/*"S",51*/
|
||||
// {0x00,0x00,0x1F,0x15,0x04,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"T",52*/
|
||||
// {0x00,0x00,0x33,0x12,0x12,0x12,0x12,0x12,0x12,0x0C,0x00,0x00},/*"U",53*/
|
||||
// {0x00,0x00,0x33,0x12,0x12,0x0A,0x0A,0x0C,0x04,0x04,0x00,0x00},/*"V",54*/
|
||||
// {0x00,0x00,0x15,0x15,0x15,0x15,0x0E,0x0A,0x0A,0x0A,0x00,0x00},/*"W",55*/
|
||||
// {0x00,0x00,0x1B,0x0A,0x0A,0x04,0x04,0x0A,0x0A,0x1B,0x00,0x00},/*"X",56*/
|
||||
// {0x00,0x00,0x1B,0x0A,0x0A,0x0A,0x04,0x04,0x04,0x0E,0x00,0x00},/*"Y",57*/
|
||||
// {0x00,0x00,0x1F,0x09,0x08,0x04,0x04,0x02,0x12,0x1F,0x00,0x00},/*"Z",58*/
|
||||
// {0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1C,0x00},/*"[",59*/
|
||||
// {0x00,0x02,0x02,0x04,0x04,0x04,0x08,0x08,0x08,0x10,0x10,0x00},/*"\",60*/
|
||||
// {0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x00},/*"]",61*/
|
||||
// {0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F},/*"_",63*/
|
||||
// {0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x1C,0x12,0x3C,0x00,0x00},/*"a",65*/
|
||||
// {0x00,0x03,0x02,0x02,0x02,0x0E,0x12,0x12,0x12,0x0E,0x00,0x00},/*"b",66*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x1C,0x12,0x02,0x12,0x0C,0x00,0x00},/*"c",67*/
|
||||
// {0x00,0x18,0x10,0x10,0x10,0x1C,0x12,0x12,0x12,0x3C,0x00,0x00},/*"d",68*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x1E,0x02,0x1C,0x00,0x00},/*"e",69*/
|
||||
// {0x00,0x18,0x24,0x04,0x04,0x1E,0x04,0x04,0x04,0x1E,0x00,0x00},/*"f",70*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x3C,0x12,0x0C,0x02,0x1C,0x22,0x1C},/*"g",71*/
|
||||
// {0x00,0x03,0x02,0x02,0x02,0x0E,0x12,0x12,0x12,0x37,0x00,0x00},/*"h",72*/
|
||||
// {0x00,0x04,0x04,0x00,0x00,0x06,0x04,0x04,0x04,0x0E,0x00,0x00},/*"i",73*/
|
||||
// {0x00,0x08,0x08,0x00,0x00,0x0C,0x08,0x08,0x08,0x08,0x08,0x07},/*"j",74*/
|
||||
// {0x00,0x03,0x02,0x02,0x02,0x1A,0x0A,0x06,0x0A,0x13,0x00,0x00},/*"k",75*/
|
||||
// {0x00,0x07,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"l",76*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x0F,0x15,0x15,0x15,0x15,0x00,0x00},/*"m",77*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x37,0x00,0x00},/*"n",78*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x12,0x12,0x0C,0x00,0x00},/*"o",79*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x0E,0x02,0x07},/*"p",80*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x1C,0x12,0x12,0x12,0x1C,0x10,0x38},/*"q",81*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x1B,0x06,0x02,0x02,0x07,0x00,0x00},/*"r",82*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x1E,0x02,0x0C,0x10,0x1E,0x00,0x00},/*"s",83*/
|
||||
// {0x00,0x00,0x00,0x04,0x04,0x1E,0x04,0x04,0x04,0x1C,0x00,0x00},/*"t",84*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x1B,0x12,0x12,0x12,0x3C,0x00,0x00},/*"u",85*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x1B,0x0A,0x0A,0x04,0x04,0x00,0x00},/*"v",86*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x0E,0x0A,0x0A,0x00,0x00},/*"w",87*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x1B,0x0A,0x04,0x0A,0x1B,0x00,0x00},/*"x",88*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x33,0x12,0x12,0x0C,0x08,0x04,0x03},/*"y",89*/
|
||||
// {0x00,0x00,0x00,0x00,0x00,0x1E,0x08,0x04,0x04,0x1E,0x00,0x00},/*"z",90*/
|
||||
// {0x18,0x08,0x08,0x08,0x08,0x0C,0x08,0x08,0x08,0x08,0x18,0x00},/*"{",91*/
|
||||
// {0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},/*"|",92*/
|
||||
// {0x06,0x04,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x06,0x00},/*"}",93*/
|
||||
// {0x16,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
|
||||
// };
|
@ -1,29 +0,0 @@
|
||||
// /* Includes ----------------------------------------------------------------- */
|
||||
// #include "task/user_task.h"
|
||||
// #include "device/ads8864.h"
|
||||
// /* Private typedef ---------------------------------------------------------- */
|
||||
// /* Private define ----------------------------------------------------------- */
|
||||
|
||||
// /* Private macro ------------------------------------------------------------ */
|
||||
// /* Private variables --------------------------------------------------------- */
|
||||
// Ads8864_t ads8864;
|
||||
// /* Private function --------------------------------------------------------- */
|
||||
|
||||
// /* Exported functions ------------------------------------------------------- */
|
||||
// void Task_Adc(void *argument) {
|
||||
// (void)argument; // 消除未使用参数的警告
|
||||
|
||||
// /* 计算任务运行到指定频率需要等待的tick数 */
|
||||
// const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_ADC; // 200Hz
|
||||
// uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
||||
// ads8864_Init(&ads8864); // 初始化 ADC
|
||||
// while (1) {
|
||||
// tick += delay_tick; /* 计算下一个唤醒时刻 */
|
||||
// Ads8864_Read(&ads8864);
|
||||
// osMessageQueueReset(task_runtime.msgq.adc); // 重置消息队列
|
||||
// osMessageQueuePut(task_runtime.msgq.adc, &ads8864.filtered, 0, 0); // 将数据放入消息队列
|
||||
// osMessageQueueReset(task_runtime.msgq.pc); // 重置消息队列
|
||||
// osMessageQueuePut(task_runtime.msgq.pc, &ads8864.filtered.distance,0, 0); // 将数据放入消息队列
|
||||
// osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
|
||||
// }
|
||||
// }
|
@ -31,6 +31,9 @@ void Task_Can(void *argument) {
|
||||
osMessageQueueReset(task_runtime.msgq.can.feedback.sick);
|
||||
osMessageQueuePut(task_runtime.msgq.can.feedback.sick, &can, 0, 0);
|
||||
|
||||
osMessageQueueReset(task_runtime.msgq.pc);
|
||||
osMessageQueuePut(task_runtime.msgq.pc, &can, 0, 0);
|
||||
|
||||
CAN_Sick_Send(&can);
|
||||
|
||||
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
|
||||
|
122
User/task/disp.c
Normal file
122
User/task/disp.c
Normal file
@ -0,0 +1,122 @@
|
||||
/*
|
||||
显示任务
|
||||
*/
|
||||
|
||||
/* Includes ----------------------------------------------------------------- */
|
||||
#include "task\user_task.h"
|
||||
#include "device\can.h"
|
||||
#include "task\user_task.h"
|
||||
#include "bsp\led.h"
|
||||
#include "bsp\buzzer.h"
|
||||
#include "device\lcd.h"
|
||||
#include "bsp\gpio.h"
|
||||
#include "lvgl.h" // 它为整个LVGL提供了更完整的头文件引用
|
||||
#include "lv_port_disp.h" // LVGL的显示支持
|
||||
#include "lv_port_indev.h" // LVGL的触屏支持
|
||||
#include "tim.h"
|
||||
/* Private typedef ---------------------------------------------------------- */
|
||||
/* Private define ----------------------------------------------------------- */
|
||||
/* Private macro ------------------------------------------------------------ */
|
||||
/* Private variables -------------------------------------------------------- */
|
||||
static CAN_t can;
|
||||
|
||||
CAN_Sick_t sick;
|
||||
|
||||
/* Private function --------------------------------------------------------- */
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
if (htim->Instance == TIM6)
|
||||
{
|
||||
lv_tick_inc(1); // LVGL的tick计数器
|
||||
}
|
||||
}
|
||||
|
||||
void Task_Disp(void *argument)
|
||||
{
|
||||
(void)argument; // 消除未使用参数的警告
|
||||
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_DISP; // 50Hz
|
||||
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
||||
|
||||
LCD_Init();
|
||||
lv_init(); // LVGL 初始化
|
||||
lv_port_disp_init(); // 注册LVGL的显示任务
|
||||
lv_port_indev_init(); // 注册LVGL的触屏检测任务
|
||||
LCD_Clear(WHITE);
|
||||
HAL_TIM_Base_Start_IT(&htim6); // 启动定时器中断
|
||||
|
||||
// 按钮 1
|
||||
lv_obj_t *myBtn1 = lv_btn_create(lv_scr_act()); // 创建按钮; 父对象:当前活动屏幕
|
||||
lv_obj_set_pos(myBtn1, 170, 80); // 设置坐标
|
||||
lv_obj_set_size(myBtn1, 60, 20); // 设置大小
|
||||
|
||||
// 按钮 1 的文本
|
||||
lv_obj_t *label_btn1 = lv_label_create(myBtn1); // 创建文本标签,父对象:上面的btn按钮
|
||||
lv_obj_align(label_btn1, LV_ALIGN_CENTER, 0, 0); // 对齐于:父对象
|
||||
lv_label_set_text(label_btn1, "NEXT"); // 设置标签的文本
|
||||
|
||||
// 按钮 2
|
||||
lv_obj_t *myBtn2 = lv_btn_create(lv_scr_act()); // 创建按钮; 父对象:当前活动屏幕
|
||||
lv_obj_set_pos(myBtn2, 170, 110); // 设置坐标
|
||||
lv_obj_set_size(myBtn2, 60, 20); // 设置大小
|
||||
|
||||
// 按钮 2 的文本
|
||||
lv_obj_t *label_btn2 = lv_label_create(myBtn2); // 创建文本标签,父对象:上面的btn按钮
|
||||
lv_obj_align(label_btn2, LV_ALIGN_CENTER, 0, 0); // 对齐于:父对象
|
||||
lv_label_set_text(label_btn2, "OK");
|
||||
|
||||
lv_obj_t *label_sick1 = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||||
lv_obj_set_pos(label_sick1, 10, 10); // 设置坐标
|
||||
lv_label_set_text(label_sick1, "Sick1: 0"); // 设置初始文本
|
||||
|
||||
// 创建 Sick2 标签
|
||||
lv_obj_t *label_sick2 = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||||
lv_obj_set_pos(label_sick2, 120, 10); // 设置坐标
|
||||
lv_label_set_text(label_sick2, "Sick2: 0"); // 设置初始文本
|
||||
|
||||
// 创建 Sick3 标签
|
||||
lv_obj_t *label_sick3 = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||||
lv_obj_set_pos(label_sick3, 10, 40); // 设置坐标
|
||||
lv_label_set_text(label_sick3, "Sick3: 0"); // 设置初始文本
|
||||
|
||||
// 创建 Sick4 标签
|
||||
lv_obj_t *label_sick4 = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||||
lv_obj_set_pos(label_sick4, 120, 40); // 设置坐标
|
||||
lv_label_set_text(label_sick4, "Sick4: 0"); // 设置初始文本
|
||||
|
||||
// 创建 作者 标签
|
||||
lv_obj_t *label_board = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||||
lv_obj_set_pos(label_board, 10, 95); // 设置坐标
|
||||
lv_label_set_text(label_board, "Mini_croe"); // 设置初始文本
|
||||
|
||||
lv_obj_t *label_name = lv_label_create(lv_scr_act()); // 父对象:当前活动屏幕
|
||||
lv_obj_set_pos(label_name, 10, 114); // 设置坐标
|
||||
lv_label_set_text(label_name, "By Robofish"); // 设置初始文本
|
||||
|
||||
while (1)
|
||||
{
|
||||
tick += delay_tick; /* 计算下一个唤醒时刻 */
|
||||
// 读取数据
|
||||
lv_timer_handler(); // LVGL的定时器处理函数
|
||||
|
||||
if (osMessageQueueGet(task_runtime.msgq.can.feedback.sick, &can, NULL, 0) == osOK)
|
||||
{
|
||||
// 更新显示内容
|
||||
char buffer[16];
|
||||
snprintf(buffer, sizeof(buffer), "Sick1: %d", can.sick.named.sick[0]); // 假设 sick.value1 是 Sick1 的值
|
||||
lv_label_set_text(label_sick1, buffer);
|
||||
|
||||
snprintf(buffer, sizeof(buffer), "Sick2: %d", can.sick.named.sick[1]); // 假设 sick.value2 是 Sick2 的值
|
||||
lv_label_set_text(label_sick2, buffer);
|
||||
|
||||
snprintf(buffer, sizeof(buffer), "Sick3: %d", can.sick.named.sick[2]); // 假设 sick.value3 是 Sick3 的值
|
||||
lv_label_set_text(label_sick3, buffer);
|
||||
|
||||
snprintf(buffer, sizeof(buffer), "Sick4: %d", can.sick.named.sick[3]); // 假设 sick.value4 是 Sick4 的值
|
||||
lv_label_set_text(label_sick4, buffer);
|
||||
}
|
||||
|
||||
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
|
||||
}
|
||||
}
|
@ -1,7 +1,5 @@
|
||||
/*
|
||||
初始化任务
|
||||
|
||||
根据机器人的FLASH配置,决定生成哪些任务。
|
||||
*/
|
||||
|
||||
/* Includes ----------------------------------------------------------------- */
|
||||
@ -26,16 +24,14 @@ void Task_Init(void *argument) {
|
||||
osKernelLock(); // 锁定内核,防止任务切换
|
||||
|
||||
// 创建任务,确保任务创建成功
|
||||
// task_runtime.thread.adc = osThreadNew(Task_Adc, NULL, &attr_adc);
|
||||
task_runtime.thread.disp = osThreadNew(Task_Disp, NULL, &attr_disp);
|
||||
task_runtime.thread.can = osThreadNew(Task_Can, NULL, &attr_can);
|
||||
task_runtime.thread.monitor = osThreadNew(Task_Monitor, NULL, &attr_monitor);
|
||||
task_runtime.thread.pc = osThreadNew(Task_PC, NULL, &attr_pc);
|
||||
|
||||
//创建消息队列
|
||||
// task_runtime.msgq.adc =osMessageQueueNew(2u, sizeof(Ads8864_Filtered_t), NULL);
|
||||
// task_runtime.msgq.can = osMessageQueueNew(2u, sizeof(Ads8864_Filtered_t), NULL);
|
||||
// task_runtime.msgq.pc = osMessageQueueNew(2u, sizeof(float), NULL);
|
||||
task_runtime.msgq.can.feedback.sick = osMessageQueueNew(2u, sizeof(CAN_t), NULL);
|
||||
task_runtime.msgq.pc = osMessageQueueNew(2u, sizeof(CAN_t), NULL);
|
||||
|
||||
osKernelUnlock(); // 解锁内核
|
||||
osThreadTerminate(osThreadGetId()); // 任务完成后结束自身
|
||||
|
@ -2,12 +2,6 @@
|
||||
#include "task\user_task.h"
|
||||
#include "bsp\led.h"
|
||||
#include "bsp\buzzer.h"
|
||||
#include "device\lcd.h"
|
||||
#include "bsp\gpio.h"
|
||||
#include "lvgl.h" // 它为整个LVGL提供了更完整的头文件引用
|
||||
#include "lv_port_disp.h" // LVGL的显示支持
|
||||
#include "lv_port_indev.h" // LVGL的触屏支持
|
||||
#include "tim.h"
|
||||
|
||||
/* Private typedef ---------------------------------------------------------- */
|
||||
/* Private define ----------------------------------------------------------- */
|
||||
@ -15,98 +9,26 @@
|
||||
/* Private variables -------------------------------------------------------- */
|
||||
/* Private function --------------------------------------------------------- */
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void Key1_Callback(void);
|
||||
void Key2_Callback(void);
|
||||
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
|
||||
if (htim->Instance == TIM6) {
|
||||
lv_tick_inc(1); // LVGL的tick计数器
|
||||
}
|
||||
}
|
||||
|
||||
void Task_Monitor(void *argument) {
|
||||
(void)argument; // 消除未使用参数的警告
|
||||
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_MONITOR; // 1000Hz
|
||||
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
||||
char tick_str[16];
|
||||
LCD_Init();
|
||||
lv_init(); // LVGL 初始化
|
||||
lv_port_disp_init(); // 注册LVGL的显示任务
|
||||
lv_port_indev_init(); // 注册LVGL的触屏检测任务
|
||||
LCD_Clear(BLACK);
|
||||
// HAL_Delay(5000); // 延时 1 秒
|
||||
LCD_Clear(RED);
|
||||
LCD_DrawChar(0, 0, '0', WHITE, BLACK); // 在屏幕上显示字符
|
||||
LCD_DrawString(0, 0, "Hello", WHITE, BLACK); // 在屏幕上显示字符串
|
||||
LCD_DrawString(20, 0,"this is sick (DT35-driver)",BLACK,WHITE);
|
||||
LCD_DrawString(120, 120,"Design by Robofish",BLACK,WHITE);
|
||||
BSP_LED_Set(BSP_LED_RED, BSP_LED_ON, 0);
|
||||
BSP_LED_Set(BSP_LED_BLUE, BSP_LED_ON, 0);
|
||||
BSP_Buzzer_Set(0.1, 0.3); // 设置蜂鸣器频率和占空比
|
||||
BSP_Buzzer_Start(); // 启动蜂鸣器
|
||||
|
||||
HAL_Delay(200); // 延时 1 秒
|
||||
BSP_Buzzer_Set(0.5, 0.5); // 设置蜂鸣器频率和占空比
|
||||
// LCD_DrawArea(0, 0, 100, 100, GREEN); // 清屏
|
||||
HAL_Delay(200); // 延时 1 秒
|
||||
BSP_Buzzer_Set(0.9, 0.8); // 设置蜂鸣器频率和占空比
|
||||
HAL_Delay(200);
|
||||
BSP_Buzzer_Stop(); // 停止蜂鸣器
|
||||
|
||||
HAL_TIM_Base_Start_IT(&htim6); // 启动定时器中断
|
||||
|
||||
// 按钮 1
|
||||
lv_obj_t *myBtn1 = lv_btn_create(lv_scr_act()); // 创建按钮; 父对象:当前活动屏幕
|
||||
lv_obj_set_pos(myBtn1, 180, 60); // 设置坐标
|
||||
lv_obj_set_size(myBtn1, 60, 20); // 设置大小
|
||||
|
||||
// 按钮 1 的文本
|
||||
lv_obj_t *label_btn1 = lv_label_create(myBtn1); // 创建文本标签,父对象:上面的btn按钮
|
||||
lv_obj_align(label_btn1, LV_ALIGN_CENTER, 0, 0); // 对齐于:父对象
|
||||
lv_label_set_text(label_btn1, "Yes"); // 设置标签的文本
|
||||
|
||||
// 按钮 2
|
||||
lv_obj_t *myBtn2 = lv_btn_create(lv_scr_act()); // 创建按钮; 父对象:当前活动屏幕
|
||||
lv_obj_set_pos(myBtn2, 180, 100); // 设置坐标
|
||||
lv_obj_set_size(myBtn2, 60, 20); // 设置大小
|
||||
|
||||
// 按钮 2 的文本
|
||||
lv_obj_t *label_btn2 = lv_label_create(myBtn2); // 创建文本标签,父对象:上面的btn按钮
|
||||
lv_obj_align(label_btn2, LV_ALIGN_CENTER, 0, 0); // 对齐于:父对象
|
||||
lv_label_set_text(label_btn2, "Return");
|
||||
// // 独立的标签
|
||||
// lv_obj_t *myLabel = lv_label_create(lv_scr_act()); // 创建文本标签; 父对象:当前活动屏幕
|
||||
// lv_label_set_text(myLabel, "Hello world!"); // 设置标签的文本
|
||||
// lv_obj_align(myLabel, LV_ALIGN_CENTER, 0, 0); // 对齐于:父对象
|
||||
// lv_obj_align_to(myBtn, myLabel, LV_ALIGN_OUT_TOP_MID, 0, -20); // 对齐于:某对象
|
||||
|
||||
|
||||
|
||||
BSP_GPIO_RegisterCallback(key1_Pin, Key1_Callback);
|
||||
BSP_GPIO_RegisterCallback(key2_Pin, Key2_Callback);
|
||||
|
||||
BSP_GPIO_EnableIRQ(key1_Pin);
|
||||
BSP_GPIO_EnableIRQ(key2_Pin);
|
||||
|
||||
BSP_Buzzer_Set(0.1, 0.3f);
|
||||
BSP_Buzzer_Start();
|
||||
HAL_Delay(300);
|
||||
BSP_Buzzer_Set(0.5, 0.5f);
|
||||
HAL_Delay(300);
|
||||
BSP_Buzzer_Set(0.9, 0.7f);
|
||||
HAL_Delay(300);
|
||||
BSP_Buzzer_Stop();
|
||||
while (1) {
|
||||
|
||||
tick += delay_tick; /* 计算下一个唤醒时刻 */
|
||||
lv_timer_handler(); // LVGL的定时器处理函数
|
||||
sprintf(tick_str, "Tick: %lu", tick);
|
||||
//展示tick
|
||||
LCD_DrawString(0, 0, tick_str, WHITE, BLACK); // 在屏幕上显示 tick 值
|
||||
// 切换 LED 状态
|
||||
BSP_LED_Set(BSP_LED_GREEN, BSP_LED_TAGGLE, 0); // 50% 占空比
|
||||
//TODO: 监控任务的具体实现
|
||||
BSP_LED_Set(BSP_LED_GREEN, BSP_LED_TAGGLE, 0);
|
||||
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
|
||||
}
|
||||
}
|
||||
|
||||
void Key1_Callback(void) {
|
||||
// 处理 key1 的中断逻辑
|
||||
BSP_LED_Set(BSP_LED_RED, BSP_LED_TAGGLE, 0);
|
||||
}
|
||||
|
||||
void Key2_Callback(void) {
|
||||
// 处理 key2 的中断逻辑
|
||||
BSP_LED_Set(BSP_LED_RED, BSP_LED_TAGGLE, 0);
|
||||
}
|
@ -1,31 +1,27 @@
|
||||
/* Includes ----------------------------------------------------------------- */
|
||||
#include "task\user_task.h"
|
||||
#include "usart.h"
|
||||
#include "bsp\led.h"
|
||||
#include <string.h> // 用于 sprintf 函数
|
||||
#include "device\can.h" // 引入 CAN 数据结构头文件
|
||||
|
||||
/* Private variables -------------------------------------------------------- */
|
||||
float distance = 14.0f; // 用于存储距离数据单位为米
|
||||
// char distance_str[32]; // 用于存储格式化后的字符串
|
||||
static CAN_t can; // 用于存储从消息队列获取的 CAN 数据
|
||||
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void Task_PC(void *argument) {
|
||||
(void)argument; // 消除未使用参数的警告
|
||||
const uint32_t delay_tick = osKernelGetTickFreq() / 100; // 50Hz
|
||||
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_PC; // 50Hz
|
||||
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
||||
|
||||
while (1) {
|
||||
tick += delay_tick; /* 计算下一个唤醒时刻 */
|
||||
BSP_LED_Set(BSP_LED_BLUE, BSP_LED_TAGGLE, 0); // 50% 占空比
|
||||
|
||||
// 将 distance 格式化为字符串
|
||||
// sprintf(distance_str, "Distance: %.2f m\r\n", distance);
|
||||
// 从消息队列获取 CAN 数据
|
||||
if (osMessageQueueGet(task_runtime.msgq.can.feedback.sick, &can, NULL, 0) == osOK) {
|
||||
// 通过 USART3 发送 sick 数据数组
|
||||
HAL_UART_Transmit(&huart3, (uint8_t *)can.sick.named.sick, sizeof(can.sick.named.sick), HAL_MAX_DELAY);
|
||||
HAL_UART_Transmit(&huart2, (uint8_t *)can.sick.named.sick, sizeof(can.sick.named.sick), HAL_MAX_DELAY);
|
||||
}
|
||||
|
||||
//使用串口发送"123"
|
||||
// HAL_UART_Transmit(&huart2, (uint8_t *)distance_str, strlen(distance_str), 1000); // 发送数据
|
||||
// HAL_UART_Transmit(&huart3, (uint8_t *)distance_str, strlen(distance_str), 1000); // 发送数据
|
||||
HAL_UART_Transmit_DMA(&huart2, (uint8_t *)"123", 3); // 发送数据
|
||||
HAL_UART_Transmit_DMA(&huart3, (uint8_t *)"123", 3); // 发送数据
|
||||
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
|
||||
}
|
||||
}
|
@ -15,16 +15,16 @@ const osThreadAttr_t attr_can = {
|
||||
.stack_size = 128 * 4,
|
||||
};
|
||||
|
||||
// const osThreadAttr_t attr_adc = {
|
||||
// .name = "Task_Adc",
|
||||
// .priority = osPriorityRealtime,
|
||||
// .stack_size = 128 * 4,
|
||||
// };
|
||||
const osThreadAttr_t attr_disp = {
|
||||
.name = "Task_Disp",
|
||||
.priority = osPriorityRealtime,
|
||||
.stack_size = 512 * 4,
|
||||
};
|
||||
|
||||
const osThreadAttr_t attr_monitor = {
|
||||
.name = "Task_Monitor",
|
||||
.priority = osPriorityRealtime,
|
||||
.stack_size = 512 * 4,
|
||||
.stack_size = 128 * 4,
|
||||
};
|
||||
|
||||
const osThreadAttr_t attr_pc = {
|
||||
|
@ -13,7 +13,7 @@ typedef struct {
|
||||
/* 各任务,也可以叫做线程 */
|
||||
struct {
|
||||
osThreadId_t can; /* CAN任务 */
|
||||
// osThreadId_t adc; /* ADC任务 */
|
||||
osThreadId_t disp; /* ADC任务 */
|
||||
osThreadId_t pc; /* PC任务 */
|
||||
osThreadId_t monitor; /* 监控任务 */
|
||||
} thread;
|
||||
@ -34,21 +34,21 @@ typedef struct {
|
||||
|
||||
struct {
|
||||
uint32_t can; /* CAN使用 */
|
||||
// uint32_t adc; /* ADC使用 */
|
||||
uint32_t disp; /* ADC使用 */
|
||||
uint32_t pc; /* PC使用 */
|
||||
uint32_t monitor; /* 监控使用 */
|
||||
} heap_water_mark; /* heap使用 */
|
||||
|
||||
struct {
|
||||
float can; /* CAN任务运行频率 */
|
||||
// float adc; /* ADC任务运行频率 */
|
||||
float disp; /* ADC任务运行频率 */
|
||||
float pc; /* PC任务运行频率 */
|
||||
float monitor; /* 监控任务运行频率 */
|
||||
} freq; /* 任务运行频率 */
|
||||
|
||||
struct {
|
||||
uint32_t can; /* CAN任务运行时间 */
|
||||
// uint32_t adc; /* ADC任务运行时间 */
|
||||
uint32_t disp; /* ADC任务运行时间 */
|
||||
uint32_t pc; /* PC任务运行时间 */
|
||||
uint32_t monitor; /* 监控任务运行时间 */
|
||||
} last_up_time; /* 任务最近运行时间 */
|
||||
@ -57,9 +57,9 @@ typedef struct {
|
||||
|
||||
|
||||
// 任务频率和初始化延时
|
||||
#define TASK_FREQ_CAN (500u)
|
||||
#define TASK_FREQ_ADC (200u)
|
||||
#define TASK_FREQ_MONITOR (100u)
|
||||
#define TASK_FREQ_CAN (100u)
|
||||
#define TASK_FREQ_DISP (200u)
|
||||
#define TASK_FREQ_MONITOR (1u)
|
||||
#define TASK_FREQ_PC (100u)
|
||||
|
||||
|
||||
@ -68,7 +68,7 @@ typedef struct {
|
||||
// 任务句柄
|
||||
typedef struct {
|
||||
osThreadId_t can;
|
||||
// osThreadId_t adc;
|
||||
osThreadId_t disp;
|
||||
osThreadId_t monitor;
|
||||
osThreadId_t pc;
|
||||
} Task_Handles_t;
|
||||
@ -79,16 +79,13 @@ extern Task_Runtime_t task_runtime;
|
||||
extern const osThreadAttr_t attr_init;
|
||||
|
||||
extern const osThreadAttr_t attr_can;
|
||||
// extern const osThreadAttr_t attr_adc;
|
||||
extern const osThreadAttr_t attr_disp;
|
||||
extern const osThreadAttr_t attr_monitor;
|
||||
extern const osThreadAttr_t attr_pc;
|
||||
|
||||
// extern osMessageQueueId_t adcQueueHandle;
|
||||
// extern osMessageQueueId_t pcQueueHandle;
|
||||
|
||||
void Task_Init(void *argument);
|
||||
void Task_Can(void *argument);
|
||||
// void Task_Adc(void *argument);
|
||||
void Task_Disp(void *argument);
|
||||
void Task_Monitor(void *argument);
|
||||
void Task_PC(void *argument);
|
||||
|
||||
|
BIN
img/.DS_Store
vendored
Normal file
BIN
img/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
img/IMG_9083.JPG
Normal file
BIN
img/IMG_9083.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 MiB |
BIN
img/IMG_9084.JPG
Normal file
BIN
img/IMG_9084.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 MiB |
BIN
img/IMG_9086.JPG
Normal file
BIN
img/IMG_9086.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 MiB |
Loading…
Reference in New Issue
Block a user