19346|42

1158

帖子

2

TA的资源

版主

楼主
 

【MSP430趣谈】MSP430第五讲之库函数的使用 [复制链接]

 
MSP430教程之五
    哈哈!经过前面的四讲,不知道大家有收获没有。至少感觉自己有点入门了吧。可能大家会说为什么要写这个,那么多的书籍,也有很多的教程。我的出发点是他们大部分的都是以工程师的身份了,或者说已经从事这一块行业比较长的时间了。可能在学习的时候,很多时候他们遇到的问题对于他们来说没什么,但是我们有时候完全搞不明白。但是我觉得我作为一名刚刚学430的大学生来说,可能写出来的更加贴切大家在实际学习。也希望说把每一个问题都可以说到,但是这很难,也希望大家能够指出来,来帮助完成这个教程咯。
   (PS:不知道大家有没有遇到说跟着教程做,但是他是对的,自己也是一步一步来的,但是就是不对,完全不知所以然,有时候,真的给气死。)
    好了,废话讲了一堆,进入我们今天的学习,我们这次学习的话就是来看看怎么运用官方的库。对于前面两三次的代码我们都是通过直接操作寄存器的方式,(就不解释寄存器了哈,这个概念还是蛮复杂的哈,自行百度)那么还有其他的方式,就是建立在库的层面,也就是我们看不到寄存器了,看到是每一个子函数的函数名了,也就是所谓的APIApplication Programming Interface,应用程序编程接口)。可能说的有点抽象哈,我们看下具体长什么样哈。
    文件在第一讲的文件当中哈,文件夹MSP-EXP430FR5969_Software_Examples_windows
    打开我们看到,
     Readme中我们可以了解整个文件夹的结构和他们的内容。
(就不翻译了,不要嫌我懒,因为真的太多了)
    这里我们利用的是上图红色方框中的库文件,打开后目录如下,
    我们打开driverlib,里面有个文件夹MSP430FR5xx_6xx,好了,我们看到我们的库了。
    好多好多好多。。。。。。。其实TI官方也挺懒的,有没有发现每个文件都只是以模块命名的,没有说使用与那些单片机,当以后大家下载TI其他芯片的库的时候发现他也是这样做的,哎。等等我们来改造一下好了。
我们开的这个文件夹430BOOST-SHARP96_GrlibExample_FR5969是一个TI官方的一个Demo
    我们看下怎么导入这个工程哈。
    打开ccs,点击files
单击Import
    选择 Code Composer Studio下面的CCS Project
    单击Browse,找到你的文件夹,记住是430BOOST-SHARP96_GrlibExample_FR5969,这个文件夹。单击Finish即可。但是这里我犯了一个错误,就是我把这个工程放在了中文路径下,如果大家要编译这个工程的话一定要放在英文路径下。大家就可以在工程的那个窗口中找到我们的工程,可以看看目录长什么样,这里我们就不讲了,我们看看怎么用这个库。
    我们这里要运用外设库,我们右键复制上面的driverlib,然后右键我们新的工程名,选择粘贴即可。
   接下来我们需要更改一下路径,把我们刚刚添加进来的文件的路径加进去。右键工程名选择properties
单机黑色方框中的按钮,
选择workspace
选择driverlib。单击ok即可。
接下来我们就可以进行程序编写了。但是有个问题就是我们该如何使用这个库呢?TI官方有个网站来说明这些库函数的具体使用方法,我再最后给出了该网站的HTML文件,方便大家使用。
还有一份PDF的说明文件,建议用这个吧。在附件中。路径如下。
PS:上面的方法是不用msp430ware的方法,大家可以通过msp430ware的安装来完成一样的功能。430ware我不是很熟悉,这里就不介绍了,之后有机会我们在说说它的使用)
现在我们使用库文件来实现上次讲的按键中断点亮led的功能。
第一步同样还是需要关闭看门狗,我们建立工程的时候选择了带有main.c的工程,已经帮我们写好了main函数和关闭看门狗的语句,这里就不在写了。
第二步就是要关闭LPM5模式,我们看下怎么用库。
所先第一步要将我们所有的库文件包含进来,
#include “driverlib.h”
PDF文件夹中,我们在PMM章节中找到关闭LPM5的方法。
只需这样写:PMM unlockLPM5();
(关于函数的具体内容我们直接点击PDF文件中蓝色的文字即可马上跳转过去,很方便。)
接下来我们需要配置引脚方向,跳转到GPIO章节。
这里列出了所有的函数列表,方便我们查找(对英文有一定挑战!!年轻人,这有什么,不就是英文嘛,打开有道词典,别怂!!)
GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);//设置为LED端口为输出
GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0);//设置LED默认输出为点亮
GPIO_setAsInputPin(GPIO_PORT_P1,GPIO_PIN1);//设置为按键端口为输入
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1);//配置按键上拉电阻
            GPIO_selectInterruptEdge(GPIO_PORT_P1,GPIO_PIN1,GPIO_HIGH_TO_LOW_TRANSITION);
