RT-Thread论坛
直播中

李敏

8年用户 1444经验值
私信 关注
[问答]

RTT最新版添加AT_DEVICE运行报错怎么解决?

STM32C8T6核心板添加AT_DECIVE后报错,要怎么解决



回帖(2)

李勇进

2025-9-23 16:29:09
你的模块固件版本太低了吧,不支持AT+CIPDNS指令,升级下模块固件试试。 
举报

针对在RT-Thread最新版为STM32C8T6添加AT_DEVICE软件包时出现的报错,以下是系统化的解决方案:




1. 检查硬件配置冲突



  • 串口冲突:AT模块占用串口与控制台冲突是常见原因。

    • 解决步骤

      1. board.h 中确认控制台使用的串口号(如 BSP_USING_UART1)。

      2. 修改AT设备配置使用 其他串口(如UART2):
        // 修改 AT_DEVICE 配置文件
        #define AT_DEVICE_UART_NAME    "uart2"  // 避免与控制台uart1冲突

      3. 硬件上确保模块连接到UART2(PA2/TX, PA3/RX)。



  • 电源不稳:AT模块(如ESP8266)需稳定供电(≥500mA),避免电源不足导致复位。




2. 验证AT_DEVICE配置



  • 软件包配置

    1. menuconfig 中检查配置路径:
      RT-Thread Online Packages → IoT - internet of things → AT DEVICE → 
        [*] Enable AT DEVICE
        (uart2) AT client device name     # 修改为实际串口
        (9600)   AT client device baudrate # 匹配模块波特率

    2. 选择正确的设备类型(如ESP8266/SIM800C)。


  • PIN脚复用

    • board.c 中初始化对应串口引脚(示例):
      static void at_device_uart_init(void) {
         rt_pin_mode(PA2, PIN_MODE_AF_PP);  // UART2_TX
         rt_pin_mode(PA3, PIN_MODE_INPUT);  // UART2_RX
      }
      INIT_DEVICE_EXPORT(at_device_uart_init);





3. 内存优化(关键!)


STM32C8T6仅20KB RAM,需精简资源:



  • 减小线程栈

    • 修改 at_socket.h 配置:
      #define AT_AGENT_THREAD_STACK_SIZE  512  // 原值1024,改为512
      #define AT_CLI_THREAD_STACK_SIZE    256  // 原值512,改为256


  • 关闭非必要功能

    • menuconfig 中禁用:

      • 文件系统(DFS)

      • 网络调试工具(Netutils)

      • GUI组件(如LVGL)


    • 精简内核选项:
      RT-Thread Kernel → 
      (512)   Main thread stack size      # 默认1024改为512
      [ ]     Enable HW stack overflow    # 关闭栈检查节省资源





4. 排查初始化顺序



  • 串口驱动先于AT初始化
    applications/main.c 中调整初始化顺序:
     int main(void) {
         /* 硬件串口初始化(由驱动自动完成) */
         /* 显式初始化AT设备 */
         extern int at_client_init(const char *dev_name);
         at_client_init("uart2");  // 确保串口已注册
         return 0;
    }




5. 调试与日志



  • 启用AT组件调试
     // rtconfig.h 中开启日志
    #define AT_DEBUG
    #define AT_CLI_USING_SERVER

  • 查看启动日志

    • 连接串口调试工具(如Putty),关注启动时的错误提示(如 [E/at] uart open failed!)。


  • HardFault处理

    • 若崩溃,使用 libc_hardfault 捕获异常位置,检查栈溢出。





6. 查证软件包兼容性



  • 更新软件包至最新版本:
     cd project_dir
    pkgs --update

  • 检查 at_device 是否支持当前RT-Thread版本(如v4.1.x),参考官方文档




典型错误处理























报错信息 解决方案
[E/at] open serial failed! 串口名错误或驱动未初始化
HardFault_Handler 栈溢出 → 减小线程栈大小
assertion failed at rt_malloc 内存不足 → 精简组件或优化堆分配



总结步骤



  1. 避让串口冲突:确保AT模块不使用控制台串口。

  2. 极限内存优化:缩减线程栈,关闭非核心功能。

  3. 验证初始化顺序:先硬件串口,再AT初始化。

  4. 调试日志定位:通过日志精准定位故障点。


通过逐步排查硬件、配置、内存和初始化顺序,可高效解决AT_DEVICE在C8T6上的运行问题。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分