1、(最新整理)CC2530简介2021/7/261CC2530CC2530简介简介2021/7/2622CC2530芯片nCC2530CC2530是基于2.4GHz IEEE802.15.42.4GHz IEEE802.15.4、ZigBeeZigBee和RF4CERF4CE上的一个片上系统解决方案。其特点是以极低的总材料成本建立较为强大的网络节点。nCC2530 CC2530 芯片结合了RF RF 收发器,增强型8051 CPU8051 CPU,系统内可编程闪存,8KB SRAM 8KB SRAM 和许多其他模块的强大的功能。nCC2530 CC2530 主要有四种不同的闪存版本:CC2530
2、F32/64/128/256CC2530F32/64/128/256(32/64/128/256KB32/64/128/256KB闪存)n其具有多种运行模式,使得它能满足超低功耗系统的要求。同时CC2530CC2530运行模式之间的转换时间很短,使其进一步降低能源消耗。2021/7/2633CC2530片内结构方框图片内结构方框图数字模拟混合输入/输出控制器XOSC_Q2 RESET_N XSOC_Q1 P2_4 P2_3 P2_2 P2_1 P2_0 P1_4 P1_3 P1_2 P1_1 P1_0 RF_PP1_7 P1_6 P1_5 P1_4 P1_3 P1_2 P1_1 P1_0 P1
3、_7 P1_6 P1_5 复位看门狗片上稳压器32MHz晶振高速RC-OSC上电/复位/掉电32.768KHz晶振32.768KHzRC-OSC睡眠定时器调试接口多路时钟校准睡眠模式控制器DMA8051CPU内核存储器仲 裁32/64/128/256KB FLASH8KB SRAMADC音频/直流8通道AES加密和解密IRQ控制FLASH写射频寄存器CSMA/CA选通处理器USART1USART2射步数据接口定时器1(16位)定时器2IEEE 802.15.4 MAC定时器定时器3(8位)定时器4(8位)调制器解调器自动增益控制频率合成器接收链RF_N先进选出和帧控制发送链VDD(2.03.6
4、V)DCOUPL2021/7/2644CC2530引脚描述(1)2021/7/2655CC2530引脚描述引脚描述(2)2021/7/2666CC2530CC2530封装封装2021/7/2677CC2530CC2530需要极少的外部连接元件,同时有很多典型需要极少的外部连接元件,同时有很多典型电路,其模块大致可以分为三类:电路,其模块大致可以分为三类:1 1、CPUCPU和内存相关模块和内存相关模块 2 2、外设,时钟和电源管理相关模块、外设,时钟和电源管理相关模块 3 3、无线信号收发相关模块、无线信号收发相关模块CC2530CC2530芯片内部结构芯片内部结构2021/7/2688n强大
5、的强大的5 5通道通道DMADMAnIEEE 802.15.4 MACIEEE 802.15.4 MAC定时器,通用定时器(一个定时器,通用定时器(一个1616位定时器,一个位定时器,一个8 8位定时器)位定时器)nIRIR发生电路(发生电路(IR IR 中断)中断)n具有捕获功能的具有捕获功能的32-kHz32-kHz睡眠定时器睡眠定时器n硬件支持硬件支持CSMA/CA(CSMA/CA(载波侦听多路访问冲突避免载波侦听多路访问冲突避免)n支持精确的数字化支持精确的数字化RSSI/LQI(RSSI/LQI(链路质量指示链路质量指示 )n电池监视器和温度传感器电池监视器和温度传感器n2121个通
6、用个通用I/OI/O引脚引脚n看门狗定时看门狗定时CC2530CC2530的的外设外设(1)(1)2021/7/2699n两个两个8位定时器:定时器位定时器:定时器3,4为为8位定时器,有一个可编程位定时器,有一个可编程分分频频器,一个器,一个8位的周期值,一个计数器通道。位的周期值,一个计数器通道。nMAC定时器:专为定时器:专为MAC或其他协议而设的定时器,可以跟踪或其他协议而设的定时器,可以跟踪已过周期,同时可以记录收发某一的帧精确时间和传输结束时已过周期,同时可以记录收发某一的帧精确时间和传输结束时间,以便产生不同的选通命令到无线模块间,以便产生不同的选通命令到无线模块nADC:支持:
7、支持7到到12位的分辨率,带宽范围为位的分辨率,带宽范围为7-30kHz,在在DC与与音频转换时,能够使用音频转换时,能够使用8个输入通道。个输入通道。nAES加密加密/解密内核:解密内核:CC2530用用128位的位的AES算法进行加密或算法进行加密或解密数据,从而保证了解密数据,从而保证了ZigBee网络层和应用层的安全要求。网络层和应用层的安全要求。nUSART0和和USART1分别被配置为一个主从或一个分别被配置为一个主从或一个UART,其,其功能是为功能是为RX和和TX提供双缓冲,以及硬件流控制。提供双缓冲,以及硬件流控制。n调试接口:用于内部电路调试,具有两线串形接口调试接口:用于
8、内部电路调试,具有两线串形接口nI/O控制器:负责所有的通用的控制器:负责所有的通用的I/O引脚引脚CC2530的的外设外设(2)2021/7/261010 CC2530具备一个IEEE802.15.4兼容无线收发器,其中的RF内核控制模拟无线模块,另外它还提供了一个连接外部设备的端口,从而可以发出命令和读取状态,操纵各执行电路的事件顺序。同时无线设备还包括数据包过虑模块和地址识别模块。无线设备无线设备2021/7/261111CC2530最小系统2021/7/261212CC2530的典型应用的典型应用2021/7/261313n输入输出匹配:当使用单极子的一个不平衡天线,需要用一个巴伦输入
9、输出匹配:当使用单极子的一个不平衡天线,需要用一个巴伦(平衡平衡非平衡转换器非平衡转换器)来对性能进行优化,可以采用低成本分立电感或电容来实来对性能进行优化,可以采用低成本分立电感或电容来实现,这里主要运用现,这里主要运用C262,L261,C252,L252.如果使用了诸如折叠偶极子这如果使用了诸如折叠偶极子这样的平衡天线,巴伦可以忽略。样的平衡天线,巴伦可以忽略。n1.8V片上稳压器:用以提供片上稳压器:用以提供1.8V的数字逻辑电压,采用这一个稳压器要的数字逻辑电压,采用这一个稳压器要求用一个去耦电容求用一个去耦电容C401来获得稳定运行效果。来获得稳定运行效果。n电源去耦和过滤电源去耦
10、和过滤n必须使用合适的电源去耦以获得最佳的性能。在一个应用中去耦电容和必须使用合适的电源去耦以获得最佳的性能。在一个应用中去耦电容和电源过滤的位置和尺寸对获得最佳性能是非常重要的。电源过滤的位置和尺寸对获得最佳性能是非常重要的。TI 提供了一个紧提供了一个紧凑的参考设计,应该很好地遵循。凑的参考设计,应该很好地遵循。n晶振晶振 32MHz 晶振使用了一个外部晶振使用了一个外部32-MHz 振荡器振荡器XTAL1 和两个负载电和两个负载电容(容(C221 和和C231)。)。n晶振晶振 XTAL2 是一个可选的是一个可选的32.768 kHz 晶振,有两个负载电容(晶振,有两个负载电容(C321
11、 和和C331)用于)用于32.768-kHz晶振。晶振。32.768 kHz 晶振用于要求非常低的睡眠晶振用于要求非常低的睡眠电流消耗和精确唤醒时间的应用。电流消耗和精确唤醒时间的应用。元件说明元件说明2021/7/261414CC2530模块模块传感器板传感器板NoImage2021/7/261515步进电机结点步进电机结点NoImage2021/7/261616CC Debug仿真器2021/7/261717CC2530CC2530的的CPUCPU2021/7/261818CC2530CC2530的的CPUCPU2021/7/261919CC2530的存储器CC2530里的四种存储空间:
12、里的四种存储空间:CODE程序存储器:用处存放程序代码和一些常量,寻址范程序存储器:用处存放程序代码和一些常量,寻址范围围 0000HFFFFH 共共64KB。DATA:内部数据存储空间,可以直接或间接被一个单周期:内部数据存储空间,可以直接或间接被一个单周期CPU指令访问。这一存储空间是指令访问。这一存储空间是256B。其中较低的。其中较低的128B可可以直接或间接寻址,较高的以直接或间接寻址,较高的128B只能间接寻址。只能间接寻址。XDATA:外部数据存储空间,通常需要:外部数据存储空间,通常需要4-5个个CPU指令周期指令周期来访问。这一存储空间是来访问。这一存储空间是64KB。访问。
13、访问XDATA 存储器慢于访存储器慢于访问问DATA,因为,因为CODE 和和XDATA 存储空间共享存储空间共享CPU 内核上内核上的一个通用总线。的一个通用总线。SFR:寄存器存储空间,可以直接被一个:寄存器存储空间,可以直接被一个CPU指令访问。这指令访问。这一存储空间含有一存储空间含有128字节。对于地址是被字节。对于地址是被8 整除的整除的SFR 寄存寄存器,每一位还可以单独寻址。器,每一位还可以单独寻址。2021/7/262020CC2530的XDATA存储器映射l 为使为使DMA 访问全部物理存储空访问全部物理存储空间,并由此使得间,并由此使得DMA 在不同在不同8051存储空间
14、之间进行传输,存储空间之间进行传输,CODE和和SFR部分存储空间映射部分存储空间映射到到XDATA存储空间。存储空间。l XDATA较高的较高的32KB是一个只读是一个只读区域区域(XBANK),任何可用的任何可用的32KB闪存区均可以映射到这里。闪存区均可以映射到这里。l 这使得软件可以访这使得软件可以访问整个闪存存储器。问整个闪存存储器。这一区域主要用作这一区域主要用作存储另外的常量数存储另外的常量数据。据。2021/7/262121CC2530CC2530的的CODECODE存储器映射机制一存储器映射机制一 机制一是标准的机制一是标准的8051映射,只有程序存储器(即闪存)映映射,只有
15、程序存储器(即闪存)映射到射到CODE 存储空间存储空间,这是复位后默认映射方式。这是复位后默认映射方式。RootBankFMAP.MAP2:0确定过来的确定过来的Bank2021/7/262222CC2530CC2530的的CODECODE存储器映射机制二存储器映射机制二2021/7/262323CPU 存储空间l SRAM 映射到的地址范围是映射到的地址范围是0 x0000 到到(SRAM_SIZE 1)。l XREG 区域映射到区域映射到1KB 地址区域地址区域(0 x60000 x63FF)。这些寄存。这些寄存器是另外的寄存器,有效地扩展器是另外的寄存器,有效地扩展SFR 寄存器寄存器
16、l 空间。一些外设寄存器和大多数无线电控制和数据寄存器映射到空间。一些外设寄存器和大多数无线电控制和数据寄存器映射到这里。这里。l SFR 寄存器映射到地址区域寄存器映射到地址区域(0 x70800 x70FF)。l 闪存信息页面(闪存信息页面(2 KB)映射到地址区域)映射到地址区域(0 x78000 x7FFF)。这。这是一个只读区域,包含有关设备的各种信息。是一个只读区域,包含有关设备的各种信息。l XDATA 存储空间存储空间(0 x80000 xFFFF)的较高的较高32KB 是一个只读的是一个只读的闪存代码区(闪存代码区(XBANK),可以使用),可以使用l MEMCTR.XBAN
17、K2:0位映射到任何一个可用的闪存区。位映射到任何一个可用的闪存区。l 闪存存储器闪存存储器SRAM 和寄存器到和寄存器到XDATA 的映射允许的映射允许DMA 控制器控制器和和CPU 访问在一个统一的地址空间内的所有物理存储器。访问在一个统一的地址空间内的所有物理存储器。l 写入存储映射中未执行的区域(图中的阴影部分)没有影响。从写入存储映射中未执行的区域(图中的阴影部分)没有影响。从为执行的区域读出返回为执行的区域读出返回0 x00。写只读区域比如闪存区域将被忽。写只读区域比如闪存区域将被忽略。略。2021/7/262424物理存储器物理存储器l 闪存存储器:片上闪存存储器主要是为了保存程
18、序代码和常量数据。闪闪存存储器:片上闪存存储器主要是为了保存程序代码和常量数据。闪存存储器有以下功能:存存储器有以下功能:l 页面大小:页面大小:2 KBl 闪存页面擦除时间:闪存页面擦除时间:20msl 闪存芯片(批量)擦除时间:闪存芯片(批量)擦除时间:20msl 闪存写时间(闪存写时间(4 字节):字节):20sl 数据保留(室温下):数据保留(室温下):100 年年l 编程编程/擦除次数:擦除次数:20,000 次次l 信息页面是一个信息页面是一个2 KB 的只读区域,存储设备信息。其他信息中它包括的只读区域,存储设备信息。其他信息中它包括来自来自TI 地址范围的一个唯一的地址范围的一
19、个唯一的IEEE地址。它以最低位优先的形式存储在地址。它以最低位优先的形式存储在XDATA 地址地址0 x780C。将出版一个单独的设计说明,详细介绍信息页面。将出版一个单独的设计说明,详细介绍信息页面的内容。的内容。l SFR寄存器:特殊功能寄存器(寄存器:特殊功能寄存器(SFR)控制)控制8051CPU内核和内核和/或外设的或外设的一些功能。许多一些功能。许多8051CPU内核的内核的SFR和标准的和标准的8051SFR 相同。但是有相同。但是有一些控制功能的另外的一些控制功能的另外的SFR,是标准,是标准8051 中所没有的。另外的中所没有的。另外的SFR 用用于和外设单元以及于和外设单
20、元以及RF 收发器接口。收发器接口。2021/7/262525与端口有关的寄存器与端口有关的寄存器寄存器名称寄存器名称地址地址描描 述述端端口口P00 x80端口端口0。可从。可从XDATA(0 x7080)只读。)只读。P10 x90端口端口1。可从。可从XDATA(0 x7090)只读。)只读。P20 xA0端口端口2。可从。可从XDATA(0 x70A0)只读。)只读。寄存器名称寄存器名称地址地址描描 述述端端口口控控制制寄寄存存器器P0SEL0 xF3端口端口0功能选择(功能选择(0-通用通用I/O,1-外围功能)外围功能)P1SEL0 xF4端口端口1功能选择(功能选择(0-通用通用
21、I/O,1-外围功能)外围功能)P2SEL0 xF5端口端口2功能选择(功能选择(0-通用通用I/O,1-外围功能)外围功能)P0INP0 x8F端口端口0 输入模式(输入模式(0-三态,三态,1-上拉)上拉)P1INP0 xF6端口端口1输入模式(输入模式(0-三态,三态,1-上拉)上拉)P2INP0 xF7端口端口2输入模式(输入模式(0-三态,三态,1-上拉)上拉)P0DIR0 xFD端口端口0方向选择(方向选择(0-输入,输入,1-输出)输出)P1DIR0 xFE端口端口1方向选择(方向选择(0-输入,输入,1-输出)输出)P2DIR0 xFF端口端口2方向选择(方向选择(0-输入,输
22、入,1-输出)输出)2021/7/262626以下代码使以下代码使P1_0引脚电平每隔一定时间反向一次:引脚电平每隔一定时间反向一次:#include#define BLED P1_0 /定义定义LED为为P1_0口控制口控制void main()unsigned int d;P1SEL&=0 x01;/选择选择P1_0为通用为通用I/O引脚引脚 P1DIR|=0 x01;/I/O方向选择为输出方向选择为输出 while(1)for(d=0;d30000;d+);/延时延时 BLED=BLED;/电平反向,电平反向,LED闪烁闪烁 2021/7/262727将将P1_2设为三态输入,读取按键状
23、态设为三态输入,读取按键状态#define key P0_1 P0SEL&=0X02;/P0_1作为通用作为通用I/O口口P0DIR&=0X02;/P0_1输入输入P0INP|=0 x02;/P0_1上拉上拉uchar key_scan(void)if(key=0)/低电平有效低电平有效 delay(100);/延时消抖动延时消抖动 if(key=0)/处理按键事件处理按键事件 while(!key);/直到松开按键直到松开按键 2021/7/262828定时器定时器T1(1)l 16 位递增或递减计数器位递增或递减计数器l 由由CLKCON.TICKSPD定义活动时钟边沿周期,它设置从定义活
24、动时钟边沿周期,它设置从0.25MHz到到32MHz的不同的时钟标签频率(可以使用的不同的时钟标签频率(可以使用32 MHz XOSC 作为时钟源)。作为时钟源)。l 由由T1CTL.DIV设置分频器值可以从设置分频器值可以从1、8、32 或或128。因此当因此当32 MHz 晶振用作系统时钟源时,定时器晶振用作系统时钟源时,定时器1 可以使用的最低时可以使用的最低时钟频率是钟频率是1953.125Hz,最高是,最高是32 MHz。2021/7/262929l 可以通过两个可以通过两个8 位的位的SFR读取读取16位的计数器值:位的计数器值:T1CNTH 和和T1CNTL,分别包含在高位字节和
25、低位字节中。当读取,分别包含在高位字节和低位字节中。当读取T1CNTL 时,计数器的高位字节在那时被缓冲到时,计数器的高位字节在那时被缓冲到T1CNTH,以便高位字节可以从以便高位字节可以从T1CNTH 中读出。因此中读出。因此T1CNTL 必必须总是在读取须总是在读取T1CNTH 之前首先读取。之前首先读取。l 对对T1CNTL 寄存器的所有写入访问将复位寄存器的所有写入访问将复位16 位计数器。位计数器。l 当达到最终计数值(溢出)时,计数器产生一个中断请求。当达到最终计数值(溢出)时,计数器产生一个中断请求。可以用可以用T1CTL 控制寄存器设置启动并停止该计数器。当控制寄存器设置启动并
26、停止该计数器。当一个不是一个不是00 值的写入到值的写入到T1CTL.MODE 时,计数器开始运时,计数器开始运行。如果行。如果00 写入到写入到T1CTL.MODE,计数器停止在它现在,计数器停止在它现在的值上。的值上。l 一般来说控制寄存器一般来说控制寄存器T1CTL 用于控制定时器操作。状态用于控制定时器操作。状态寄存器寄存器T1STAT 保存中断标志。保存中断标志。定时器定时器T1(2)2021/7/263030与定时器与定时器1有关的寄存器有关的寄存器寄存器名称寄存器名称地址地址描描 述述T1CC0L0 xDA通道通道0捕获捕获/比较值低字节比较值低字节T1CC0H0 xDB通道通道
27、0捕获捕获/比较值高字节比较值高字节T1CC1L0 xDC通道通道1捕获捕获/比较值低字节比较值低字节T1CC1H0 xDD通道通道1捕获捕获/比较值高字节比较值高字节T1CC2L0 xDE通道通道2捕获捕获/比较值低字节比较值低字节T1CC2H0 xDF通道通道2捕获捕获/比较值高字节比较值高字节T1CNTL0 xE2计数器低字节计数器低字节T1CNTH0 xE3计数器高字节计数器高字节T1CTL0 xE4控制控制T1CCTL00 xE5通道通道0捕获捕获/比较控制比较控制T1CCTL10 xE6通道通道1捕获捕获/比较控制比较控制T1CCTL20 xE7通道通道2捕获捕获/比较控制比较控制
28、T1STAT0 xAF状态状态常用常用2021/7/263131T1CTL 定时器定时器1 的控制和状态的控制和状态位位名称名称复位复位R/W描描 述述7:4-0000RO保留保留3:2DIV1:000R/W 分频器划分值。产生主动的时钟边缘用来更分频器划分值。产生主动的时钟边缘用来更新计数器,如下:新计数器,如下:00:标记频率:标记频率/101:标记频率:标记频率/810:标记频率:标记频率/3211:标记频率:标记频率/1281:0MODEMODE1:000R/W 选择定时器选择定时器1模式。定时器操作模式通过下列模式。定时器操作模式通过下列方式选择:方式选择:00:暂停运行。:暂停运行
29、。01:自由运行,从:自由运行,从0 x0000到到0 xFFFF反复计数反复计数10:从:从0 x0000到到T1CC0反复计数。反复计数。11:正计数:正计数/倒计数,从倒计数,从0 x0000到到T1CC0反复反复 计数并且从计数并且从T1CC0倒计数到倒计数到0 x00002021/7/263232T1STAT定时器定时器1状态寄存器状态寄存器位位名称名称复位复位R/W描描 述述7:6-0R0保留保留5OVFIF0R/W0定时器定时器1计数器溢出中断标志。当计数器在计数器溢出中断标志。当计数器在自由运行或模模式下达到最终计数值时设置,自由运行或模模式下达到最终计数值时设置,当在正当在正
30、/倒计数模式下达到零时倒计数。写倒计数模式下达到零时倒计数。写1没有影响。没有影响。4CH4IF0R/W0定时器定时器1通道通道4中断标志。当通道中断标志。当通道4中断条件中断条件发生时设置。写发生时设置。写1没有影响。没有影响。3CH3IF0R/W0定时器定时器1通道通道3中断标志。当通道中断标志。当通道3中断条件中断条件发生时设置。写发生时设置。写1没有影响。没有影响。2CH2IF0R/W0定时器定时器1通道通道2中断标志。当通道中断标志。当通道2中断条件中断条件发生时设置。写发生时设置。写1没有影响。没有影响。1CH1IF0R/W0定时器定时器1通道通道1中断标志。当通道中断标志。当通道
31、1中断条件中断条件发生时设置。写发生时设置。写1没有影响。没有影响。0CH0IF0R/W0定时器定时器0通道通道0中断标志。当通道中断标志。当通道0中断条件中断条件发生时设置。写发生时设置。写1没有影响。没有影响。2021/7/263333利用定时器中断实现指示灯的闪烁利用定时器中断实现指示灯的闪烁#include#define uint unsigned int#define uchar unsigned char#define RLED P1_0/定义定义LED1为为P10口控制口控制#define YLED P1_1/定义定义LED2为为P11口控制口控制uint counter=0;/
32、统计溢出次数统计溢出次数uint LEDFlag;/标志是否要闪烁标志是否要闪烁void InitialT1test(void)/T1初始化程序初始化程序P1DIR=0 x03;/初始化初始化LED控制端口控制端口P1,P10 P11为输出为输出RLED=0;YLED=0;T1CTL=0 x05;/初始化计数器初始化计数器1 T1STAT=0 x21;/通道通道0,中断有效中断有效,8分频分频 /自动重装模式自动重装模式(0 x0000-0 xffff)2021/7/263434利用定时器中断实现指示灯的闪烁利用定时器中断实现指示灯的闪烁void main()/主函数主函数InitialT1t
33、est();/调用初始化函数调用初始化函数 while(1)/查询溢出查询溢出 if(IRCON 0)/中断标志寄存器,其中中断标志寄存器,其中bit1为为T1IF IRCON=0;/清溢出标志清溢出标志 counter+;if(counter=15)/中断计数,约中断计数,约0.25s counter =0;LEDFlag=!LEDFlag;if(LEDFlag)YLED=RLED;RLED=!RLED;/每每 1s LED灯闪烁一下灯闪烁一下 LEDFlag=!LEDFlag;/闪烁标志变量置闪烁标志变量置0 2021/7/263535串口串口0使用(初始化)使用(初始化)void ini
34、tUARTSEND(void)CLKCONCMD&=0 x40;/设置系统时钟源为设置系统时钟源为32MHZ晶振晶振 while(CLKCONSTA&0 x40);/等待晶振稳定等待晶振稳定 CLKCONCMD&=0 x47;/设置系统主时钟频率为设置系统主时钟频率为32MHZ PERCFG=0 x00;/位置位置1 P0口口 P0SEL=0 x3c;/P0_2,P0_3,P0_4,P0_5用作串口用作串口 P2DIR&=0XC0;/P0优先作为优先作为UART0 U0CSR|=0 x80;/UART方式方式 U0GCR|=9;U0BAUD|=59;/波特率设为波特率设为19200 UTX0I
35、F=0;/UART0 TX中断标志初始置位中断标志初始置位0函数功能:函数功能:将系统时钟设为高速晶振,将将系统时钟设为高速晶振,将 P0口设置为串口设置为串 口口0功能引功能引脚,串口脚,串口0使用使用UART模式,波特率设为模式,波特率设为19200,允许接收。,允许接收。该函数在使用串口之前调用。该函数在使用串口之前调用。CLKCONCMDCLKCONSTAPERCFGU0CSRU0GCRU0BAUDUTX0IF2021/7/263636串口串口0使用(发送字符串)使用(发送字符串)void UartTX_Send_String(char*Data,int len)int j;for(j
36、=0;jlen;j+)U0DBUF=*Data+;while(UTX0IF=0);UTX0IF=0;函数功能:串口发送数据,函数功能:串口发送数据,*data 为发送缓冲的指针,为发送缓冲的指针,len 为发送数据的长度为发送数据的长度 该函数在初始化串口后才可以正常调用。该函数在初始化串口后才可以正常调用。2021/7/263737#include#include#define RLED P1_0 /定义控制灯的端口定义控制灯的端口#define GLED P1_1char Txdata25=XWWK Test Data!;void main(void)uchar i;P1DIR=0 x03
37、;/P1_0,P1_1输出,控制输出,控制LED RLED=1;/RLED灭灭 GLED=0;/GLED亮亮 initUARTSEND();UartTX_Send_String(Txdata,25);for(i=0;i30;i+)Txdatai=;strcpy(Txdata,HELLO);/将将UART0 TX test赋给赋给Txdata;while(1)UartTX_Send_String(Txdata,sizeof(HELLO);/串口发送数据串口发送数据 Delay(50000);/延时延时 GLED=!GLED;/GLED闪烁闪烁 Delay(50000);Delay(50000);
38、串口串口0使用(主函数)使用(主函数)2021/7/263838通过内置温度传感器实现温度采集通过内置温度传感器实现温度采集(初始化初始化)/*温度传感器初始化函数温度传感器初始化函数*/void initTempSensor(void)DISABLE_ALL_INTERRUPTS();/关闭所有中断关闭所有中断 InitClock();/设置系统主时钟为设置系统主时钟为32M *(BYTE _xdata*)0 x624B)=0 x01;/开启温度传感器开启温度传感器 *(BYTE _xdata*)0 x61BD)=0 x01;/将温度传感器与将温度传感器与 /ADC连接起来连接起来void
39、InitClock(void)CLKCONCMD=0 x28;/设定计数器时钟为设定计数器时钟为1M Hz,系统时钟为系统时钟为32 MHz while(CLKCONSTA&0 x40);/等晶振稳定等晶振稳定#define DISABLE_ALL_INTERRUPTS()(IEN0=IEN1=IEN2=0 x00)2021/7/263939INT8 getTemperature(void)UINT8 i;UINT16 AdcValue;UINT16 value;AdcValue=0;for(i=0;i 2;/ADCL寄存器低寄存器低2位无效位无效 value|=(UINT16)ADCH)2;
40、/累加除以累加除以4,得到平均值,得到平均值 return ADC14_TO_CELSIUS(value);/根据根据AD值,计算出实际的温度值,计算出实际的温度通过内置温度传感器实现温度采集通过内置温度传感器实现温度采集(读读AD值值)#define ADC_SINGLE_CONVERSION(settings)do ADCCON3=(settings);while(0)#define ADC_SAMPLE_SINGLE()do ADC_STOP();ADCCON1|=0 x40;while(0)0 0 H H H H H HADCHL L L L L L X XADCL0 0 0 0 H
41、H H H0 0 L L L L L LH H 0 0 0 0 0 00 0 0 0 H H H H H H L L L L L L#define ADC14_TO_CELSIUS(ADC_VALUE)(ADC_VALUE)4)-335)#define ADC_SAMPLE_READY()(ADCCON1&0 x80)2021/7/264040void main(void)char i;char TempValue10;InitUART0();/初始化串口初始化串口initTempSensor();/初始化初始化ADC while(1)AvgTemp=0;for(i=0;i=1;/每次累加后除
42、每次累加后除2.sprintf(TempValue,(char*)%dC,(INT8)AvgTemp);UartTX_Send_String(TempValue,4);Delay(50000);通过内置温度传感器实现温度采集通过内置温度传感器实现温度采集(主函数主函数)2021/7/264141CC2530 Basic RF(简单无线点对点传输协议)(简单无线点对点传输协议)l Basic RF 由由TI 公司提供,它包含了公司提供,它包含了IEEE 802.15.4 标准的数标准的数据包的收发。这个协议只是用来演示无线设备是如何进行数据包的收发。这个协议只是用来演示无线设备是如何进行数据传输
43、的,不包含完整功能的协议。但是它采用了与据传输的,不包含完整功能的协议。但是它采用了与802.15.4 MAC兼容的数据包结构及兼容的数据包结构及ACK 包结构,其功能限包结构,其功能限制如下:制如下:u不提供不提供“多跳多跳”、“设备扫描设备扫描”及及Beacon(信标(信标)。)。u不提供不同种的网络设备,如协调器、路由器等,所有节不提供不同种的网络设备,如协调器、路由器等,所有节点同级,只实现点对点传输。点同级,只实现点对点传输。u传输时会等待信道空闲,但不按传输时会等待信道空闲,但不按802.15.4 CSMA-CA 要求要求进行两次进行两次CCA 检测。检测。u不重传数据不重传数据。
44、l 简言之,简言之,Basic RF 不适合直接用于产品的开发,但可用来进不适合直接用于产品的开发,但可用来进行无线设备数据传输的入门学习。行无线设备数据传输的入门学习。2021/7/264242Basic RF 工作原理(工作原理(2)l 启动启动u创建一个创建一个basicRfCfg_t 的数据结构,并初始化其中的的数据结构,并初始化其中的成员。成员。u调用调用basicRfInit()函数进行协议的初始化。函数进行协议的初始化。l 数据发送数据发送u1.创建一个创建一个buffer,把,把payload放入其中。放入其中。u2.调用调用basicRfSendPacket()函数发送。函数
45、发送。l 数据接收数据接收u上层通过上层通过basicRfPacketIsReady()函数来检查是否收函数来检查是否收到一个新的数据包,调用到一个新的数据包,调用basicRfReceive()函数,把函数,把收到的数据复制到收到的数据复制到buffer 中。中。2021/7/264343基于基于Basic RF的无线灯光控制实验的无线灯光控制实验l程序功能程序功能u是一个基本的点对点通信实验,实现了一个节是一个基本的点对点通信实验,实现了一个节点板上的开关控制另一个节点板上的点板上的开关控制另一个节点板上的LED的功的功能。能。u每一个节点是用来做开关还是用来做灯的控制每一个节点是用来做开
46、关还是用来做灯的控制器,可以通过源程序的不同定义进行选择。器,可以通过源程序的不同定义进行选择。u可作为一个无线通信的入门级程序。可作为一个无线通信的入门级程序。lTI例程工程名:例程工程名:cc2530_sw_examples.eww2021/7/264444baseRF通信基本流程通信基本流程1.初始化网络地址,打开接收机。初始化网络地址,打开接收机。2.初始化初始化basicRfConfig,确定网络,确定网络ID、信道。、信道。3.初始化外围设备,如时钟、各个初始化外围设备,如时钟、各个I/O口等。口等。4.事件的处理,如发送报文或接受报文后的数据处事件的处理,如发送报文或接受报文后的
47、数据处理等。理等。2021/7/264545初始化网络初始化网络(1)void main(void)/射频配置射频配置 basicRfConfig.panId=PAN_ID;basicRfConfig.channel=RF_CHANNEL;basicRfConfig.ackRequest=TRUE;/要求接受方应答要求接受方应答/IO初始化初始化 halBoardInit();/初始化指示灯和按钮初始化指示灯和按钮 initUART0();/初始化串口初始化串口/RF初始化初始化 if(halRfInit()=FAILED)HAL_ASSERT(FALSE);2021/7/264646初始化网
48、络初始化网络(2)uint8 halRfInit(void)/上电设置默认参数上电设置默认参数 FRMCTRL0|=(AUTO_ACK|AUTO_CRC);/推荐的推荐的RX设置设置 TXFILTCFG=0 x09;/TX过滤器配置寄存器过滤器配置寄存器 AGCCTRL1=0 x15;/AGC控制寄存器控制寄存器 FSCAL1=0 x00;/调整频率校准调整频率校准 halRfEnableRxInterrupt();/使能使能RX中断中断 return SUCCESS;void halRfEnableRxInterrupt(void)/enable RXPKTDONE interrupt RF
49、IRQM0|=1 0)if(pRxData0=LIGHT_TOGGLE_CMD)UartTX_Send_String(UartData,17);/向串口发送测试数据向串口发送测试数据 halLedToggle(LED_RED);/改变状态改变状态 Wait(3);halLedToggle(LED_RED);/改变状态改变状态 接收函数(点亮接收函数(点亮LED)2021/7/265050发送数据包函数(发送数据包函数(1)uint8 basicRfSendPacket(uint16 destAddr,uint8*pPayload,uint8 length)uint8 mpduLength;ui
50、nt8 status;if(!txState.receiveOn)/如果没有打开接收机如果没有打开接收机 halRfReceiveOn();length=min(length,BASIC_RF_MAX_PAYLOAD_SIZE);/包长度包长度 halRfWaitTransceiverReady();/等到收发空闲等到收发空闲 halRfDisableRxInterrupt();/关闭接收帧完成中断避免对关闭接收帧完成中断避免对SPI接口的干扰接口的干扰 mpduLength=basicRfBuildMpdu(destAddr,pPayload,length);halRfWriteTxBuf(