You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用CCS C编译器连接PIC18F4550至串口监视器遇输出截断

PIC18F4550 USB-CDC 串口输出截断问题解决

原始代码

#include <18F4550.h>                    // 包含微控制器库
#use delay(clock=48MHz, crystal)        // 定义振荡器类型和频率

#build(reset=0x02000, interrupt=0x02008) // 指定复位和中断向量地址
#org 0x0000, 0x1FFF {}                   // 为bootloader预留内存区域
#fuses HSPLL, CPUDIV1, NOWDT, NOPROTECT, PLL5, NODEBUG, USBDIV, VREGEN

#include <usb_cdc.h>                     // USB-CDC库

void main(void) {
   usb_cdc_init();                       // 配置虚拟串口
   usb_init();                           // 初始化USB栈

   // 主循环
   while (1) {
      usb_task();                        // 维持USB栈运行

      // 通过USB-CDC发送消息
      printf(usb_cdc_putc, "Hola mundo, ¿cómo estás?
");
      delay_ms(4000);                    // 等待4秒后再次发送
   }
}

问题现象

串口输出截断情况

使用CCS C编译器开发PIC18F4550的USB-CDC功能时,串口监视器能收到输出但内容被截断,无法查看完整消息。

解决方案

1. 代码层面优化

修改代码,增加USB连接状态检查,采用逐字符发送确保数据完整:

#include <18F4550.h>
#use delay(clock=48MHz, crystal)

#build(reset=0x02000, interrupt=0x02008)
#org 0x0000, 0x1FFF {}
#fuses HSPLL, CPUDIV1, NOWDT, NOPROTECT, PLL5, NODEBUG, USBDIV, VREGEN

#include <usb_cdc.h>

void main(void) {
   usb_cdc_init();
   usb_init();

   while (1) {
      usb_task();

      // 仅在USB设备完成枚举且主机打开串口时发送数据
      if(usb_cdc_connected()) {
          const char msg[] = "Hola mundo, ¿cómo estás?\r\n";
          // 逐字符发送并等待发送完成
          for(int i=0; msg[i] != '\0'; i++){
              while(!usb_cdc_putc(msg[i]));
          }
          delay_ms(4000);
      }
   }
}

关键修改说明:

  • usb_cdc_connected():避免在USB未连接或未枚举完成时发送数据,减少数据丢失概率
  • 逐字符发送+等待确认:确保每个字符都被USB栈正确处理,避免一次性发送过多数据超出内部缓冲区
  • 规范换行符:使用\r\n替代不规范的换行,适配绝大多数串口监视器的换行解析

2. 硬件与工具检查

  • 确认USB线缆质量:使用屏蔽良好的USB线,避免干扰导致数据传输中断
  • 串口监视器设置:无需手动设置波特率(USB-CDC为虚拟串口),但需确保工具已正确识别PIC的USB设备
  • 熔丝配置验证:确认VREGEN熔丝已开启,保证USB模块供电稳定
  • Bootloader内存区域:确保#org 0x0000, 0x1FFF {}预留的内存与实际使用的bootloader大小匹配,避免代码覆盖导致功能异常

内容的提问来源于stack exchange,提问作者PUENTE ELIZONDO JESUS EDUARDO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:15:17