一、任务要求

编写程序实现实验板定期向PC机串口发送字符串“Hello ! I am CC2530 。\n”。实验板开机后按照设定的时间间隔,不断地向PC及发送字符串,报告自己的状态,每发送一次字符串消息,LED1闪亮一次。具体工作方式如下:

① 通电后LED1熄灭。
② 设置USART 0使用位置。
③ 设置UART工作方式和波特率。
④ LED1点亮。
⑤ 发送字符串“Hello ! I am CC2530。\n”。
⑥ LED1熄灭。
⑦ 延时一段时间,延时时间可以设置为3秒。
⑧ 返回步骤④循环执行。

串口通信介绍

数据通信时,根据CPU与外设之间的连线结构和数据传送方式的不同,可以将通信方式分为两种:并行通信和串行通信。
并行通信是指数据的各位同时发送或接收,每个数据位使用单独的一条导线,有多少位数据需要传送就需要有多少条数据线。并行通信的特点是各位数据同时传送,传送速度快效率高,并行数据传送需要较多的数据线,因此传送成本高,干扰大,可靠性较差,一般适用于短距离数据通信,多用于计算机内部的数据传送方式。

串行通信是指数据一位接一位顺序发送或接收。串行通信的特点是数据按位顺序进行,最少只需一根数据传输线即可完成,传输成本低传送数据速度慢,一般用于较长距离的数据传送。
串行通信又分同步和异步两种方式。

(1)串行同步通信
同步通信中,所有设备使用同一个时钟,以数据块为单位传送数据,每个数据块包括同步字符、数据块和校验字符。同步字符位于数据块的开头,用于确认数据字符的开始;接收时,接收设备连续不断地对传输线采样,并把接收到的字符与双方约定的同步字符进行比较,只有比较成功后才会把后面接收到的字符加以存储
同步通信的优点是数据传输速率高,缺点是要求发送时钟和接收时钟保持严格同步。在数据传送开始时先用同步字符来指示,同时传送时钟信号来实现发送端和接收端同步,即检测到规定的同步字符后,接着就连续按顺序传送数据。这种传送方式对硬件结构要求较高。

(2)串行异步通信
异步通信中,每个设备都有自己的时钟信号,通信中双方的时钟频率保持一致。异步通信以字符为单位进行数据传送,每一个字符均按照固定的格式传送,又被称为帧,即异步串行通信一次传送一个帧。

每一帧数据由起始位(低电平)、数据位、奇偶校验位(可选)、停止位(高电平)组成。帧的格式如图5-1所示:

起始位:发送端通过发送起始位而开始一帧数据的传送。起始位使数据线处于逻辑0,用来表示一帧数据的开始。
 数据位:起始位之后就开始传送数据位。在数据位中,低位在前,高位在后。数据的位数可以是5、6、7或者8。
 奇偶校验位:是可选项,双方根据约定用来对传送数据的正确性进行检查。可选用奇校验、偶校验和无校验位。
 停止位:在奇偶检验位之后,停止位使数据线处于逻辑1,用以标志一个数据帧的结束。停止位逻辑值1的保持时间可以是1、1.5或2位,通信双方根据需要确定。
空闲位:在一帧数据的停止位之后,线路处于空闲状态,可以是很多位,线路上对应的逻辑值是1,表示一帧数据结束,下一帧数据还没有到来。

2.CC2530的串口通信模块

CC2530有两个串行通信接口USART 0和USART 1,它们能够分别运行于异步UART模式或者同步SPI模式。两个USART具有同样的功能,可以设置在单独的I/O引脚,如表5-1所示

根据映射表可知,在UART模式中,使用双线连接方式,UART 0和UART 1对应的外部设置I/O引脚关系分别为:
位置1:RX0----P0_2     TX0----P0_3     P0_5----RX1 TX1----P0_4
位置2:RX0----P1_4     TX0----P1_5     P1_7----RX1 TX1----P1_6
UART模式的操作具有下列特点:
 8位或者9位有效数据
 奇校验、偶校验或者无奇偶校验
 配置起始位和停止位电平配置LSB或者MSB首先传送
 独立收发中断
 独立收发DMA触发
 奇偶校验和数据帧错误状态指示
