RT-Thread论坛
直播中

哔哔哔-

9年用户 1346经验值
擅长:电源/新能源
私信 关注
[问答]

创建stm32f103c8工程后为什么终端没有打印Hello RT_Thread?

创建STM32f103c8工程后为什么终端没有打印Hello RT_Thread!,程序好像也没有下载进去


回帖(1)

杨万富

2025-10-11 16:07:30

以下是针对您在 STM32F103C8 上创建 RT-Thread 工程后终端无法打印 "Hello RT_Thread!" 以及程序未下载的问题的详细解答。根据我的经验,这类问题的常见原因包括程序未正确烧录串口配置错误时钟或硬件初始化问题RT-Thread 环境配置遗漏。下面我将一步步指导您排查和解决。




1. 首要检查:程序是否成功烧录到芯片


关键问题:如果程序根本没烧录进去,所有逻辑(包括打印)都不会执行。




  • 故障排查步骤



    • 烧录工具连接

      • 确认 ST-Link/J-Link 调试器接线正确(SWDIO → PA13, SWCLK → PA14, GND → GND, 3.3V → 3.3V)。

      • 使用合适的烧录软件(如 ST-Link Utility、Keil MDK 或 OpenOCD)检查芯片识别:

        • 打开 ST-Link Utility → Target → Connect。

        • 如果显示 No Target Connected,表示硬件连接问题(检查线缆、供电或芯片型号)。



    • 烧录配置

      • 在开发环境(如 Keil 或 RT-Thread Studio)中:

        • 检查芯片型号:确认目标设备为 STM32F103C8(或兼容型号)。

        • 启用烧录权限:在工程配置中,启用 Reset and Run 选项,下载后自动复位运行。

        • 验证烧录结果:烧录后查看日志输出(如 Keil 的 Build Output 窗口是否有 Programming Done, Reset Target 字样)。




    • 最低限度验证




      • 添加一个 LED 闪烁代码,验证程序是否运行(哪怕串口有问题,LED 也能工作):


        #include 
        #include

        #define LED_PIN GET_PIN(A, 8) // 假设使用PA8引脚连接LED

        int main(void) {
        rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
        while (1) {
             rt_pin_write(LED_PIN, 1);     // LED亮
             rt_thread_mdelay(500);
             rt_pin_write(LED_PIN, 0);     // LED灭
             rt_thread_mdelay(500);
        }
        return 0;
        }


        • 如果 LED 闪烁,说明程序运行正常(问题在串口);如果 LED 不亮,烧录或硬件连接有问题










2. 终端无打印:串口配置问题(常见原因)


RT-Thread 默认将 USART1 用作控制台输出(打印终端信息),您需要检查全链路:



  • 硬件连接

    • STM32F103C8 的串口引脚为 PA9 (TX) → 串口模块 RXPA10 (RX) → 串口模块 TX.

    • 确认开发板的 USB 转串口芯片(如 CH340)驱动已安装,并在设备管理器中识别为 COMx(如 COM3)。


  • RT-Thread 工程配置

    • rtconfig.h 文件中确认控制台使能:
      #define RT_USING_CONSOLE             // 必须为 1
      #define RT_CONSOLE_DEVICE_NAME "uart1" // 默认使用 uart1

    • 检查 UART 波特率配置(RT-Thread 默认为 115200 bps):
      #define RT_CONSOLE_BAUDRATE 115200


  • 终端软件设置

    • 使用串口调试工具(如 PuTTY、Tera Term 或串口助手),设置参数:

      • 波特率:115200 bps

      • 数据位:8 bits

      • 停止位:1 bit

      • 校验位:None

      • 流控:None


    • 验证串口通路

      • 短路开发板的 TX 和 RX 引脚,发送数据应有回显(排除硬件问题)。

      • 更换其他 COM 端口或 USB 线测试。






3. RT-Thread 工程初始化问题




  • main 函数是否调用打印




    • main.c 中,确保调用了 RT-Thread 的打印函数(rt_kprintf):


      #include 

      int main(void) {
         rt_kprintf("Hello RT_Thread!n"); // 确保这一行存在
         return 0;
      }


    • 如果使用示例工程,检查是否包含初始化代码(如 rt_hw_board_init())。



  • BSP 支持包问题

    • STM32F103C8 需正确配置 Board Support Package (BSP)。确认:

      • board/board.c 中,SystemClock_Config() 配置正确外部时钟(HSE_VALUE 默认为 8MHz)。

      • RCC 时钟树配置错误会导致 UART 波特率偏差,打印乱码或失败。


    • 参考 RT-Thread 官方 BSP 配置:
      STM32F10x BSP 文档





4. 硬件环境检查



  • 电源和复位

    • STM32F103C8 需稳定 3.3V 供电(调试器供电可能不足,建议外部供电)。

    • 按复位按钮,观察 LED 是否闪烁或重新运行。


  • Boot 引脚配置

    • 确保 BOOT0 = 0(接地),BOOT1 = 0,从主闪存启动程序。如果 BOOT0 = 1,芯片会进入系统内存模式,不运行用户程序。





推荐解决步骤总结



  1. 先确认程序烧录成功:用 LED 闪烁测试硬件。

  2. 检查串口硬件:连接线缆、驱动安装、终端软件设置。

  3. 验证 RT-Thread 配置rtconfig.h 中的控制台设置、UART 波特率。


  4. 最小测试法:用一个仅打印和闪烁 LED 的最简代码测试(避免复杂驱动干扰)。


    #include 
    #include

    int main(void) {
       rt_kprintf("Hello RT_Thread!n");
       while (1) {
           rt_thread_mdelay(1000); // 加上延时避免打印刷屏
       }
       return 0;
    }


  5. 下载官方示例验证

    • 从 RT-Thread GitHub 下载 STM32F1-HAL BSP,编译烧录,看是否能打印。





常见错误案例



  • 案例 1:用户误将 USB 线连接为供电线而非数据线,导致无法通信 → 需用 USB 转串口模块连接 PC。

  • 案例 2:外部晶振频率未在代码中配置(例如默认用 8MHz HSE,但板载是 12MHz),导致时钟错误 → 在 stm32f1xx_hal_conf.h 中配置 HSE_VALUE

  • 案例 3:RT-Thread Studio 中未开启 RT-Thread Kernel → 在工程配置中,启用 Enable RT-Thread Kernel


如果上述步骤仍无效,提供更多信息:



  • 您使用的开发环境(Keil/RT-Thread Studio/Env 工具)?

  • 是否使用开发板(如 Blue Pill STM32F103)?

  • 烧录日志/错误信息截图?


我会进一步协助您解决!

举报

更多回帖

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