139 lines
2.8 KiB
Markdown
139 lines
2.8 KiB
Markdown
### 测试
|
||
|
||
串口中断发送通过测试
|
||
|
||
spi_flash读写通过测试
|
||
|
||
对智能模块通信串口,阻塞发送数据通过测试。
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
### 问题
|
||
|
||
#### 串口中断
|
||
|
||
25/02/24
|
||
|
||
在freerots环境下,中断不生效
|
||
|
||
解决
|
||
|
||
> 25/02/25
|
||
>
|
||
> 需要启动freerots任务
|
||
>
|
||
> 同时中断部分
|
||
>
|
||
> ```c
|
||
> void UART5_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
|
||
> ```
|
||
>
|
||
> 变为
|
||
>
|
||
> ```c
|
||
> void UART5_IRQHandler(void) __attribute__((interrupt()));
|
||
> ```
|
||
>
|
||
> 其他中断同上,由硬件压栈变为软件压栈
|
||
|
||
|
||
|
||
#### 串口发送的数据不正确
|
||
|
||
25/02/28
|
||
|
||
解决
|
||
|
||
将数据通过队列发送,需要将buff的位置移动到起始位置+结构体长度
|
||
|
||
```c
|
||
uint8_t *Buff = (uint8_t *)pvPortMalloc(200);
|
||
if (Buff == NULL) {
|
||
log_error("Memory allocation failed\n");
|
||
return;
|
||
}
|
||
|
||
queueUartSendInfo *sendBuff = (queueUartSendInfo *)Buff;
|
||
sendBuff->length = sizeof("hello world\n");
|
||
sendBuff->data = Buff + sizeof(queueUartSendInfo);
|
||
strlcpy((char *)sendBuff->data, "hello world\n", sizeof("hello world\n"));
|
||
// for (int i = 0; i < sizeof("hello world\n"); i++) {
|
||
// sendBuff->data[i] = data[i];
|
||
// }
|
||
// *sendBuff->data = *data;
|
||
// *sendBuff->data = 'H';
|
||
|
||
log_info("dataLen:%d\n", sendBuff->length);
|
||
log_info("data:%s\n", sendBuff->data);
|
||
xQueueSend(upward_uart_Queue, &Buff, 10);
|
||
vTaskDelay(1000);
|
||
```
|
||
|
||
|
||
|
||
#### 中断中不能分配和释放内存
|
||
|
||
解决
|
||
|
||
中断中添加信号量,通知任务来释放。
|
||
|
||
|
||
|
||
|
||
|
||
## 接收解析
|
||
|
||
#### su806传来的数据
|
||
|
||
见网关单片机通信协议
|
||
|
||
#### 传感器传来的数据
|
||
|
||
|
||
|
||
|
||
|
||
## 串口接法流程
|
||
|
||
串口中断接收数据,接收到的数据放入缓冲buff中;当前为总线空闲状态时,接收到数据后立即总线为繁忙状态,并关闭软件定时器
|
||
|
||
串口发送数据前检查总线空闲状态和上次发送是否完成,总线空闲和上次发送完成,才能发送下次数据
|
||
|
||
中断发送数据,每发送一次数据则进入中断塞入下次发送的数据,当数据最后一个字节塞入完成后,设置二值信号量
|
||
|
||
二值信号量在任务中设置为队列集,有数据后设置发送完成,释放发送数据使用的buff
|
||
|
||
串口进入空闲中断后,使能软件定时器,定时到达后,设置总线空闲
|
||
|
||
|
||
|
||
## 串口接收传感器数据
|
||
|
||
100ms后,向上丢数据,或者空闲中断后向上丢数据
|
||
|
||
|
||
|
||
|
||
|
||
## 测试指令
|
||
|
||
#### 查询端口0电源数据
|
||
|
||
>53 4C 00 00 11 53 4C 11 11 11 11 11 11 11 30 01 00 00 0C 23 68 16 17
|
||
|
||
#### 查询端口1倾角传感器数据
|
||
|
||
> 53 4C 01 00 09 4A 59 09 00 02 01 01 05 b5 17
|
||
|
||
#### 打开端口1电源
|
||
|
||
>47 57 10 00 03 00 01 00 01 18 9C 16
|
||
|
||
#### 查看端口1电源
|
||
|
||
>47 57 30 00 03 00 01 27 50 16
|