MSP430各模块及外设总结和初学那些坑【含示例代码】

  • 2019/7/23开封MSP430F5529
  • 个人很喜欢TI公司的板子,没什么很有技术含量的原因,就因为好看哈哈
  • 本文记录学习430操作的探索过程,分享更好用实用的探索方法,因为是初接触,本文随时更新
  • 本文以寄存器版本视角讲解,博主不是不会用库函数版本,只是没用过寄存器版本……想要尝试一下,有错误还望包涵
  • 有什么好的建议请在评论区一起交流,欢迎交流,互相学习
  • 例程与内容均属原创,如引用请标注原出处

    文章目录

    • 集成开发环境/工具(IDE)
    • 创建第一个工程【LED灯】
    • 串口传输
      • 研究过程和出错现象
      • 正确打开方式
    • ADC模数转换器
      • 前言
      • 要点
    • DMA

集成开发环境/工具(IDE)

  • 在官网看到有关的介绍和好友推荐的工具中,最有好感的是CCS(Code Composer Studio),虽然用MDK5也可以,但是有更方便的自然是要尝试一下……
  • 相较于MDK5,CCS支持 TI 的微控制器和嵌入式处理器产品系列,含一整套用于开发和调试嵌入式应用的工具,用于优化的 C/C++ 编译器、源码编辑器、项目构建环境、调试器、描述器以及多种其他功能。
  • 目前是不需要license的,也就是说不仅正版而且免费!虽然只免费90天,不过这已经足够了。
    在下载的时候会提示你想要下载的资源,建议学什么下什么,不然占的内存有点多,比如我打算学习MSP430/432系列和Tiva-TM4,就只下载了这三类,但是这也占了1600M以上的空间。
  • 这是官方最新版本的CCS下载链接TI Code Composer Studio 各版本的官网下载链接MSP430各模块及外设总结和初学那些坑【含示例代码】_第1张图片

创建第一个工程【LED灯】

  • 下载CCS的时候习惯性的从网上搜各种430例程和讲解资料,然后发现——几乎没有什么有价值的东西(怪我太菜,搜不到),搜到的一些什么官方例程后来发现并没有什么用,因为——CCS上已经集成了
  • 在记录这个之前强烈建议CCS首页的引导视频看一遍,那个几分钟的视频讲清楚了CCS最常用的用法和怎样利用CCS查找资源,英文好的可以看第一个视频(当然,视频下面可以设置中文字幕,听不懂看字幕也可),想看中文的可以看第二个视频。相较于第二个视频第一个视频的清晰度比较高,可以看到一些操作的准确位置
  • CCS选项卡的view——>Resource Explorer
    在搜索框里选自己的芯片,比如我用的MSPF5529,我键入“5529”再在弹出的选项中点击我的Device即可 MSP430各模块及外设总结和初学那些坑【含示例代码】_第2张图片
  • 如下图,Device Documentation可以查看相关的资源文档,建议用Chrome打开(因为Chrome可以翻译成汉语),Software下面的5529有例程(Peripheral Examples),下面的两个子文件夹分别是寄存器和库函数版本的。下图中右面有个下载的标志(因为我已经下载了,所以出现Uninstall),点击可以下载,下载后该部分资源会在绿色的倒箭头,说明这是本地文件啦!MSP430各模块及外设总结和初学那些坑【含示例代码】_第3张图片
  • 这里以第一个工程LED的点灯为例;打开第一个工程,右边下载标志旁边有个魔方标志,点击可以导入到IDE,注意在导入之前要对资源进行下载MSP430各模块及外设总结和初学那些坑【含示例代码】_第4张图片
  • 如果出现该提示,说明你已经导入过一次了,可以在工作台找找你导入过的工程MSP430各模块及外设总结和初学那些坑【含示例代码】_第5张图片
  • 创建工程之后,只需要对工程进行修改即可,这里博主只是添加一个LED而已;编辑完之后点击锤子(编译),然后Run->Load->【你的设备】就可以下载了,也可以选择绿色的甲壳虫(Debug)仿真。
    MSP430各模块及外设总结和初学那些坑【含示例代码】_第6张图片

串口传输

  • 串口是个好东西,虽然在最初学习的时候我觉得LCD显示屏更好用。
  • 这部分主要针对学习430的串口小白,因为博主搞了大半天搞到最后发现出错的地方都是菜鸟都不会犯的错误[手动羞愧] ……还是以寄存器版本为例

研究过程和出错现象

  • 本文以第四个uart例程为例,参数如下:
    波特率9600
    UCA0的RXD【P3.4】和TXD【P3.3】
    8数据位、1停止位
  • 波特率的计算请到官网上找用户手册,博主看例程里有9600115200(平时惯用的两个),所以没有细研究(其实就是懒)
  • 接上了STlink并把STlink的RXD和P3.3连接,TXD和P3.4连接,并使其共地;
  • 先锤子再运行
  • 然后出错了……犯错过程如下:
  • 1)接上STlink后运行过程弹出“No USB FET was found”,且LED101常亮,但是拔掉STlink之后重插一遍MSP430之后就不报错误了,于是本博主以为……这板子可以通过RS232->USB直接当串口用【现在想想觉得自己可能信得是玄学】MSP430各模块及外设总结和初学那些坑【含示例代码】_第7张图片
  • 2)然后博主拔下STlink后成功将程序下载进去,打开串口调试助手一看,诶?怎么有两个COM口?本着试试哪个能收到数据哪个就是正确的心态【还是因为懒】选了COM12,发数据,没回应;再换COM11,回应是有了,只是,数据完全不对啊!
    MSP430各模块及外设总结和初学那些坑【含示例代码】_第8张图片
    MSP430各模块及外设总结和初学那些坑【含示例代码】_第9张图片
  • 3)程序从头到脚看了N遍,的确是把收到的程序发回去,没错啊!网上搜各种错误信息,可是大多数出错都是因为自己编写的程序,而我烧录的是例程……然后找来找去发现,板子上的LED101红灯竟然是亮着的!这说明状态并不正常,经过故障排除得到了出错的所有原因

