由于最近竞赛需要使用TI公司的MSP430系列芯片,本人在最近两天匆忙的学习了一下MSP430F5529(下文统一称作5529)的使用。写下本文是为了将这两天学习内容做一个复习,并且将学习过程中遇到的问题和大家分享。本人有些许STM32(下文统称32)的编程和硬件基础,所以文章内容会联合32来讲,本系列会围绕搭建CCS开发环境,5529例程的查找,GPIO初始化,中断,UART,IIC,TIMER等内容展开叙述。

因本人技术能力有限,加上第一次写博客,表述不当请见谅,废话不多说,以下为正文内容

一·开发环境的选择

关于MSP430的开发环境,有很多种选择,常见的有Energia,CCS,IAR for MSP430,MDK等,本人仅使用过Energia和CCS,这两个开发环境都是TI公司官方给我们用来开发TI板子的开发环境,其中Energia是一个开源的社区驱动型开发环境,界面与Arduino有97%的类似度,如果你之前有过Arduino的开发经验,那么大概率可以无缝衔接到Energia,Arduino的开源库大多都可以移植到Energia,源代码都托管到了github上面,点击Energia 可查看。而CCS是Eclipse软件框架结合嵌入式开发调试功能的产品,对于常用VS,Eclipse以及MDK等环境的朋友们可能会比较友好。

接下来分享一下我搭建CCS的经验

CCS全名为Code Composer Studio,这个名字听上去是不是就很专业哈哈,我使用的版本为CCS8.3,选择这个版本没有什么特殊原因,大家在官网选择自己想要的版本进行下载就可以了,尽量不要太低,点击CCS进行下载,关于CCS的安装,在安装选项里勾选MSP430后不断点下一步就可以了,由于我下载的8.3版本是32bit软件,而我的电脑是64bit的,安装过程报了c++ compiler相关的错误,下载DirextX对自己电脑的C++Compiler进行修复就可以了。如果有相同问题的小伙伴,可尝试此法。

CCS的主界面是这样的,左上角的锤子是编译,锤子左边的{}是烧录,{}的左边是DEBUG仿真调试模式。安装CCS的过程中就已经自动安装好了相关的串口驱动,使用mircoUSB数据线连接5529和电脑后,点击烧录便可以将程序烧录进5529的flash中,烧录时5529的eZ-FET-lite区域(就是插线那一边)红灯会闪烁,在Project里就可以新建一个CCS工程,按照自己的需要选择工程属性就可以,如果不小心选错了芯片,可在Project Explorer里右击工程文件夹后选择Properties从而更改自己的工程属性选项。

二·例程-DrvierLib和寄存器操作的选择

和32类似,5529的开发也可大体分为寄存器开发和库函数开发,其中库函数可以在这里下载DriverLib后导入自己的工程中使用,库函数文件内有很多example工程,其中MSP430F5xx_6xx中存在着5529能够用的例程。我个人感觉使用库函数不如使用寄存器开发来的容易,一来是因为DriverLib的写法并不是很戳我的编程习惯,并且例程中的库函数操作并不只是针对5529的,二来是5529的寄存器并不像32那样多而复杂,也可能是因为我用不到那么多的寄存器。网上有关5529寄存器开发的例程有很多,这大大降低了寄存器操作的上手难度。

三·I/O和常用时钟

先给大家介绍一下5529的外设和存储资源,5529具有128KB的Flash,8KB的RAM,两类串行通讯接口,其中USCI_Ax具有UART,IrDA,同步SPI功能,USCI_Bx具有IIC,同步SPI功能,四个多通道定时器TA0,TA1,TA2,TB0,12位ADC等。此外,5529的时钟系统也很有必要了解,与32的SYSCLK,APB1,APB2类似,5529也有系统主时钟MLCK,高速外设时钟SMCLK,低速外设时钟ACLK,其中主时钟频率会因为不同模式而改变,一般来讲(分频后)高速外设时钟SMCLK的频率为1.05MHz,低速外设时钟ACLK的频率为32768Hz(2^15Hz),供不同外设使用。

引脚初始化可通过改变以下几个寄存器来实现,