UART模式提供全双工传送,接收器中的位同步不影响发送功能。传送一个UART字节包含1个起始位、8个数据位、1个作为可选项的第9位数据或者奇偶校验位再加上1个或2个停止位。实际发送的帧包含8位或者9位,但是数据传送只涉及一个字节。

3.CC2530串口通信的相关寄存器

对于CC2530的每个USART串口通信,有5个如下的寄存器(x是USART的编号,为0或者1):
 UxCSR:USARTx控制和状态寄存器
 UxUCR:USARTx UART控制寄存器
 UxGCR:USARTx 通用控制寄存器
 UxBUF:USART x接收/发送数据缓冲寄存器
 UxBAUD:USART x波特率控制寄存器

4.串口0初始化

串口0 初始化PERCFG=0X00;    //外设控制寄存器 这里使用串口0位置1
P0SEL=0X0C;     //0_2 0_3设置特殊端口
U0CSR |=0X80;//0100 0000  0x80 串口通信的语言这里使用USARTU0BAUD =216 ;
U0GCR=10   ;  //波特率U0UCR |=0x80;   //流控制禁止
U0CSR |=0x40;  //允许接受数据
UTX0IF = 0;     //接受标志位
URX0IF = 0;     //发送标志位URX0IE=1;   //使能中断
EA=1;        //中断总开关串口设置
TX  发送数据
RX  接收数据

波特率设置

U0CSR和U0BAUD用来设置波特率
例如设置波特率位57600:
U0BAUD = 216;
U0GCR = 10;

具体初始化

UART0初始化配置
1、设置USARTX0 为备用位置1,一般采用上电默认,无需配置PERCFG  &= ~0X01;
2、设置P0用作串口,P0_2、P0_3作为片上外设I/0P0SEL |= 0X0C;
3、设置P0口外设优先级,采用上电默认值(P2DIR),无需配置
4、设置UART0波特率U0BAUD = 59;
U0GCR = 10;
5、USART 模式选择,UART 模式,允许接收U0CSR |= 0XC0;
6、进行USART 清除,并设置数据格式为默认值U0UCR |= 0X80;
7、清零UART0  RX 和 UART0  TX 中断标志URX0IF = 0;UTX0IF = 0;
8、使能UART0  RX 中断URX0IE = 1;
9、使能全局中断EA = 1;

如果接收到了串口发来的数据URX0IF置1;
如果发送成功UTX0IF置1;

串口收发配置
1、串口初始化配置
2、发送函数
void SendString(char *p)   //发送字符串
{while(1){if(*p == '\0')  break;U0DBUF = *p++;while(!UTX0IF);UTX0IF = 0;}}

3、串口接收中断服务函数

#pragma vector = URX0_VECTOR
__interrupt void URX0_f()
{URX0IF = 0;buff[i] = U0DBUF;if(buff[i] == '#'){TXstring(buff);i = 0;}elsei++;
}

4、main函数及时钟源的配置

void main()
{CLKCONCMD &= ~0X47;initUART0();while(1);
}U0CSR
USART模式选择
开启/关闭 接收数据功能,在发送数据的时候需要关闭接收数据功能U0CSR |= 0X40; / U0CSR &= ~0X40;

U0UCR
一般采用上电默认值
U0UCR |= 0X80;

URX0IF
清空UART0、UART1的RX 中断标志URX0IF = 0;

UTX0IF

U0CSR
一般设置:U0CSR |= 0X40;   //允许接收

URX0IE
IEN0 的第二位,使能UART0  RX 中断

P2DIR
端口0外设优先级控制
使用USART0时 采用上电默认值

代码

