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。它不只是个下载器,它还能干三件事:
- 代码下载与调试:支持断点、单步、变量查看
- 虚拟串口:通过USB枚举出一个COM口,直接printf打印日志
- 电源测量:可以实时监测芯片的电流消耗
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开发板的资源、引脚功能分组、电源管理的四种模式,还有时钟树的配置方法。
说白了,硬件平台入门就是三件事:
- 认识板子:知道上面有什么,能干什么
- 认识引脚:知道哪个脚能干什么,别冲突
- 认识电源和时钟:这是系统稳定运行的基础
下一章,我们会开始搭建开发环境,然后真正跑起第一个无线程序。到时候,你就能看到你的LaunchPad板子上的LED亮起来,然后通过无线发送数据了。
准备好了吗?我们下章见。