PIC 串口打印指南:使用 printf () 替代 Serial.println ()

PIC 串口打印指南:使用 printf () 替代 Serial.println ()(XC8 + MCC,附调试技巧)

在 MPLAB XC8 开发环境中,可直接调用 <stdio.h> 库中的 printf() 函数。本指南将介绍如何通过 PIC16F13145 Curiosity 开发板,向 MPLAB 终端窗口打印数据。

内容概览

  1. 基于 MCC 配置并启用 UART 外设(含图形化配置示例)
  2. 分配 UART 外设对应的 I/O 引脚
  3. printf() 输出流重定向至 UART 接口
  4. 在主函数中实现数据发送
void main(void){

    SYSTEM_Initialize();     // MCC generated code
    
    while(1){
        printf("Hello World!\r\n");
    }
}

最后更新时间:2025 年 12 月 1 日

图 1:COM4 端口已成功连接,终端窗口持续打印 “Hello World!”

技术小贴士: 务必为 UART 分配对应的引脚。若串口功能异常,这是首要排查的步骤。个人建议在 TX(发送引脚)和 RX(接收引脚)上外接 LED 逻辑探针,通过可视化反馈简化故障排查流程。

UART 配置步骤

图 2 展示了完整的图形化配置流程:

  1. 在 MCC 应用构建器中添加 UART 外设。
  2. 将波特率设置为 9600
  3. printf() 输出流重定向至 UART 接口(对应界面中的蓝色滑块选项)。

完成配置后,生成 MCC 对应的 .h 头文件与 .c 源文件,即可通过如下代码向串口打印数据:

printf("Hello World!");

图 2:UART 波特率配置及 printf() 输出流重定向设置

MCC 相关文档在哪里?

MPLAB 的 MCC 工具可生成轻量级的外设封装函数,用户可在主函数中直接调用这些标准化接口。如需查看详细文档,点击项目资源区的问号图标即可(对应 图 3 左上角位置)。

相关应用示例可参考本文中介绍的毫秒级回调函数实现方案。

图 3:点击问号图标,查看 MCC 外设封装函数的详细文档

技术小贴士: 请勿修改 MCC 自动生成的文件。建议在主函数中调用这些封装函数,这样在后续重新配置单片机外设时,用户代码不会被 MCC 覆盖。
随着开发经验的积累,你可以将 MCC 生成的寄存器配置代码迁移至主函数中。高阶开发者通常会摒弃 MCC 的抽象层,直接参考单片机数据手册,手动配置外设寄存器。

总结

在单片机应用中,printf() 函数存在代码体积大、执行效率低的缺点。相比之下,通过查表法在紧凑循环中直接操作 UART 硬件寄存器,能够实现更快的传输速度,且占用更少的闪存空间。

但对于新手而言,printf() 仍是入门串口打印的优选方案 —— 你可以借助数十年积累的 C 语言教程和在线调试工具快速上手。代码执行效率的优化,可以留到后续阶段再进行。

相关文章推荐

若你觉得本文对你有帮助,也可参考以下相关技术文章: