123
123 - 认证专家
This guy hasn't written anything yet

注册于 2 years ago

回答
282
文章
6
关注者
11

应该是你CUBEMX没有使能SRAM吧,需要配置完就有了。不过也有简单的操作,就是把 stm32f7xx_hal_conf.h 里面的 HAL_SRAM_MODULE_ENABLED 给使能,

image.png

注释写的很清楚呀,让你把 OS_TICK_CFG() 放进去就行啦。😀

先说结论,是支持的。

_serial_dma_rx 里面调用了serial->ops->dma_transmit(serial, data, length, RT_SERIAL_DMA_RX);
其实这个只是一个标志,真正对接到底层驱动时候,由于DMA接收是在中断中完成的,不是主动接收的,所以这个接口stm32_dma_transmit 并没有用到RT_SERIAL_DMA_RX这个标志。真正接收的地方是这三个中断里:

1. IDLE中断
uart_isr()
{
#ifdef RT_SERIAL_USING_DMA
    else if ((uart->uart_dma_flag) && (__HAL_UART_GET_FLAG(&(uart->handle), UART_FLAG_IDLE) != RESET)
             && (__HAL_UART_GET_IT_SOURCE(&(uart->handle), UART_IT_IDLE) != RESET))
    {
        level = rt_hw_interrupt_disable();
        recv_total_index = serial->config.bufsz - __HAL_DMA_GET_COUNTER(&(uart->dma_rx.handle));
        recv_len = recv_total_index - uart->dma_rx.last_index;
        uart->dma_rx.last_index = recv_total_index;
        rt_hw_interrupt_enable(level);

        if (recv_len)
        {
            rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_DMADONE | (recv_len 
        }
        __HAL_UART_CLEAR_IDLEFLAG(&uart->handle);
    }
}

2. 接收完成回调
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

3. 接收半完成回调
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);

最后的数据处理是在 rt_hw_serial_isrRT_SERIAL_EVENT_RX_DMADONE 里面进行的。

这并不是多出来一个 'r',而是,AT 组件在进行数据接收时,将每一行的最后一个字符,一般是 'n'重写成了'0';

/* current receive is response */
client->recv_line_buf[client->recv_line_len - 1] = '\0';
if (resp->buf_len + client->recv_line_len < resp->buf_size)
{
    /* copy response lines, separated by '\0' */
    rt_memcpy(resp->buf + resp->buf_len, client->recv_line_buf, client->recv_line_len);

    /* update the current response information */
    resp->buf_len += client->recv_line_len;
    resp->line_counts++;
}
else
{
    client->resp_status = AT_RESP_BUFF_FULL;
    LOG_E("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", resp->buf_size);
}

你的问题应该是什么? at_resp_parse_line_args_by_kw 的函数逻辑,还是什么其他问题?

讲道理这个 '\r'并不会影响后续的解析;

先评估自己的产品用到的硬件资源分配情况是什么(需要和硬件协调),引脚功能是否冲突,例如需要用几个串口,用到串口1还是串口2,是否需要SDRAM、FLASH 等等。把那些冲突的外设驱动重新适配,然后使用命令scons --dist完成属于自己的工程仓库了。
另外还有可以参考RTT官方的 STM32 系列 BSP 制作教程

之前有网友遇到这种情况是串口配置没配好,芯片型号没选对。

应该是你那边网络环境的问题,如果是无法访问github时会出现这样的问题。楼主可以把github仓库导入到gitee仓库然后下载再试试。

固件尺寸优化
试试开启 newlib-nano 选项;另外看你的LIBC,好像没什么特别的API,直接换成RTT的就行了,或者自己实现一个。能减少很多

通过一个外部的浏览器,请求 RT-Thread 系统内的一个你写好的 .asp 文件,大约 2-3 个小时, webnet 服务无响应了?而且,Ping 功能也失效了<浏览器(电脑端)ping 板子?>?不过于此同时,系统内的其他线程还在正常运行?

ping 功能是底层的最基础的网络能力,ping 失效意味着网络协议栈失效了。
感觉可以把 webnet 的 LOG 发出来,看看 webnet 的线程还有没有问题。
这个描述看不出来啥问题。

easyflash 是在没有使用文件系统的时候更简单的管理你的flash,实现OTA功能和这个没有关系。
你可以参照这个实现OTA功能,一般情况下需要你有 bootloader + fal + ota软件包

是不是只能下载程序,不能仿真调试?是不是这个能解决?https://club.rt-thread.org/ask/question/430952.html

这个情况挺常见的,目前原因还没有去细查,但是可以确定的解决办法就是,用 cube programmer 去把全片擦除一下,然后重新烧录 bootloader 就好了

@刘启锋 你问的问题,自己试一下不就知道了,有源码有教程有测试用例,还能在线仿真。你就缺一个实际行动。

回到
顶部

发布
问题

投诉
建议