1.I/O方向设定寄存器 PxDIR,I/O相应位置1表示该引脚为输出模式,置0表示该引脚为输入模式,与32的GPIO_Mode_有着部分类似效果;

2.输入设定寄存器PxIN,控制输入引脚的高低电平;

3.I/O输出寄存器PxOUT,控制输出引脚的高低电平;

4.上/下拉电阻使能寄存器PxREN,控制输出输入引脚的上拉/下拉/推挽模式;PxSEL功能选择寄存器,声明该端口要用做外围电路特殊功能,与端口复用有关。

5.输出驱动能力设置寄存器PxDS,默认低电平,置高后可设置为全力驱动,因为MSP430系列主打低功耗,引脚的驱动能力在默认情况下是不能驱动一些功率较大的负载的。

下图是5529引脚及其复用功能图。

这里举一个引脚初始化的例子,初始化P1.0/P1.2/P1.3引脚分别复用为,TA0_CLK,TA0.1,TA0.2功能,这是一个定时器初始化函数,前五行代码属于引脚初始化,作用是先将P1.0的模式设置为输出,后将P1.0的功能复用为定时器TA0的输入时钟(P1.0引脚在CPU上,未引出到PCB),将P1.2和P1.3初始化为输出模式,复用为定时器TA0的TA0.1和TA0.2。

 1         WDTCTL = WDTPW + WDTHOLD;       // 关闭看门狗
2 P1DIR |= BIT0;            //P1.0为输出模式
3 P1SEL |= BIT0;            //P1.0复用其他外设功能
4 P1DIR |=BIT2+BIT3; // P1.2+P1,3为输出
5 P1SEL |=BIT2+BIT3; // 设置 P1.2为TA0.1输出
6 TA0CTL= TASSEL_2 +MC_1; // 设置TIMERA的时钟源为SMCLK, 计数模式为up,到CCR0再自动从0开始计数
7 TA0CCR0 = motor_pwm_period; // 设置PWM 周期
8 TA0CCTL1 = OUTMOD_7; // 设置PWM 输出模式为:7 - PWM复位/置位模式
9 TA0CCTL2 = OUTMOD_7;
10 TA0CCR1=0;               //占空比调节
11 TA0CCR2=0

四·外部中断

外部中断是5529中断优先级最低的中断,其中P1和P2都可做外部中断的中断源,而P1.0的中断优先级在外部中断里是最优的,外部中断可通过以下几个寄存器进行设置:

1.PxIE 中断使能寄存  相应位置1表示允许中断;

2.PxIES中断触发方式寄存器,置1表示下降沿触发,置0表示上升沿触发;

3.PxIFGx中断标志寄存器,允许中断并使能后,中断来临后等待相应时,该位会变为高电平;

下面是P2.1做为外部中断的初始化函数,P2.1引脚默认为板载按键,需要说明的是,使能中断需要开启全局中断,开启方式见下方例程

 1 /*中断初始化函数*/
2 void(exti_init)
3 {
4 P2IE |= BIT1; //P2.1中断使能
5 P2IES |= BIT1; //设置为下降沿触发
6 P2IFG &= ~BIT1; //清中断标志位
7 P2REN |= BIT1; //上拉电阻
8 P2OUT |= BIT1; //初始化置高
9 __enable_interrupt(); //使能中断,也可写做_BIS_SR(GIE);
10 }
11 /*中断服务函数*/
12 #pragma vector=PORT2_VECTOR
13 __interrupt void P2_ISR(void)
14 {
15 if(P2IFG & BIT1) //判断是否有中断挂起
16 {
17 /*在这里写你的中断服务函数*/
18 }
19 P2IFG &=~BIT1; //清空中断标志
20
21 }

