[Upload Code]:add Deal Code
This commit is contained in:
parent
cab4180ffa
commit
962629896d
@ -70,6 +70,7 @@
|
||||
| 2025-06-04 | 完成串口协议的对接,串口可输出 | |
|
||||
| | 调试1024点完成,CAN版本。 | 串口接收有点问题后面需要看 |
|
||||
| 2025-06-11 | 完成遥控433MHZ模块的功能调试 | |
|
||||
| | 接收处理的代码完成 | |
|
||||
|
||||
---
|
||||
|
||||
@ -81,7 +82,7 @@
|
||||
|
||||
- [x] 传感器采集逻辑完成
|
||||
|
||||
- [ ] 无线模块开发完成
|
||||
- [x] 无线模块开发完成
|
||||
|
||||
- [x] RTOS 集成调通
|
||||
|
||||
|
@ -49,6 +49,7 @@ extern "C"
|
||||
#define SOFTNESS_MEDIUM 0xB2 // 中
|
||||
#define SOFTNESS_HARD 0xB3 // 硬
|
||||
|
||||
extern struct rt_event remote_deal_event; // 静态事件对象;
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include "myEdge_ai_app.h"
|
||||
#include <rtthread.h>
|
||||
|
||||
struct rt_event remote_deal_event; // 静态事件对象;
|
||||
/**
|
||||
* 计算 Modbus CRC16 校验值
|
||||
* @param data 指向数据的指针
|
||||
@ -34,7 +35,8 @@ bool send_mattress_command(uint8_t mode_byte, uint8_t *args, size_t args_length)
|
||||
rt_uint8_t len = 0;
|
||||
uint16_t crc16 = 0;
|
||||
// Create command packet
|
||||
uint8_t packet[20]; // Allocate enough space for command
|
||||
// Allocate enough space for command
|
||||
uint8_t packet[32] = {0};
|
||||
size_t packet_index = 0;
|
||||
|
||||
// Start byte
|
||||
@ -151,7 +153,46 @@ int run_hard_mode(void)
|
||||
uint8_t parm[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
return send_mattress_command(SOFTNESS_HARD, parm, 12);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// 假设buf中已经存有串口数据LC:DAB10893,这是一个ASC码的字串形式,即buf[0]='L'
|
||||
// buf[1] = 'C'。。。。
|
||||
// 转码思路 1 先判断前面三字节数据头是否为LC:
|
||||
// 2 将ASC码的数转成HEX格式
|
||||
// 3 校验数据和正确否
|
||||
// 代码如下:
|
||||
// ASC字母或数字转成HEX数的子函数
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
rt_uint8_t LATER_TO_NUMBER(rt_uint8_t d)
|
||||
{
|
||||
if (d >= '0' && d <= '9')
|
||||
return d & 0x0f;
|
||||
if (d >= 'A' && d <= 'F')
|
||||
return d - 'A' + 0x0a;
|
||||
if (d >= 'a' && d <= 'f')
|
||||
return d - 'a' + 0x0a;
|
||||
return 0xff; // 无效数据
|
||||
}
|
||||
// 以下为数据校验和转换,数据正确则返回1,否则返回0
|
||||
uint8_t remote_result[4] = {0};
|
||||
rt_uint8_t CHK_RF_DAT(uint8_t *buffer)
|
||||
{
|
||||
rt_uint8_t i;
|
||||
uint8_t buf[8] = {0};
|
||||
if (buffer[0] != 'L' && buffer[1] != 'C' && buffer[2] != ':')
|
||||
return 0; // 错误数据返回0
|
||||
for (i = 3; i < (3 + 8); i++) // 转换DAB10893共8个数据为HEX
|
||||
{
|
||||
buf[i - 3] = LATER_TO_NUMBER(buffer[i]);
|
||||
}
|
||||
remote_result[0] = (buf[0] << 4) + buf[1]; // 组合成应有的HEX格式
|
||||
remote_result[1] = (buf[2] << 4) + buf[3]; // 组合成应有的HEX格式
|
||||
remote_result[2] = (buf[4] << 4) + buf[5]; // 组合成应有的HEX格式
|
||||
remote_result[3] = (buf[6] << 4) + buf[7]; // 组合成应有的HEX格式
|
||||
if ((uint8_t)(remote_result[0] + remote_result[1] + remote_result[2]) == remote_result[3])
|
||||
return 1; // 数据校验正确
|
||||
else
|
||||
return 0; // 数据错误
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -161,11 +202,69 @@ static struct rt_thread remote_thread;
|
||||
static rt_uint8_t remote_thread_stack[REMOTE_THREAD_STACK_SIZE];
|
||||
|
||||
/* 线程入口函数 */
|
||||
static volatile rt_uint8_t res = 0;
|
||||
static void remote_thread_entry(void *parameter)
|
||||
{
|
||||
rt_uint32_t e;
|
||||
while (1)
|
||||
{
|
||||
// 等待接收433数据
|
||||
if (rt_event_recv(&remote_deal_event, 0x01, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, &e) == RT_EOK)
|
||||
{
|
||||
rt_kprintf("Recv Data...\r\n");
|
||||
rt_kprintf("L:%d D:%s", remote_uart_rx_len, remote_uart_rx_buffer);
|
||||
if (CHK_RF_DAT(remote_uart_rx_buffer) == 1)
|
||||
{
|
||||
res = remote_result[2];
|
||||
rt_kprintf("Data Check Done Key:%d \r\n", res);
|
||||
hex_dump_simple(remote_result, 4);
|
||||
// TODO: 进行处理
|
||||
switch (res)
|
||||
{
|
||||
case 00:
|
||||
run_floating_mode();
|
||||
rt_kprintf("Key Value : %d Mode: Float\r\n", remote_result[2]);
|
||||
break;
|
||||
case 01:
|
||||
run_turning_cycle();
|
||||
rt_kprintf("Key Value : %d Mode: Turn\r\n", remote_result[2]);
|
||||
break;
|
||||
case 02:
|
||||
run_prevention_mode();
|
||||
rt_kprintf("Key Value : %d Mode: Prevention\r\n", remote_result[2]);
|
||||
break;
|
||||
case 03:
|
||||
run_abab_cycle();
|
||||
rt_kprintf("Key Value : %d Mode: Cycle\r\n", remote_result[2]);
|
||||
break;
|
||||
case 04:
|
||||
run_adaptive_mode();
|
||||
rt_kprintf("Key Value : %d Mode: Adaptive\r\n", remote_result[2]);
|
||||
break;
|
||||
case 05:
|
||||
run_soft_mode();
|
||||
rt_kprintf("Key Value : %d Mode: Soft\r\n", remote_result[2]);
|
||||
break;
|
||||
case 06:
|
||||
run_medium_mode();
|
||||
rt_kprintf("Key Value : %d Mode: Medium\r\n", remote_result[2]);
|
||||
break;
|
||||
case 07:
|
||||
run_hard_mode();
|
||||
rt_kprintf("Key Value : %d Mode: Hard\r\n", remote_result[2]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// 结束后处理
|
||||
rt_memset(remote_uart_rx_buffer, 0, sizeof(remote_uart_rx_buffer));
|
||||
rt_memset(remote_result, 0, sizeof(remote_result));
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_kprintf("Data Check fAIL \r\n");
|
||||
}
|
||||
}
|
||||
// 如果接收到执行相关指令
|
||||
rt_thread_mdelay(100); // 可调整周期
|
||||
}
|
||||
@ -174,6 +273,7 @@ static void remote_thread_entry(void *parameter)
|
||||
/* 初始化函数,使用静态线程启动遥控处理 */
|
||||
int remote_thread_init(void)
|
||||
{
|
||||
rt_err_t result = rt_event_init(&remote_deal_event, "remote_evt", RT_IPC_FLAG_FIFO);
|
||||
rt_thread_init(&remote_thread, // 线程控制块
|
||||
"remote_task", // 名称
|
||||
remote_thread_entry, // 入口函数
|
||||
|
@ -64,8 +64,8 @@ rt_bool_t extract_mattress_frame(const uint8_t *dma_buf, size_t dma_len)
|
||||
|
||||
/* 定义线程栈与控制块(静态分配) */
|
||||
#define SENSOR_THREAD_STACK_SIZE 512
|
||||
struct rt_event uart_rx_event; // 静态事件对象;
|
||||
struct rt_event data_ready_event; // 静态事件对象;
|
||||
struct rt_event uart_rx_event; // 静态事件对象;
|
||||
struct rt_event data_ready_event; // 静态事件对象;
|
||||
static struct rt_thread sensor_thread;
|
||||
static rt_uint8_t sensor_thread_stack[SENSOR_THREAD_STACK_SIZE];
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "mySensor_deal.h"
|
||||
#include "myMattress_ctrl.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@ -179,7 +180,7 @@ void USART1_IRQHandler(void)
|
||||
HAL_UART_Receive_DMA(&huart1, remote_uart_rx_buffer, REMOTE_RX_BUFFER_SIZE); // 开启DMA接收
|
||||
remote_uart_rx_len = received_length;
|
||||
// 发送事件通知处理线程
|
||||
// rt_event_send(&uart_rx_event, 0x01);
|
||||
rt_event_send(&remote_deal_event, 0x01);
|
||||
}
|
||||
/* USER CODE END USART1_IRQn 0 */
|
||||
HAL_UART_IRQHandler(&huart1);
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -135,7 +135,7 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGUARM</Key>
|
||||
<Name>d</Name>
|
||||
<Name></Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
@ -153,30 +153,28 @@
|
||||
<Name>-U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F405RGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint>
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>180</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>../Core/Src/stm32f4xx_it.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<Breakpoint/>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>Origin_MattressData</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>1</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>remote_uart_rx_buffer</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>2</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>remote_result</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>3</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>res</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<WatchWindow2>
|
||||
<Ww>
|
||||
@ -191,7 +189,7 @@
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>1</periodic>
|
||||
<aLwin>0</aLwin>
|
||||
<aLwin>1</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user