3、硬件平台入门:LaunchPad开发板介绍、核心板引脚功能、电源管理与时钟树配置

好,咱们开始第三讲。

前面两章我们把无线通信的基本概念和TI的芯片选型聊了一遍。从这章开始,要动真格的了——得跟硬件打交道了。

我个人习惯,学任何一款MCU或者无线SoC,第一件事不是翻数据手册,而是先看它的开发板。为什么?因为开发板是芯片厂商给你画好的“标准答案”。你照着这个板子做,基本不会踩坑。

3.1 LaunchPad开发板:TI的“标准答案”

TI的LaunchPad系列,说白了就是他们的评估板。跟Arduino有点像,但更专业,也更便宜。我当年第一次拿到CC2650 LaunchPad时,第一反应是:这板子才卖几十块钱?

嗯,确实便宜。但功能一点都不少。

3.1.1 板载资源一览

以我们课程主推的CC1352P LaunchPad为例,这块板子上集成了:

  • 主芯片:CC1352P1,双频段Sub-1GHz + 2.4GHz
  • 调试器:XDS110,支持JTAG/SWD,还能当虚拟串口用
  • 传感器:板载温湿度传感器(HDC2010)和光传感器(OPT3001)
  • 天线:双天线设计,Sub-1和2.4G各走各的
  • 按键与LED:两个用户按键,两个RGB LED
  • 扩展接口:BoosterPack标准接口,可以叠各种子板

你想想看,一个巴掌大的板子,把无线、传感、调试全给你配齐了。我刚开始做物联网项目时,要是早几年有这玩意儿,能少熬多少夜。

3.1.2 调试器XDS110的妙用

这里我要重点说一下XDS110。它不只是个下载器,它还能干三件事:

  1. 代码下载与调试:支持断点、单步、变量查看
  2. 虚拟串口:通过USB枚举出一个COM口,直接printf打印日志
  3. 电源测量:可以实时监测芯片的电流消耗
我的小技巧:调试低功耗应用时,我习惯用XDS110的电流测量功能。它能帮你精确看到芯片在休眠、接收、发送各状态下的电流。我曾经靠这个功能抓到一个“休眠时GPIO漏电”的bug,省了整整两天排查时间。

3.2 核心板引脚功能:别被那么多脚吓到

很多新手拿到CC1352P的核心板,一看那么多引脚就懵了。其实没那么复杂。我教你一个方法:按功能分组看。

3.2.1 引脚分组速记

引脚组 典型引脚号 主要功能
电源组 VDD, DCDC_SW, VDDS 供电输入、DC-DC转换
复位组 RESET_N 硬件复位,低电平有效
调试组 TCK, TMS, TDI, TDO JTAG/SWD调试接口
射频组 RF_P, RF_N 差分射频输出/输入
GPIO组 DIO0 ~ DIO31 通用数字IO,可复用为外设
模拟组 ADC0 ~ ADC7 模拟输入通道

你看,这么一分,是不是清晰多了?

3.2.2 引脚复用:一个脚干多份活

TI的芯片有个特点:大部分GPIO都是多功能复用的。同一个引脚,你可以把它配成UART TX,也可以配成SPI CLK,甚至配成PWM输出。

怎么配?靠的是IOC(IO Controller)。说白了,就是每个引脚都有一个寄存器,你往里面写个数字,它就变成对应的功能了。

避坑指南:我曾经在一个项目里,把DIO10同时配成了UART RX和I2C SCL。结果两个外设都工作不正常。查了两天才发现是引脚冲突。所以,画板子前一定要先确认引脚分配表,别让两个外设抢同一个脚。

3.3 电源管理:省电才是硬道理

做无线产品,电源管理是重中之重。你想想看,一个电池供电的传感器节点,如果不会省电,三天两头换电池,谁受得了?

3.3.1 CC1352P的电源架构

CC1352P内部集成了一个DC-DC转换器。它能把外部输入的电压(1.8V~3.8V)转换成芯片内部需要的1.3V核心电压。