正确打开方式

  • 首先,使用的STlink不要含有驱动,我是用的是主控芯片为STM32F103RBT6的STlink,因此只有一个端口,根本找不到MSP430的驱动,自然会报错
    端口
  • 其次,板子不会凭空连接收发端,之前出现的两个COM其实如果我没有偷懒的话会发现COM11是Debug端口,COM12才是MSP UART1的串口端口,因此才会收到不正常的数据MSP
  • 换了一个普通的USB->TTL后连接后终于正常,如下图,然后在串口调试助手中选择COM5即可正常收发数据【注意:例程请用16进制显示】
    正常
  • 另外为了方便,博主写了一个串口发送字符和字符串的例程,并控制LED1、LED2的亮灭指示,点此下载MSP430F55xx_串口发送字符或者字符串函数_控制LED指示【波特率9600】

ADC模数转换器

前言

*终于到ADC了……其实博主在写UART之前先写的ADC,但是本人有个强迫症……就是在用个什么东西的时候都想把他全部都用上……因此在写第一个程序的时候妄想把8个外部通道都打开,作为检测通道(当然未尝不可)
可坏就坏在F5529没有屏……只有2个LED呀!懒人本懒就把其他的通道中断配置成了仅LED1/LED2亮,全亮,全灭等等状态(现在想想真是懒到家了)
结果当然是没有结果……折腾了半天全是无用功,人在逻辑并不清晰的时候去做事情事倍功半,如果你逻辑很清晰用LED其实也是可以的……
不得已先写了UART的程序,用UART输出检测到的电压来检查问题。
这件事情告诉我们:偷懒也要有针对性,有的偷懒只会浪费时间。

要点

  • ADC_12配置有四个转换模式:
CONSEQx Mode
0 单通道单次转换
1 多通道单次转换
2 单通道连续转换
3 多通道连续转换
  • 这里对单通道和多通道做一下配置对比以助理解:
单通道 多通道
PxSEL只配置需要的BIT PxSEL配置多个BIT
ADC12MSC为0 ADC12MSC置位
ADC12CONSEQ_0/DC12CONSEQ_2 ADC12CONSEQ_1/ADC12CONSEQ_3
ADC12MCTLx配置通道,注意最后一个通道EOS置位
  • 这里对单次转换和多次转换做一下配置对比以助理解:
单次转换 多次转换
ADC12CONSEQ_0/ADC12CONSEQ_1 ADC12CONSEQ_2/ADC12CONSEQ_3
ADC12SC每次中断都需要再次开启 ADC12SC初始化一次即可
可以在低功耗条件下运行 有那么一点点浪费时间(就是资源)
  • 12位逐次比较,转化结果为0-4096,比较结果存储于ADC12MEMx
  • 第一个例程是单通道检测,将转换数值发送到串口并配置了LED指示,写到多通道模式【多通道】手懒,没有加LED指示,有兴趣可以自己添加。
    MSP430 ADC转换数值发送到串口【控制LED】
    MSP430F55xx_ADC多通道多次转换串口发送数据
    MSP430F55xxADC多通道单次转换串口发送数据

DMA

  • ADC检测之后往往用DMA传输,这样时钟和通道都做到独立于MCU之外了
  • ADC的定时/自动触发:适用于MSP430F5529的ADC12计时器触发源为TA0.1【P1.2】
  • 六种传输模式:
DMADTx 传输模式
0 单次传输模式
1 块传输模式
2、3 突发块传输模式
4 重复单次传输模式
5 重复块传输模式
6、7 重复突发块传输模式
  • 代码
/*DMA传输ADC采样值到串口发送*/
/*DMA配置*/
void DMASet(){
    // Setup DMA0
    DMACTL0 = DMA0TSEL_24;                    // ADC12IFGx triggered
    DMACTL4 = DMARMWDIS;                      // Read-modify-write disable
    DMA0CTL &= ~DMAIFG;
    DMA0CTL = DMADT_4+DMAEN+DMADSTINCR_3+DMAIE; // Rpt single tranfer, inc dst, Int
    DMA0SZ = 1;                               // DMA0 size = 1
    __data20_write_long((uintptr_t) &DMA0SA,(uintptr_t) &ADC12MEM0);
                                              // Source block address
    __data20_write_long((uintptr_t) &DMA0DA,(uintptr_t) &UCA1TXBUF);
                                              // Destination single address
}

这里以单字节传输为例,其他模式更改只需更替DMADT_4;上例是从ADC采样后传输到串口,完整代码:MSP430ADC采样通过DMA传输到串口发送【MSPF5529】

你可能感兴趣的:(TI)