/*  文件名称:uart1.c* 功    能:CC2530系统实验-----单片机串口发送数据到PC* 描    述:实现从 CC2530 上通过串口每3秒发送字串"Hello ,I am CC2530 .\n  ",在PC端实验串口助手来接收数据。使用 CC2530 的串口 UART 0 ,波特率为 57600,其他参数为上电复位默认值。
*/
/* 包含头文件 */
#include "ioCC2530.h"  //定义led灯端口
#define LED1 P1_0     // P1_0定义为P1.0unsigned int counter=0;       //统计定时器溢出次数
void initUART0(void)
{PERCFG = 0x00;    P0SEL = 0x3c; U0CSR |= 0x80; U0BAUD = 216;U0GCR = 10; U0UCR |= 0x80;  UTX0IF = 0;  // 清零UART0 TX中断标志EA = 1;   //使能全局中断
}/************************************************************* 函数名称:inittTimer1* 功    能:初始化定时器T1控制状态寄存器
*************************************************************/
void inittTimer1()
{  CLKCONCMD &= 0x80;   //时钟速度设置为32MHz    T1CTL = 0x0E;  // 配置128分频,模比较计数工作模式,并开始启动T1CCTL0 |= 0x04;             //设定timer1通道0比较模式T1CC0L =50000 & 0xFF;    // 把50000的低8位写入T1CC0LT1CC0H = ((50000 & 0xFF00) >> 8); // 把50000的高8位写入T1CC0H T1IF=0;           //清除timer1中断标志T1STAT &= ~0x01;  //清除通道0中断标志TIMIF &= ~0x40;  //不产生定时器1的溢出中断//定时器1的通道0的中断使能T1CCTL0.IM默认使能IEN1 |= 0x02;    //使能定时器1的中断  EA = 1;        //使能全局中断
}void UART0SendByte(unsigned char c)
{U0DBUF = c;       while (!UTX0IF);  // 等待TX中断标志,即U0DBUF就绪UTX0IF = 0;       // 清零TX中断标志
}/*************************************************************** 函数名称:UART0SendString* 功    能:UART0发送一个字符串
**************************************************************/
void UART0SendString(unsigned char *str)
{while(*str != '\0'){UART0SendByte(*str++);   // 发送一字节}
}/************************************************************* 功    能:定时器T1中断服务子程序************************************************************/
#pragma vector = T1_VECTOR //中断服务子程序
__interrupt void T1_ISR(void) { EA = 0;   //禁止全局中断counter++;  //统计T1的溢出次数T1STAT &= ~0x01;  //清除通道0中断标志EA = 1;   //使能全局中断
}/************************************************************* 函数名称:main* 功    能:main函数入口
*******************************************************/
void main(void)
{  P1DIR |= 0x01;   /* 配置P1.0的方向为输出 */LED1 = 0;inittTimer1();  //初始化Timer1initUART0();  // UART0初始化  while(1) {if(counter>=15){counter=0; LED1 = 1;UART0SendString("Hello ! I am CC2530 .\n");LED1 = 0;}      }
}

CC2530基础实验四 串口通信相关推荐

  1. STM32MP157(实验四)——串口通信(串口打印)

    文章目录 设计需求 一.基础知识 串行/并行 全双工/半双工/单工 同步和异步 通信速率 电平标准 硬件设计 IDE设计 MX设置 代码设计 实验现象 设计需求 使用串口打印调式信息 一.基础知识 在 ...

  2. CC2530基础实验:(8)串口通讯-发送字符串控制LED

     目录 前言 一.实验相关电路图 二.实验相关理论与寄存器 1.并行通信与串行通信 2.URAT 3.同步通信与异步通信 4.外设I/O 5.CC2530 的串口通信模块 6.相关寄存器 三.源码分析 ...

  3. 嵌入式系统 实验二 串口通信实验

    实验二 串口通信实验 一.实验目的 1.)了解 USART 的基本特性: 2.)掌握用库函数操作 USART 的方法: 3.)掌握如何使用 STM32 的串口发送和接收数据. 二.实验环境 1.)硬件 ...

  4. 计算机网络基础昆明理工大学,昆明理工大学 计算机网络基础 实验四

    昆明理工大学 计算机网络基础 实验四 昆明理工大学信息工程与自动化学院学生实验报告 ( 2013 -2014 学年 第2 学期 ) 课程名称:计算机网络 开课实验室:信自楼442 2014年6月2日 ...

  5. TI CC2530基础实验(定时器1查询方式——自由运行模式)

    本实验实现通过CC2530的定时器1(16位)查询方式控制LED1以1S的周期性闪烁,此实验使用的三个寄存器T1CTL(定时器1控制寄存器),T1STAT(定时器1状态寄存器),IRCON. 有关CC ...

  6. (四)DSP28335基础教程——SCI串口通信实验(上位机收发显示)

    0 前言 本期的实验目的为:使用核心板上的SCI串口通信功能,在电脑端上位机,输入数字0,1,2,3,4,分别控制五个LED亮灭. 1 DSP代码 (注意:查看代码时双击点进去看,否则会内容不全). ...

  7. 硬件基础:理解串口通信以及232,485,422常见问题

    这里并不对串口的编程作讲解,主要是从应用的角度去讲一讲.因为更多的时候,都是产品做好了,比如触摸屏需要和控制器,PLC通信.理想的情况下,一般只要一上电,不需要太多的操作和配置,就可以通信上. 在这里 ...

  8. 第5-6周-实验作业-串口通信小试

    目录 一.寄存器写流水灯 1.在Cube_Mx选择F103C8芯片包 2.设置GPIO 3.设置时钟 4.生成函数后对main函数进行修改 5. 利用寄存器写流水灯,代码如下 二.串口通信 1.串口初 ...

  9. CC2530基础实验:(1)按键控制LED跑马灯

    文章目录 前言 一.实验相关电路图 二.实验相关寄存器 三.源码分析 前言 本实验用于学习CC2530芯片GPIO 的配置方法,Led 驱动电路及开关 Led 的原理,按键的使用,实现简单的人机交互. ...