//设置按键输入下降沿触发
   GPIO_enableInterrupt(GPIO_PORT_P1,GPIO_PIN1);//使能按键端口中断
上面我们就完成了端口的设置
#pragma vector = PORT1_VECTOR //该语句用来标识我们所列矢量的中断服务函数
如果这句不是很理解也没关系,暂且明白,就是要这么用。
下面就是我们的中断函数了。我们将上次的代码全部改成用库函数来编写。
__interrupt void PORT1_ISR(void)
{
        unsigned int Key = 0;
        Key = GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1);
        if(Key == 0)
        {
                __delay_cycles(50000);
                if(Key == 0)
                {
                        GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
                }
        }
        GPIO_clearInterrupt(GPIO_PORT_P1,GPIO_PIN1);
}
这里再解释几个问题,关于__delay_cycles(10000)是调用了系统函数,但是函数的具体意思我也不是很明白,希望大家可以帮忙回答哈。
解释一下按键的延时,为什么要这样。因为按键是属于机械机构,具有不稳定性,需要进行一段时间才可以稳定,刚按下状态是不定,产生抖动。通过延时去除这种不稳定性。我们这里使用的是软件消抖,当然也通过硬件的方式,并联一个电容即可,但是这样就增加了硬件成本。
附件中给了另外一份库文件,如果大家没有下载之前的文档也没关系,使用方法也和上面类似的,就是把driverlib拷贝到你的工程目录下面然后右键工程选择Import下面的import
选择File System然后找到工程目录下的driverlib就可以了。其他的和上面一样。
得到下面的工程目录。同样的在properties中配置路径。不再做一边了哈。

driverlib_2_21_00_08.part01.rar (10 MB, 下载次数: 1295)
driverlib_2_21_00_08.part02.rar (10 MB, 下载次数: 1064)
driverlib_2_21_00_08.part03.rar (2.26 MB, 下载次数: 664)


最新回复

是我没添加路径正确?我按照步骤把 driverlib添加到我的工程下的,然后又设置了路径。不知道哪里出错了!   详情 回复 发表于 2024-9-27 10:42

赞赏

1

查看全部赞赏

 
点赞(1) 关注(7)

回复
举报

361

帖子

5

TA的资源

一粒金砂(高级)

沙发
 
呵呵,首先对教程的更新点赞,关于TI的文件以模块命名,并不是因为懒哦,是因为许多芯片虽然型号不同(芯片的资源有差异)但仍有很多资源的用法是相同的(例如串口),所以很多时候我们把某个系列芯片的头文件包含进来就可以了,这样命名更好的体现了通用性,教程中的开发工具本人没用过,如果使用IAR的话,会发现库文件里其实是有对应的指定型号单片机的头文件的,很灵活的。尽量避免做重复的工作,“懒”也是一种美德哦

点评

嗯嗯,有时候这样做必然有他的道理,可能我从32过来,突然换了有点不习惯  详情 回复 发表于 2015-12-1 10:43
 
 

回复

1158

帖子

2

TA的资源

版主

板凳
 
dong2213dong 发表于 2015-12-1 08:49
呵呵,首先对教程的更新点赞,关于TI的文件以模块命名,并不是因为懒哦,是因为许多芯片虽然型号 ...

嗯嗯,有时候这样做必然有他的道理,可能我从32过来,突然换了有点不习惯
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

4
 
首先给楼主点个赞,__delay_cycles(10000)调用void           __delay_cycles(unsigned long cycles);函数,机器周期延时。再提一个意见,直接从ccs导入空的库工程,效率高很多

