蓝牙40-BLE基础裸机程序开发课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《蓝牙40-BLE基础裸机程序开发课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓝牙 40 BLE 基础 裸机 程序 开发 课件
- 资源描述:
-
1、通用 I/O口基础程序开发定时器/计数器基础程序开发UART串口基础程序开发看门狗与低功耗基础程序开发A/D转换基础程序开发知识目标知识目标(1)掌握CC2540单片机内部寄存器的配置方法;(2)了解CC2540单片机内部硬件模块的工作原理;(3)掌握基础裸机程序的开发方法。技能目标技能目标(1)能测试CC2540单片机内部各模块的功能;(2)能在蓝牙开发板上进行基础实验的调试。项目分析项目分析 本项目将开始CC2540蓝牙4.0单片机裸机驱动程序的设计,裸机程序是没有操作系统支持,芯片带电后就可以开始执行的程序。与单片机程序一样,所有的功能、驱动代码都要自己编写,裸机程序是学习蓝牙4.0 B
2、LE协议栈开发的基础,协议栈通过调用相关的裸机驱动实现一定的功能。本项目主要介绍在CC2540蓝牙单片机上的I/O口、定时器、串口、看门狗和AD采集等五个常用模块的基本原理和应用,并分析了各模块的工作过程。本项目还将着重阐述五个模块中各任务的程序调试方法,使读者能够更好地了解CC2540蓝牙4.0单片机最小系统的基础程序开发。任务一 流水灯的设计任务描述任务描述 本任务要求利用延时程序与循环程序,对LED1、LED2和LED3三个小灯实现流水灯效果,时间间隔大约为0.5 s。知识链接知识链接 三个小灯实现流水灯的设计任务中涉及四个寄存器,即P1、P1DIR、P1SEL和P1INP。其中,P1D
3、IR是P1口各个管脚的方向控制寄存器,P1SEL是P1口各个管脚的功能选择寄存器,P1INP用来设置P1口各个管脚的输入模式。P1寄存器如表3-1所示,P1寄存器包含8个位,由P1_7P1_0组成。当P1口对应关键设置为I/O口时,该寄存器为相应端口的数据寄存器,其中每位对应各自的管脚,可以位寻址。P1DIR寄存器如表3-2所示,P1DIR是控制P1口管脚的方向控制寄存器。当对应位为1时,代表对应管脚为输出方向;若为0,则代表对应管脚为输入方向。P1SEL寄存器为P1口管脚的功能选择寄存器,用于选择P1对应端口是GPIO功能还是外设功能。P1SEL寄存器如表3-3所示。P1INP用于设置P1口
4、各个管脚的输入模式,当对应管脚为1时,I/O口输入时为三态输入模式;当对应管脚为0时,对应的端口输入时为上拉/下拉模式,复位值为0。任务实施任务实施 在本任务中,实现的流水灯效果即按LED1LED2LED3顺序亮,并不断循环(这里所说的LEDx亮是只有LEDx亮,x为1,2,3)。LED1、LED2和LED3 三个灯分别由P10、P11和P14控制,而且根据发光二极管的工作原理,对应I/O口为高电平时小灯亮。要想实现按LED1LED2LED3顺序亮,可以通过先点亮LED1,延时一会儿,关闭LED1的同时点亮LED2,延时一会儿,关闭LED2的同时点亮LED3,延时一会儿,关闭LED3,如此循环
5、,这就完成了LED流水灯的设计。图图3-1 LED3-1 LED硬件原理图硬件原理图 按项目二IAR的操作说明建立工程,注意在编程过程中程序中的所有符号必须在英文状态下输入。相关代码如程序清单3.1 所示。程序清单3.1 /*程序开头的注释,初学者必须掌握,跟程序一样重要 Description:流水灯1;蓝牙开发板上的三个小灯实现流水灯的功能 Date:2016.03.03;作者:,修改时间:无 修改说明:无 Description:LED1-P10、LED2-P11、LED3-P14,对应I/O为高小灯亮 Function List:任务二 按键控制流水灯任务描述任务描述 本任务要求利用按
6、键控制流水灯的方向,当按下按键S1时,小灯由LED1LED3方向点亮;当按下按键S2时,小灯改变方向,由LED3LED1方向点亮。时间间隔大约为 0.5 s。知识链接知识链接 根据硬件电路分析,本任务中的按键平时是高电平,按下后是低电平,即按键低电平有效。按键查询比较常用的有三种方式。第一种是最简单的,即直接一个判断语句。如果检测到按键按下,即检测到按键值为0,就执行相关操作。这种方式有个弊端,即若按着按键不松或按的时间稍微长一点,则系统会认为按了好多次。当然在按键的程序中一般都会加入去抖动延时,但这并不能完全解决上述问题。第二种方法是在按键扫描程序中加入一个检测程序,检测到按键松开,然后执行
7、后面的操作。这是大多数的按键扫描程序,在一般场合也比较好用。这个程序比第一种方法好一些。但是,判断按键释放的方法的效率较低,如果用户一直按下此按键,那么程序在此卡住,即使有中断会打断,但中断处理完,还得回来等待释放,并且其他按键也将被屏蔽。第三种方法就是要避免上面两种方法的弊端,在此之前,应了解一个完整的按键在按下的过程中会发生什么。在未按下按键、按下按键中及按键释放过程中,按键输入脚电平变化顺序是高低高。好的按键扫描程序算法不是判断按键是否被按下,而是判断按键电平变化的顺序是否是高低高,其他按键电平变化顺序都是非法的,这也是按键扫描的基本原理。同一个按键长按、短按的判断及组合按键的判断都是同
8、一原理,只是在判断长按、短按时要加入定时器来实现,而组合按键也是通过设定标志量来达到组合按键的要求的。本任务在实施前将给出三种按键的程序。首先给出的是第一种方法,也是最简单、易懂的查询方法。其按键硬件原理图如图3-2 所示。通过原理图可以得出本任务涉及的两个按键S1、S2对应管脚分别为P0_0、P0_1,在定义时需要定义对应的管脚为输入模式。在下面给出的三种方法的按键程序中,按键定义与I/O口定义是相同的,延时程序也可直接调用上一个任务中的。图图3-2 3-2 查询方法一的按键硬件原理图查询方法一的按键硬件原理图 按键查询方法一相关代码如程序清单3.2所示。程序清单3.2#define key
9、_s1 P0_0/KEY1为P0.0口控制#define key_s2 P0_1/KEY2为P0.1口控制 P1DIR=0 xff;/P1口全部设置为输出 P0DIR=0 xfc;/P1口P1_0与P1_1设置为输入,P0SEL默认为0 if(key_s1=0)delay(10);/加入延时去抖动 /加入相关操作,如“LED1=1;”按键查询方法二相关代码如程序清单3.3所示。程序清单3.3 if(key_s1=0)delay(10);/加入延时去抖动 /加入相关操作,如“LED1=1;”if(key_s1=0)while(!key_s1);/松手检测 /加入相关操作,如“LED1=1;”按按
10、键查询方法三相关代码如程序清单3.4所示。程序清单3.4 if(key_s1=1)Key_s1_flag1=1;/检测按键在没有按下时的高电平状态 if(key_s1=0)&(Key_s1_flag1=1)/检测按键在按下时电平由高变低的情况 delay(10);/加入延时去抖动 Key_s1_flag1=0;Key_s1_flag2=1;任务实施任务实施 本任务要求,当按下按键S1时,小灯由LED1LED3方向点亮,当按下按键S2时,小灯改变方向,由LED3LED1方向点亮,时间间隔大约为0.5 s。其相关代码如程序清单3.5所示。程序清单3.5#include/调入头文件#define u
11、char unsigned char#define led1 P1_0#define led2 P1_1#define led3 P1_4任务一 定时器查询方式实现流水灯的设计任务描述任务描述 本任务要求利用CC2540定时器实现时间间隔,对LED1、LED2和LED3三个小灯实现流水灯功能,时间间隔为1 s。知识链接知识链接 在上一模块的任务中,时间间隔都是采用delay延时程序实现的,这种延时在调试中使用很多,但要想把延时时间准确一点儿,需要测试计算,即使测试过的延时也不一定准确,因为在运行过程中可能会有中断或受其他干扰影响,很难做到时间的准确定位。在程序运行过程中,有时需要精确地清楚每个
12、模块运行的时间,有时需要清楚主程序运行一个周期的时间,所以对各函数的调用和延时方面提出了严格的要求,如精准测量及后面项目中用到的PWM波的调制等。知识链接知识链接 本任务将利用定时器T1(16位)实现LED流水灯的设计。用定时器控制流水灯的时间间隔,间隔1 s轮流点亮各盏灯。定时器的本质是单片机内部的一个时钟,来自系统主时钟的分频,这个时钟会自动计数,当计数器溢出时会产生一个中断请求并置位溢出标志位。使用定时器T1需要配置T1CTL、T1STAT和IRCON三个寄存器。任务实施任务实施 本任务要求利用定时器查询方式实现1 s间隔,并用蓝牙开发板上三个小灯实现流水灯的功能。其相关代码如程序清单3
13、.6所示。程序清单3.6 /*Description:流水灯1;利用定时器T1对蓝牙开发板上的三个小灯实现流水灯的功能 Date:2016.03.05;作者:,修改时间:无,修改说明:无 Description:任务二 定时器中断方式实现小灯闪烁任务描述任务描述 本任务要求利用定时器T1中断实现精确定时,并在定时器中断服务函数中实现计数,要求每秒钟LED1变化一次,60 s后LED2亮。知识链接知识链接 定时器配置好后,启动定时器就开始自动计数,若溢出则会产生一个中断。在中断允许的情况下,若中断标志被置1,则会发出中断请求,进入相应中断程序,因为中断要求相应速度快,所以要在中断处理程序中尽量减
14、少比较烦琐的操作,比较好的方法是设定对应标志量,在外面对标志量进行检测,如果标志量置位,就说明已经发生了中断,可以执行相关的操作,这样不影响中断相应的速度。当中断发生时,无论该中断使能或禁止,CPU 都会在中断标志寄存器中设置中断标志位。如果当设置中断标志时中断使能,那么在下一个指令周期由硬件强行产生一个LCALL 到对应的向量地址,运行中断服务程序。每个中断都有自己对应的SFR寄存器中的中断请求标志,相应的标志位请求的每个中断可以分别使能或禁止。中断标志要用软件清除,涉及IEN0(0 xA8)和IEN1(0 xB8)两个寄存器。寄存器IEN0的详细说明如表3-6所示。任务实施任务实施 本任务
15、要求利用定时器T1实现定时,并在定时器中断函数中实现计数,要求每秒钟LED1变化一次,60 s后LED2亮。其相关代码如程序清单3.7所示。程序清单3.7#include#define led1 P1_0#define led2 P1_1 unsigned char T1num;/记录进入定时器T1中断的次数 /*I/O初始化*任务一 UART串口发送功能驱动的实现任务描述任务描述 本任务要求利用CC2540串口通信功能向串口调试助手发送指定字符串“”,并在串口调试助手上显示。知识链接知识链接 UART是通用异步收发器(异步串行通信口)的英文缩写,包括了RS232、RS499、RS423、RS
展开阅读全文