最新文章

  1. linux添加ssl信任根证书,linux系统添加根证书linux证书信任列表
  2. python字典实现关键字检索_如何实现搜索框的关键词提示功能
  3. 唔... 突然发现进入推荐博客了
  4. 微信支付宝服务器在哪里,支付宝支付与微信支付服务端回调notify_url数据的区别...
  5. java调用c的sdk_如何使用java调用c++的sdk动态库 sdk已存在 java方法怎么写? 怎么调用??在线等!!!...
  6. ASP.NET跨页传值方法汇总
  7. 测一测!中科视拓免费开放口罩人脸检测与识别技术
  8. day22 java的枚举
  9. 潭州课堂25班:Ph201805201 爬虫基础 第六课 选择器 (课堂笔记)
  10. python编程语言-python编程语言基础知识总结
  11. 《算法导论》读书笔记之第10章 基本数据结构之二叉树
  12. 并查集(ACWING三道题)
  13. java自己写框架_用java自己动手写个简单RCP框架
  14. RDP报表快速打造数据大屏可视化展示系统
  15. 曾国藩36字深入解读-借智慧
  16. Complex Multiplier IP 使用教程(源码)
  17. ECONOMICS REPORT - The United States Postal Service Warns of Default
  18. TDM阅读笔记,在推荐系统的应用
  19. 【k8s】 k8s | 一 | 介绍
  20. Springboot与Kafka的小插曲

热门文章

  1. 程序员的10000个小时理论
  2. 赶紧拿走!这4个实用的软件关键时刻能帮上你大忙!
  3. 计算机网络测试题第五章答案,计算机组成原理练习题答案第五章.doc
  4. kindle操作:传输下载的书籍、更改书籍封面
  5. SLAM代码(SVO ros )
  6. java eclipse怎么下载_javaeclipse简介(附下载地址和安装包)
  7. Android aar包的so和jniLibs中的so库冲突
  8. AndroidStudio Jni开发-生成多个so库
  9. 关于mysql安装时无法正常启动0xc000007b的问题
  10. 计算机硬件类的相关课程,计算机硬件类课程,hardware course,音标,读音,翻译,英文例句,英语词典...