十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

TMS320F28335 DSP入门指南:手册解读与CCS例程实战

TMS320F28335 DSP入门指南:手册解读与CCS例程实战 简介本资源是面向嵌入式开发初学者与电机控制、电力电子方向工程师的TMS320F28335全栈入门资料包聚焦DSP硬件理解、外设驱动开发与CCS集成环境实操。压缩包共43.38MB涵盖TI官方技术手册与应用手册含ADC校准、ePWM占空比控制、Flash编程、I²C主从配置等核心主题、CCS4.2兼容的基础实验工程文件如LED流水灯、ADC采样、步进/直流电机驱动、LCD12864显示、SCI串口通信、EEPROM读写、温度采集TMP等15个可直接编译运行的例程以及十余份高价值技术文档如SPRA958i内部Flash启动、SPRAAL3 Flash烧录方案、SPRAAI1全范围PWM输出DAC化等。已有520人学习下载内容组织兼顾理论查阅与工程复现所有例程均基于真实硬件平台验证目录结构按功能模块划分便于快速定位外设驱动范例与底层配置逻辑显著降低F28335学习门槛。 我接触TMS320F28335这块芯片也有几年了从最开始对着技术手册一头雾水到现在能带着团队做电机控制和并网逆变器项目中间踩过的坑确实不少。看到这份“TMS320F28335资料整理包括技术手册和应用手册CCS4.2基础实验例程工程文件.zip”的时候我第一反应是这玩意太适合刚入手F28335的人了。文件名虽然长但信息量不小技术手册加应用手册再配一套CCS4.2能直接打开的例程工程几乎是完整的入门闭环。很多人拿到这类资料包之后习惯性先解压然后被里面一堆PDF和工程文件夹搞蒙不知道从哪看起。实际上这个资料包的价值不在于文件本身而在于怎么把“手册”和“例程”两条线配合着用。这篇东西我不打算做文件清单式的罗列而是结合我自己实际调试F28335的经验把“如何高效利用这一套资料快速上手”这件事讲透。顺带也回应一个网上被反复搜索的问题TMS320F28335有CAN通讯吗这个问题下面会专门展开讲。1. 资料包整体拆解先建立学习地图再动手1.1 资料包里的“两条腿”文档和工程一份合格的DSP入门资料包至少得覆盖两个维度理论参考和动手验证。这个压缩包里的“技术手册和应用手册”是理论参考CCS4.2基础实验例程工程文件是动手验证。两条腿一起走学习效率比单纯看文档或者单纯抄代码高得多。技术手册通常指芯片数据手册也就是Datasheet对应TMS320F28335是SPRS439系列文档。这类手册的核心内容集中在芯片的整体特性、引脚定义、电气规格、封装信息最关键的是引脚复用表。应用手册则偏向于某个功能模块怎么用、某个算法怎么实现、某个外设的时序怎么配置。TI官方发布的DSP应用手册Application Report里比如SPRA958、SPRAAX6之类的文档会给大量寄存器配置代码和时序说明这些往往是中文教材里讲不透的东西。工程文件则是把手册里的文字变成“能跑的东西”。基础实验例程一般涵盖GPIO点灯、定时器中断、外部中断、ADC采样、PWM输出、SCI串口通信这几类最常见的实验。如果你拿到的资料包里还有CAN例程那性价比就更高了。1.2 为什么CCS4.2仍然值得用现在TI主推的CCS已经到12.x版本了但国内很多高校实验室和工业项目还在用CCS4.2原因很简单稳定、破解资源多、老工程师习惯了这个界面。CCS4.2基于Eclipse框架和后来的CCS6、CCS8在操作逻辑上没有本质变化学会4.2再切换到新版本成本也不高。更重要的是很多老开发板自带的仿真器比如XDS100V1在CCS4.2下驱动最稳。新版本CCS对老仿真器支持反而可能出现兼容问题。所以资料包里的例程如果是在CCS4.2下创建的你用CCS4.2打开编译成功率最高。提示如果你的开发板是XDS100V2或者XDS110仿真器用CCS4.2请注意安装对应版本的仿真器驱动否则Device Manager里会一直显示未知设备。2. F28335到底能不能用CAN通讯先看硬件再看代码2.1 F28335内置eCAN模块答案是肯定的这个问题的标准答案是TMS320F28335有CAN通讯功能芯片内部集成的是增强型CAN控制器也就是eCAN模块完全兼容CAN 2.0B协议。这意味着你不需要外扩独立的CAN控制器芯片比如SJA1000之类只需要在芯片外面加一个CAN收发器芯片就能直接挂到CAN总线上。eCAN模块的总线速率最高可以到1Mbps这在工业现场足够用。要知道CAN通讯的关键参数其实就是波特率和标识符滤波eCAN模块有32个可编程邮箱Mailbox每个邮箱都可以独立配置成发送或接收接收邮箱还能做标识符掩码滤波。这32个邮箱就是32个“信箱”你可以把不同ID的数据帧分门别类放到不同的信箱里CPU只需要定期去检查哪个信箱收到了数据就行效率很高。2.2 硬件上少了CAN收发器总线还是跑不起来虽然F28335内部有完整CAN控制器但它输出的信号是CAN_TX和CAN_RX电平是3.3V的TTL/CMOS逻辑电平不能直接连到CAN总线的差分线上。必须外接CAN收发器芯片最常见的是TI的SN65HVD230还有PCA82C250、TJA1050等。以SN65HVD230为例电路连接方式是F28335的CANTXA引脚GPIO31复用功能接收发器的TXDF28335的CANRXA引脚GPIO30复用功能接收发器的RXD收发器的CANH和CANL分别接总线的高、低线在CANH和CANL之间接一个120Ω终端电阻尤其是总线两端都各接一个很多人第一次调CAN通讯失败问题不是程序而是漏了终端电阻。总线两端各一个120Ω电阻这个规则看着简单实际上在实验台上用两根杜邦线把两个节点连起来的时候特别容易漏。2.3 初始化eCAN的寄存器配置要点看资料包里的CAN例程时重点关注三个初始化阶段。首先是GPIO复用配置把GPIO30和GPIO31复用为CANRXA和CANTXA功能。这个步骤经常被忽略因为F28335的引脚默认是GPIO功能不用PINMUX配置的话CAN模块根本收发不了数据。接着是CAN位时序配置核心是设置波特率。CAN波特率计算公式是基于CAN模块时钟、预分频值、时间量子TQ以及同步跳转宽度SJW、时间段1和时间段2的组合。资料包例程里一般会给出500kbps的配置可以直接用。最后是邮箱配置把某个邮箱设成发送邮箱写入要发送的数据、设置DLC然后请求发送把某个邮箱设成接收邮箱使能接收中断或者查询接收标志位。// eCAN模块初始化核心片段500kbps晶振30MHzCAN模块时钟150MHz void CAN_Init(void) { EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO30 1; // GPIO30复用为CANRXA GpioCtrlRegs.GPAMUX1.bit.GPIO31 1; // GPIO31复用为CANTXA EDIS; InitECan(); ECanaShadow.CANMC.bit.SCB 1; // 请求使能CAN配置模式 ... }3. 技术手册和应用手册怎么读才不会走弯路3.1 技术手册Datasheet重点抓引角和电气特性很多新手拿到SPRS439这个编号的TMS320F28335数据手册喜欢从第一页开始读结果被芯片框图、CPU内核结构劝退。实际上对初学者来说数据手册不是用来“从头读到尾”的而是当字典查的。最重要的部分在我看来有三个。第一个是引脚分配和引脚复用表。F28335是176引脚LQFP封装引脚很多但真正需要关注的是GPIO复用功能。比如我刚拿到一块板子时想知道SPI的CLK引脚在哪个位置就查数据手册的Pin Map和Multiplexing表格而不是靠猜或者看原理图猜原理图还可能标错。第二个是绝对最大额定值和电气特性。做硬件设计时要确认GPIO输入输出电压范围、ADC参考电压要求、电源供电电流是否满足。这块芯片的模拟电源和数字电源要分开滤波否则ADC采样噪声会很大数据手册里关于电源去耦的建议非常实用。第三个是启动模式配置。数据手册里有Boot Mode Selection表格通过GPIO84到GPIO87的电平状态决定启动模式。最常见的配置是跳到Flash启动也就是GPIO871、GPIO861、GPIO851、GPIO84任意。如果程序烧进Flash但是一上电不跑先查这几个引脚的电平对不对。3.2 应用手册Technical Reference要带着问题去翻技术参考手册TRM是对每个外设模块做详细寄存器描述的文档。这块文档有几千页说实话没人能背下来。我的方法是把TRM按外设模块拆开用到哪个模块就翻哪个章节。比如要配置ePWM模块就专门看ePWM章节里的时基周期寄存器TBPRD、比较寄存器CMPA、动作限定寄存器AQCTLA这些内容。应用手册Application Report则更接地气。TI官网发布了很多面向F28335的应用笔记比如电机控制中SVPWM实现、数字电源的PID控制、CANopen协议栈移植等。这些应用笔记会给出完整代码思路和关键参数计算过程比TRM的纯寄存器描述更容易转化为实际代码。资料包里如果带有这类应用手册恭喜你含金量比单纯的数据手册高很多。心得读手册的时候准备一个笔记本每确认一个外设的初始化流程就画一个简化流程图。把TRM里的寄存器名字写到流程图边上下次写代码直接照着流程图配置寄存器效率翻倍。4. CCS4.2从导入工程到烧录调试的完整实操4.1 把例程工程导入CCS4.2的两种方法资料包里的例程工程文件通常是CCS4.2创建的工程包含.pjt后缀的工程文件或者.project文件。导入时我推荐用Project菜单里的Import Existing CCS/CCE Eclipse Project功能。指定工程所在目录后CCS会自动识别并导入。这里有个容易踩的坑工程文件路径里尽量不要有中文和空格否则编译器在找头文件和CMD文件的时候可能报错。如果导入后工程显示感叹号或者编译报错找不到头文件多半是include路径和库路径没有配对。右键工程名选择Properties在Build下的C2000 Compiler的Include Options里把DSP2833x和DSP2833x_common头文件路径添加进去同时在Linker的File Search Path里添加对应的库文件路径。4.2 目标配置文件创建与仿真器连接导入工程后要建立一个目标配置Target Configuration告诉CCS用什么仿真器去连接什么芯片。我习惯在Target Configurations窗口里新建一个ccxml文件仿真器选Texas Instruments XDS100v2 USB Emulator设备选择TMS320F28335。如果板载仿真器是XDS100V1就选XDS100USB Emulator。连接仿真器的操作顺序也有讲究先启动CCS4.2再给开发板上电然后点击Debug按钮。如果顺序反了仿真器驱动经常认不到芯片。连接成功后CCS会进入调试界面自动加载.out文件到DSP的RAM里。4.3 烧录Flash避免掉电丢程序的设置基础例程默认是RAM调试模式也就是程序只烧进DSP的RAM里掉电就没了。这时候资料包里的F28335.cmd或者F28335_FLASH.cmd文件就派上用场了。如果想要程序固化需要把工程里默认的28335_RAM_lnk.cmd替换成Flash链接命令文件然后在编译选项里加一个宏定义。具体操作为右键工程Properties在Build下的C2000 Compiler的Predefined Symbols里增加FLASH宏然后重新编译再点击Debug下载程序程序就会烧写到Flash中。烧写完成后断开仿真器重新上电程序就能独立运行。实际用下来这个过程中的坑主要是CMD文件没有正确配置FLASH起始地址导致烧写时报“Data verification failed at address 0x3F7FF6”这类错误。遇到这种报错检查Flash起始地址是否和芯片规格一致F28335的Flash地址从0x300000开始boot ROM在0x3F8000。5. 基础实验例程逐个拆解从点灯到串口通信5.1 GPIO点灯最小系统验证的关键一步点灯是嵌入式开发的第一步作用不亚于程序员写的Hello World。F28335的GPIO例程核心是配置GPIO方向寄存器GPIODIR以及数据寄存器GPIO DATA。GPIO0到GPIO31属于GPAMUX和GPIODIR控制范围其中GPIO0到GPIO11默认是八位数据总线模式从外部存储接口XINTF复用而来。点灯例程的实现逻辑很简单但有几个细节值得注意。F28335的GPIO输出电流驱动能力有限大概在几个毫安级别直接点亮普通LED没问题但如果LED需要的电流较大要用三极管或缓冲器驱动。另外GPIO在初始化时一定要先配置方向再写输出值否则引脚状态不确定可能导致误动作。// GPIO点灯例程核心 void LED_Init(void) { EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 0; // GPIO0设为普通IO GpioCtrlRegs.GPADIR.bit.GPIO0 1; // GPIO0设为输出 EDIS; GpioDataRegs.GPADAT.bit.GPIO0 1; // 初始输出高电平灭灯 }5.2 定时器中断理解中断服务函数和优先级定时器例程是学习DSP中断系统的必修课。F28335有3个32位CPU定时器其中定时器0和定时器1可以给用户使用定时器2留给实时操作系统RTOS做节拍。定时器的工作过程本质是TIM寄存器在时钟驱动下递减计数减到0时产生中断然后自动重装PRD寄存器里的周期值开始下一轮计数。配置定时器周期时要计算好时钟分频。F28335的CPU主频到达150MHz定时器时钟经过预分频后比如设置TDDRH和TDDR为0那么定时器每个CPU时钟周期计数一次周期计算公式为 周期 (PRD 1) / TIMCLK举个例子如果要产生1ms中断TIMCLK是150MHz那么PRD应该设置为149999。定时器中断例程里还要注意在中断服务函数中清中断标志并且在外设中断扩展模块PIE中使能对应的中断组。F28335的PIE把外设中断分成12组定时器0属于PIE第1组第7个中断源配置时要在PIE使能寄存器PIEIER1中置位INT7位。5.3 ADC采样从模拟到数字的完整链路F28335的ADC是12位逐次逼近型有16个输入通道输入电压范围一般0到3V。ADC例程的关键参数包括采样窗口、转换模式、排序器设置。资料包里的ADC例程经常配置成级联模式一次性采集多个通道或者配置成双排序器模式让两个排序器分别管理不同的通道组。ADC采样经常遇到的问题是采样值波动大、结果不稳定。除了硬件上要保证参考电压干净、模拟输入信号低阻抗之外软件层面可以采取多次采样取平均的做法。F28335的ADC模块本身有后处理功能比如能自动计算多次采样的平均值需要把ADCCTL1里的INTPULSEPOS配置好。值得注意的是F28335的ADC转换时钟不能太高ADCCLK最高大约25MHz。配置ADC时钟时通过ADCTRL3寄存器里的ADCCLKPS和ADCTRL1里的CPS位来实现分频。如果ADCCLK超过规格转换结果会跳变严重。5.4 PWM输出电机控制和数字电源的基础PWM例程是F28335最出彩的部分。芯片自带的ePWM模块每个模块有两路输出ePWMxA和ePWMxB可以组成互补输出支持死区插入非常适合驱动半桥和全桥电路。PWM周期由时基周期寄存器TBPRD和时基时钟频率决定占空比由比较寄存器CMPA控制。PWM配置的关键是理解动作限定器AQ的作用它决定了计数到某个值时引脚输出高还是低。比如配置成递增递减计数模式时计数器等于CMPA时输出高电平计数器等于TBPRD或0时输出低电平这样可以产生对称PWM波形。实际调试时强烈建议用示波器观察输出波形验证周期和占空比是否和预期一致。搞电机控制的话PWM死区时间配置是重点。互补PWM的上升沿和下降沿切换瞬间如果两个管子同时导通会直接炸掉功率管。死区模块DB用来在切换时插入一个延时延时时长一般设置为几百纳秒到几微秒取决于功率管的开关时间和驱动电路。例程里配置死区的方法是设置DBCTL寄存器、DBRED寄存器和DBFED寄存器分别控制死区使能、上升沿延时和下降沿延时。5.5 SCI串口通信调试信息输出的利器SCI串口例程就是UART通信。F28335有3个SCI模块SCIA、SCIB和SCIC。SCI例程的调试价值在于当你没法用仿真器在线查看变量时通过串口把关键数据打印出来是最直接的排查手段。配置SCI波特率时要设置SCIHBAUD和SCILBAUD寄存器这两个寄存器保存的是波特率分频值具体数值取决于系统时钟和期望波特率。举个例子外设时钟为37.5MHz期望波特率9600那么分频值大约是390十六进制是0x0186。高字节写入SCIHBAUD低字节写入SCILBAUD。如果无论如何都收不到数据先从示波器看TX引脚有没有波形排除硬件问题后再查寄存器配置。6. 常见问题与排查技巧实录6.1 例程编译和烧录的典型问题我在带新人做F28335项目时整理过一张高频问题排查表。这里列出来供参考因为资料包里的例程基本绕不开这几种情况。问题现象可能原因解决方法编译报错cannot find file .cmd工程配置里的CMD文件路径失效重新添加CMD文件到工程并配置链接器选项Debug连接失败Error connecting to the target仿真器驱动未装好或目标板供电异常检查驱动确认开发板上电检查JTAG接线Flash烧录时报Data verification错误Flash起始地址设置错误或芯片加密核对CMD文件地址检查CSM安全寄存器程序跑飞或进入非法中断看门狗未关闭或中断向量表未初始化初始化阶段调用InitWatchdog关闭看门狗确保PIE寄存器配置正确串口打印乱码SCI波特率配置错误或时钟不匹配核对分频值确认外设时钟频率定时器中断不进入PIE中断使能没开或中断标志位没清检查PIEIER寄存器确保中断服务函数清标志6.2 硬件调试的几个习惯性建议调试F28335的板子我养成了几个固定习惯。第一个是上电前先用万用表量电源对地是否短路尤其是DSP的1.9V内核电压和3.3V IO电压。许多开发板电源设计是先用3.3V经过LDO产生1.9V一旦LDO焊反或者电源接错芯片直接就烧了。第二个习惯是调试外设时先用示波器测量对应引脚的电平变化。比如调CAN先把CANTXA引脚的波形抓出来看如果软件配置正确CANTXA即使没接收发器也会有波形。这样可以快速区分问题在软件层面还是硬件链路。第三个习惯是周期性备份工程。调试过程中改代码有时改了几十行后功能反而异常了能回到上一个稳定版本会节约很多时间。我一般每完成一个功能节点就整体复制一份工程在压缩包里加个日期后缀。第四个习惯是平时多看TI的官方例程和论坛资料包里的资料是基础官方器件页面的最新勘误表Silicon Errata一定要看里面记录了芯片本身的已知问题很多诡异现象都能在里面找到答案。在使用这个资料包的过程中我最想说的一点是F28335的资料多到看不完是正常的但你不需要全部看完。手册是工具书例程是练习题资料包只是提供了这两样东西。真正的上手路径是打开一个例程一边跑一边对照手册遇到问题去查寄存器。用这种方式过完GPIO、定时器、ADC、PWM、SCI这五个基础实验之后你会发现自己已经具备了独立做F28335项目的能力。如果你拿到的资料包里还带了CAN例程那更是好事因为CAN通讯在工业控制里的使用频率非常高F28335的eCAN模块本身也足够强大值得花时间吃透。本文还有配套的精品资源点击获取
返回列表