学习笔记-CCS-MSP430F5529[快速入门篇一]的更多相关文章

  1. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  2. 【Python】【学习笔记】1.快速入门

    1.软件安装 从官网下载相应版本的安装包,一般不大. https://www.python.org/ 安装一路默认即可 2. 参考教程:快速入门:十分钟学会Python 本文的内容介于教程(Totur ...

  3. MyBatis学习笔记(一)——MyBatis快速入门

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4261895.html 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优 ...

  4. 前端学习笔记之ES6快速入门

    0x1 let和const let ES6新增了let命令,用于声明变量.其用法类似var,但是声明的变量只在let命令所在的代码块内有效. { let x = 10; var y = 20; } x ...

  5. 《C++ 101条建议》学习笔记——第一章快速入门

    1.C++程序组成:a.编译指示,由#开始,不由分号结束.只是影响编译过程.b.声明语句,影响编译过程,编译结果中并不会生成对应的指令.只是告诉编译器一些信息.c.可执行过程语句,生成对应的指令.包括 ...

  6. Node.js学习笔记3(快速入门)

           一.开始使用Node.js编程           1.hello world           好了,让我们开始实现第一个 Node.js 程序吧.打开你常用的文本编辑器,在其中输入 ...

  7. 私有仓库GitLab快速入门篇

    私有仓库GitLab快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 安装文档请参考官网:https://about.gitlab.com/installation/#ce ...

  8. Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇)  作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/bee ...

  9. 【Linux开发】Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇) 作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer ...

  10. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

随机推荐

  1. Jenkins+Github+Nginx实现前端项目自动部署

    前言 最近在搭建一个自己的网站,网站框架搭好了要把项目放到服务器运行,但是每次更新网站内容就要手动部署一次,实在很麻烦,于是就想搭建一套自动化部署的服务.看了一些案例最后选用现在比较主流的Jenkin ...

  2. 简单聊聊Ehcache缓存

    最近工作没有那么忙,有时间来写写东西.今年的系统分析师报名已经开始了,面对历年的真题,真的难以入笔,所以突然对未来充满了担忧,还是得抓紧时间学习技术. 同事推了一篇软文,看到了这个Ehcache,感觉 ...

  3. Java-Lambda相关使用介绍

    频繁使用的语句   Lambda又涉及到comparator和comparable区别(Comparable是实现comparable接口,实现后可以使用Collections.sort或Arrays ...

  4. 一次鞭辟入里的 Log4j2 异步日志输出阻塞问题的定位

    一次鞭辟入里的 Log4j2 日志输出阻塞问题的定位 问题现象 线上某个应用的某个实例突然出现某些次请求服务响应极慢的情况,有几次请求超过 60s 才返回,并且通过日志发现,服务线程并没有做什么很重的 ...

  5. CentOS中按tab键不能自动补全问题解决办法

    CentOS中按tab键不能自动补全问题解决办法 一:检查一下系统有没有安装bash-completion包. 二:yum查找一下 三:yum安装bash-completion包 前言 在CentOS ...

  6. 7. Qt中与垃圾回收机制相关的替代方法(未完

    容器支持引用计数和写时复制 父对象和子对象 QPointer.QSharedPointer.QWeakReference 对象子类化 栈对象

  7. 『心善渊』Selenium3.0基础 — 18、使用Selenium操作浏览器的弹窗

    目录 1.操作浏览器自带弹窗 2.操作浏览器页面自定义弹窗 1.操作浏览器自带弹窗 (1)说明: webdriver中处理JavaScript所生成的alert.confirm 以及prompt 弹窗 ...

  8. CentOS-Docker安装RabbitMQ集群(rabbitmq:3.7.16-management)

    准备工作 1.机器资源(分别安装docker环境) 建议机器配置: centos7.x 4G及以上 100GB及以上 2核及以上 192.168.1.101 192.168.1.102 192.168 ...

  9. 11 shell中内置关键字[[]]:检查条件是否成立

    0.[[]] [] (())的对比 1.[[]]支持正则表达式 0.[[]] [] (())的对比 [[ ]] 对数字的比较不友好,所以使用 if 判断条件时,建议用(())来处理整型数字,用[[]] ...

  10. MySQL 中的转义字符`

    ` 是 MySQL 的转义符,用来避免列名或者表名和 mysql 本身的关键字冲突. 所有的数据库都有类似的设置,不过mysql用的是`而已.通常用来说明其中的内容是数据库名.表名.字段名,不是关键字 ...