点评

好的,具体我试试看,谢谢咯!  详情 回复 发表于 2015-12-1 17:29
 
 
 

回复

1158

帖子

2

TA的资源

版主

5
 
数码小叶 发表于 2015-12-1 16:51
首先给楼主点个赞,__delay_cycles(10000)调用void           __delay_cycles( ...

好的,具体我试试看,谢谢咯!
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

6
 
给楼主点赞

点评

谢谢支持!!  详情 回复 发表于 2015-12-2 15:10
 
 
 

回复

458

帖子

1

TA的资源

一粒金砂(高级)

7
 
真的是好文章,支持版主

点评

谢谢支持哈!!  详情 回复 发表于 2015-12-2 15:10
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

8
 
写的不错

点评

谢谢支持  详情 回复 发表于 2015-12-2 15:10
 
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 

回复

1158

帖子

2

TA的资源

版主

9
 

谢谢支持!!
 
 
 

回复

1158

帖子

2

TA的资源

版主

10
 
lclhitwh 发表于 2015-12-1 19:11
真的是好文章,支持版主

谢谢支持哈!!
 
 
 

回复

1158

帖子

2

TA的资源

版主

11
 

谢谢支持
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(初级)

12
 
我感觉库函数用起来运行速度和编译速度都太慢了,直接写寄存器比较快。

点评

恩,对于430来说可能在运行速度上面库函数和寄存器可能差的会多一点,我后面会给出库函数和寄存器的两张方法实现各个模块的功能,主要讲库函数的原因是因为当你接触了稍微复杂一点的单片机,或者更为上层的开发的时  详情 回复 发表于 2015-12-3 14:16
 
 
 

回复

1158

帖子

2

TA的资源

版主

13
 
vilsen 发表于 2015-12-3 11:43
我感觉库函数用起来运行速度和编译速度都太慢了,直接写寄存器比较快。

恩,对于430来说可能在运行速度上面库函数和寄存器可能差的会多一点,我后面会给出库函数和寄存器的两张方法实现各个模块的功能,主要讲库函数的原因是因为当你接触了稍微复杂一点的单片机,或者更为上层的开发的时候,你能够更好更快的上手
 
 
 

回复

412

帖子

113

TA的资源

一粒金砂(中级)

14
 
不错   继续

点评

谢谢支持!!  详情 回复 发表于 2015-12-3 23:17
 
 
 

回复

1158

帖子

2

TA的资源

版主

15
 

谢谢支持!!
 
 
 

回复

35

帖子

1

TA的资源

一粒金砂(中级)

16
 
希望楼主可以继续更新。这个系列我都看了,感觉确实有了很多与以往不同的认识。谢谢楼主,支持楼主,楼主继续,希望早日看到你的第六讲

点评

谢谢支持!!  详情 回复 发表于 2015-12-8 16:15
 
 
 

回复

1158

帖子

2

TA的资源

版主

17
 
纠结者 发表于 2015-12-7 21:50
希望楼主可以继续更新。这个系列我都看了,感觉确实有了很多与以往不同的认识。谢谢楼主,支持楼主,楼主继 ...

谢谢支持!!
 
 
 

回复

316

帖子

5

TA的资源

一粒金砂(高级)

18
 
为何编译程序的时候,错误显示:无法打开“driverlib.h”?

点评

你在properties下面添加的路径是什么呢?如果你添加到driverlib这个文件夹,那你include的时候需要改成#include “MSP430FR5xx_6xx/dirverlib.h”这样子,如果你是添加到MSP430FR5xx_6xx这个文件夹的话,就直接添加#  详情 回复 发表于 2015-12-9 21:01
 
 
 

回复

316

帖子

5

TA的资源

一粒金砂(高级)

19
 
是我没添加路径正确?我按照步骤把 driverlib添加到我的工程下的,然后又设置了路径。不知道哪里出错了!
 
 
 

回复

316

帖子

5

TA的资源

一粒金砂(高级)

20
 
什么时候更新下一章啊,卤煮!

点评

已更新咯!可以去看看有什么问题给我留言哈!  详情 回复 发表于 2015-12-19 20:26
下周应该可以  详情 回复 发表于 2015-12-9 20:58
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表