gateway_mcu/README.md

2.8 KiB
Raw Permalink Blame History

测试

串口中断发送通过测试

spi_flash读写通过测试

对智能模块通信串口,阻塞发送数据通过测试。

问题

串口中断

25/02/24

在freerots环境下中断不生效

解决

25/02/25

需要启动freerots任务

同时中断部分

void UART5_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

变为

void UART5_IRQHandler(void) __attribute__((interrupt()));

其他中断同上,由硬件压栈变为软件压栈

串口发送的数据不正确

25/02/28

解决

将数据通过队列发送需要将buff的位置移动到起始位置+结构体长度

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