为什么要用DC-DC?因为效率高。线性稳压器效率可能只有50%,而DC-DC能做到90%以上。这意味着同样的电池,续航能多出将近一倍。

3.3.2 四种工作模式

TI把这颗芯片的电源管理分成了四种模式:

  • Active模式:CPU全速运行,无线收发器可以工作。电流约3~6mA(视射频状态)
  • Idle模式:CPU停止,但外设和时钟还在跑。电流约1mA
  • Standby模式:大部分电路断电,只有RTC和唤醒逻辑在工作。电流约0.7μA
  • Shutdown模式:几乎全部断电,只有少数引脚能唤醒。电流约0.1μA

注意:Standby模式下,RAM内容会保持,但唤醒后需要重新配置外设。Shutdown模式下,RAM内容会丢失,相当于冷启动。我建议你在设计时,根据应用场景选择合适的模式。比如传感器每隔10秒上报一次数据,用Standby就够了;如果几个月才唤醒一次,可以考虑Shutdown。

3.4 时钟树配置:芯片的“心跳”

时钟,就是芯片的心跳。心跳乱了,整个系统就乱了。

3.4.1 时钟源有哪些

CC1352P内部集成了多个时钟源:

时钟源 频率 用途
HF XOSC 48 MHz 主系统时钟,射频必需
HF RCOSC 48 MHz 内部振荡器,精度稍差
LF XOSC 32.768 kHz RTC时钟,低功耗模式
LF RCOSC 32.768 kHz 内部低频振荡器

我个人建议,如果对时间精度要求高(比如需要精确的定时唤醒),一定要用外部晶振(XOSC)。内部RC振荡器受温度和电压影响较大,误差可能达到1%~2%。

3.4.2 时钟配置实战

在TI的SDK里,时钟配置是通过Power和Clock驱动来完成的。下面是一个典型的初始化代码:

// 初始化时钟源
void clock_init(void)
{
    // 使能48MHz外部晶振
    HWREG(CLKCTL_BASE + CLKCTL_O_HFOSCCTL) = CLKCTL_HFOSCCTL_OSC_SEL_XOSC;
    
    // 等待晶振稳定
    while(!(HWREG(CLKCTL_BASE + CLKCTL_O_STAT) & CLKCTL_STAT_HF_XOSC_STABLE));
    
    // 配置系统时钟分频,默认不分频
    HWREG(CLKCTL_BASE + CLKCTL_O_SYSDIV) = 0;
    
    // 使能32.768kHz低频晶振
    HWREG(CLKCTL_BASE + CLKCTL_O_LFOSCCTL) = CLKCTL_LFOSCCTL_OSC_SEL_XOSC;
    
    // 等待低频晶振稳定
    while(!(HWREG(CLKCTL_BASE + CLKCTL_O_STAT) & CLKCTL_STAT_LF_XOSC_STABLE));
}

这段代码看起来简单,但有几个坑要注意:

  • 切换时钟源后,一定要等待稳定标志位。我见过有人没等稳定就直接用,结果系统跑飞了。
  • 低频晶振的起振时间比高频晶振长,可能需要几百毫秒。别着急。
  • 如果不需要高精度,可以用内部RC振荡器,省掉两个晶振,能省几毛钱成本。

我的经验:在产品原型阶段,我建议都用外部晶振。等产品定型了,再根据实际精度需求决定是否换成内部振荡器。这样能避免“一开始就省成本,后面发现问题改不回来”的尴尬。

3.5 本章小结

嗯,这一章内容不少。我们聊了LaunchPad开发板的资源、引脚功能分组、电源管理的四种模式,还有时钟树的配置方法。

说白了,硬件平台入门就是三件事:

  1. 认识板子:知道上面有什么,能干什么
  2. 认识引脚:知道哪个脚能干什么,别冲突
  3. 认识电源和时钟:这是系统稳定运行的基础

下一章,我们会开始搭建开发环境,然后真正跑起第一个无线程序。到时候,你就能看到你的LaunchPad板子上的LED亮起来,然后通过无线发送数据了。

准备好了吗?我们下章见。