(一)串口发送

一、实验现象:

开发板实现功能发送

二、实验过程

1、PL2303 USB转串口电路图

2、串口发送

(1)查看用户手册有:

UART0 对应的外部设备 IO 引脚关系为: P0_2 ------ RX
                                                     P0_3 ------ TX
UART1 对应的外部设备 IO 引脚关系为: P0_5 ------ RX
                                                     P0_4 ------ TX

(2)USART功能特点:

在 CC2540中, UART0和UART1是串行通信接口,它们能够分别运于异步UART模式或者同步SPI模式两个模式。两个UART的功能是一样,可以通过设置在单独的 IO引脚上。
      UART 模式的操作具有下列特点:
          ①8位或者 9位负载数据

②奇校验、偶校验或者无奇偶校验

③配置起始位和停止电平

④配置 LSB 或者 MSB 首先传送

⑤独立收发中断

⑥独立收发 DMA 触发

(3)CC2540配置串口的一般步骤

① 配置 IO,使用外部设备功能。 此处配置 P0_2 和 P0_3用作串口 UART0
② 配置相应串口的控制和状态寄存器。 此处配置 UART0 的工作寄存器
③ 配置串口工作的波特率。 此处配置波特率为115200

(4)寄存器的相关内容:

U0CSR
(UART0控制和状态寄存器)
BIT7:MODE 0:SPI模式      1:UART模式
  BIT6:RE 0:接收器进制  1:接收器使能
  BIT5:SLAVE 0:SPI主模式   1:SPI从模式
  BIT4:FE 0:没有检测到出帧错误
1:收到字节停止位电平出错
  BIT3:ERR 0:没有检测出奇偶检验出错
1:收到字节奇偶检验出错
  BIT2:RX_BYTE 0:没有收到字节
1:收到字节就绪
  BIT1:TX_BYTE 0:没有发送字节
1:写到数据缓冲区寄存器的最后字节已发送
  BIT0:ACTIVE 0:UART空闲
1:UART忙碌
U0GCR
(UART0通用控制寄存器)
BIT7:CPOL 0:SPI负时钟极性
1:SPI正时钟极性
  BIT6:CPHA 0:当来自CPOL的SCK反相之后又返回CPOL时,数据输出到 MOSI;当来自CPOL的SCK返回CPOL反相时,输入数据采样到MISO。
1:当来自CPOL的SCK反相之后又返回CPOL时,输入数据采样MOSI;当来自CPOL的SCK返回CPOL反相时,数据输出到 MOSI。
  BIT5:ORDER 0:LSB先传送
1:MSB先传送
  BIT[4,0]:BAUD_E 波特率指数值  BAUD_E连同BAUD_M一起决定了UART的波特率
U0BAUD
UART0 波特率控制寄存器
BIT[7,0]:BAUD_M 波特率尾数值  BAUD_E连同BAUD_M一起决定了UART的波特率
U0DBUF   串口发送/接受数据缓冲区
UTX0IF
发送中断标志
中断标志5IRCON2的BIT1 0:中断未挂起
1:中断挂起

(5)串口波特率设置

公式如下:

常用波特率设置:

(6)代码实现:

#include<ioCC2540.h>
#include <string.h>#define  uint  unsigned int
#define  uchar unsigned char//定义LED的端口
#define LED1 P1_0
#define LED2 P1_1//函数声明
void Delay_ms(uint);
void initUART(void);
void UartSend_String(char *Data,int len);char Txdata[19]; //存放"Hello BlueTooth4.0\n"共19个字符串/****************************************************************延时函数
****************************************************************/
void Delay_ms(uint n)
{uint i,j;for(i=0;i<n;i++)for(j=0;j<1774;j++);
}void IO_Init()
{P1DIR = 0x01;                    //P1_0,P1_1 IO方向输出LED1 = 0;
}/****************************************************************串口初始化函数
****************************************************************/
void InitUART(void)
{ PERCFG = 0x00;              //位置1 P0口P0SEL = 0x0c;                      //P0_2,P0_3用作串口(外部设备功能)P2DIR &= ~0XC0;                     //P0优先作为UART0
  U0CSR |= 0x80;              //设置为UART方式U0GCR |= 11;                       U0BAUD |= 216;              //波特率设为115200UTX0IF = 0;                         //UART0 TX中断标志初始置位0
}
/****************************************************************
串口发送字符串函数
****************************************************************/
void UartSend_String(char *Data,int len)
{int j;for(j=0;j<len;j++){U0DBUF = *Data++;while(UTX0IF == 0);UTX0IF = 0;}
}
/****************************************************************
主函数
****************************************************************/
void main(void)
{    CLKCONCMD &= ~0x40;               //设置系统时钟源为32MHZ晶振while(CLKCONSTA & 0x40);          //等待晶振稳定为32MCLKCONCMD &= ~0x47;               //设置系统主时钟频率为32MHZ
  IO_Init();InitUART();strcpy(Txdata,"Hello BlueTooth4.0\n");     //将发送内容copy到Txdata;while(1){UartSend_String(Txdata,sizeof("Hello BlueTooth4.0\n")); //串口发送数据Delay_ms(500);                    //延时LED1=!LED1;                       //标志发送状态
   }
}

三、实验成果:

PS:串口驱动,不行去百度下一个,然后更新驱动程序,在列表中选择,直到选到一个能用的。。真是无底坑。

(二)串口接受和发送

一、实验现象:

开发板实现收发

二、实验过程

原理部分同上,直接上源码

#include<ioCC2540.h>
#include<string.h>//宏定义
#define LED1 P1_0
#define LED2 P1_1//函数声明
void Delay_ms(unsigned int delay); //延时函数
void IO_init();      //IO配置
void UART_init();    //初始化UART
void Send_String(char *Data,int len);   //发送字符串函数//变量声明
char temp=0;   //接收到的字符
char Strdata[60];     //存放字符串//延时函数
void Delay_ms(unsigned int delay)
{unsigned int i,j;for(i=delay;i>0;i--){for(j=0;j<1774;j++);}
}//IO配置
void IO_init()
{ P1SEL=0x00;P1DIR=0X03;P1INP=0X00;LED1=0;LED2=0;
}//初始化UART
void UART_init()
{PERCFG=0X00;          //位置一:P0口P0SEL=0X3c;           //P0_2,P0_3,P0_4,P0_5用作第三用途P2DIR &= ~0XC0;             //方向为输入
  U0CSR|=0X80;          //设置UART方式U0GCR|=11;U0BAUD|=216;          //设置波特率UTX0IF=0;             //清除中断标志位//用来接收字符U0CSR |= 0x40;        //允许接收IEN0 |= 0x84;         //开总中断,接收中断
}//发送字符串函数
void Send_String(char *Data,int len)
{unsigned int i;for(i=0;i<len;i++){//U0DBUF = *Data++;    //两种方法都可以U0DBUF = Data[i];while(UTX0IF==0);         //发送完一个字符后,会产生一个中断。我们通过等待中断产生,来控制传输时间间隔。UTX0IF = 0;}
}void main()
{int datanumber = 0;     //统计字符长度int RXTXflag = 1;       //接收状态标志变量
CLKCONCMD &= ~0x40;      //设置系统时钟源为32MHZ晶振while(CLKCONSTA & 0x40); //等待晶振稳定CLKCONCMD &= ~0x47;      //设置系统主时钟频率为32MHZ。
   IO_init();           //初始化
   UART_init();strcpy(Strdata,"Hello World~\n");while(1){if(RXTXflag == 1)     //接收状态
     {LED1 = 1;  //接收状态表示if(temp!=0){if((temp!='#')&&(datanumber<50))   //最多接收50个字符,和以#号结束
         {Strdata[datanumber++] = temp;   }else{RXTXflag=3;        //进入发送状态LED1=0;            //关指示灯
         }temp=0;}}if(RXTXflag == 3){LED2=1;    //发送状态表示U0CSR &= ~0X40;     //禁止接收
       Send_String(Strdata,datanumber);U0CSR |= 0x40;     //允许接受RXTXflag = 1;      //恢复到接收状态datanumber = 0;    //指针归0LED2 = 0;          //关发送提示
     }}}//一个个拿出发送的字符,使用中断的手段
#pragma vector = URX0_VECTOR
__interrupt void fu(void)
{URX0IF=0;      //清除中断标志temp=U0DBUF;
}

三、实验结果

(三)UART0控制LED

一、实验现象:

开发板实现UARTO控制LED

二、实验过程

原理部分同上,直接上源码

#include<ioCC2540.h>
#include<string.h>//宏定义
#define LED1 P1_0
#define LED2 P1_1//函数声明
void Delay_ms(unsigned int delay); //延时函数
void IO_init();      //IO配置
void UART_init();    //初始化UART
void Send_String(char *Data,int len);   //发送字符串函数//变量声明
char temp=0;   //接收到的字符
char Strdata[60];     //存放字符串//延时函数
void Delay_ms(unsigned int delay)
{unsigned int i,j;for(i=delay;i>0;i--){for(j=0;j<1774;j++);}
}//IO配置
void IO_init()
{ P1SEL=0x00;P1DIR=0X03;P1INP=0X00;LED1=0;LED2=0;
}//初始化UART
void UART_init()
{PERCFG=0X00;          //位置一:P0口P0SEL=0X3c;           //P0_2,P0_3,P0_4,P0_5用作第三用途P2DIR &= ~0XC0;             //方向为输入
  U0CSR|=0X80;          //设置UART方式U0GCR|=11;U0BAUD|=216;          //设置波特率UTX0IF=0;             //清除中断标志位//用来接收字符U0CSR |= 0x40;        //允许接收IEN0 |= 0x84;         //开总中断,接收中断
}//发送字符串函数
void Send_String(char *Data,int len)
{unsigned int i;for(i=0;i<len;i++){//U0DBUF = *Data++;    //两种方法都可以U0DBUF = Data[i];while(UTX0IF==0);         //发送完一个字符后,会产生一个中断。我们通过等待中断产生,来控制传输时间间隔。UTX0IF = 0;}
}void main()
{int datanumber = 0;     //统计字符长度int RXTXflag = 1;       //接收状态标志变量
CLKCONCMD &= ~0x40;      //设置系统时钟源为32MHZ晶振while(CLKCONSTA & 0x40); //等待晶振稳定CLKCONCMD &= ~0x47;      //设置系统主时钟频率为32MHZ。
   IO_init();           //初始化
   UART_init();while(1){if(RXTXflag == 1)     //接收状态
     {if(temp!=0){if((temp!='#')&&(datanumber<50))   //最多接收50个字符,和以#号结束
         {Strdata[datanumber++] = temp;   }else{RXTXflag=3;        //进入发送状态
         }temp=0;}}if(RXTXflag == 3){if( Strdata[0]=='L'){switch( Strdata[1]-'0'){case 1: LED1=~LED1;break;      //低电平点亮case 2: LED2=~LED2;break;      }}RXTXflag = 1;      //恢复到接收状态datanumber = 0;    //指针归0
    }}}#pragma vector = URX0_VECTOR
__interrupt void fu(void)
{URX0IF=0;      //清除中断标志temp=U0DBUF;
}

三、实验结果

CC2540开发板学习笔记(五)——串口通信相关推荐

  1. 华清远见fs4412开发板学习笔记(五)

    fs4412开发板学习笔记(五) 作业1: 输入10个整数,按从小到大的顺序输出(选择排序) 每轮排序在未排序的集合中找到(最小/最大),将找到的数与未排序的 第一个数交换位置. 5 4 3 2 1 ...

  2. 【K210】K210学习笔记五——串口通信

    [K210]K210学习笔记五--串口通信 前言 K210如何进行串口通信 K210串口配置 K210串口发送相关定义 K210串口接收相关定义 K210串口发送接收测试 完整源码 前言 本人大四学生 ...

  3. CC2540开发板学习笔记(六)——AD控制(自带温度计)

    一.实验目的 将采集的内部温度传感器信息通过串口发送到上位机 二.实验过程 1.寄存器配置 ADCCON1(0XB4) ADC控制寄存器1 BIT7:EOC   ADC结束标志位 0:AD转换进行中  ...

  4. CC2540开发板学习笔记(一)——LED点亮

    一.实验内容: 点亮LDE1.2 二.实验原理: 1.电路原理图: 就一个发光二极管串联一个电阻.电阻是为了防止电流过大.利用发光二极管的单向导电性,在P1为高电平是点亮LED,在低电平是熄灭LED. ...

  5. CC2540开发板学习笔记(七)—— 睡眠唤醒

    (一)中断唤醒 一.实验内容 通过中断唤醒在睡眠模式下的CC2540 二.实验原理 1.系统电源管理(工作方式) (1)全功能模式: 高频晶振(16M或者32M)和低频晶振(32.768K RCOSC ...

  6. 阿里云HaaS100物联网开发板学习笔记(六)做个智能灯---一个完整的开发例子

    摘要:本篇文章将前期几个专题综合起来,基于阿里云HaaS100的新固件设计制作一个智能灯.这个智能灯由云平台.手机APP端和设备端组成,基本上涵盖了一个物联网小项目所需的主要步骤. 目录 1.在阿里云 ...

  7. 阿里云HaaS100物联网开发板学习笔记(四)轻应用初步--用javascript连接阿里云物联网平台

    摘要:本篇文章讲解如何使用JavaScript"轻应用"连接阿里云物联网平台并上报一个数据.仍然延续前几篇文章的结构,从安装软件环境开始讲,以使零基础的同学看了本篇文章之后,也能够 ...

  8. 涂鸦LZ201-CN开发板学习笔记(一)

    涂鸦LZ201-CN开发板学习笔记(一) 前言 一.引出 二.准备流程 1.购买开发板 2.创建产品 (1)创建产品 (2)功能定义 (3)设备交互 (4)硬件开发 3.检查开发板 第一步: 第二步: ...

  9. 阿里云HaaS100物联网开发板学习笔记(二)硬件控制初步--让小灯闪烁起来

    摘要:无论是哪种开发板,要想开发特定的功能,必先从GPIO开始,HaaS100开发也是一样.如果仅仅利用HaaS100的联网功能,那简直是太浪费了.HaaS100拥有其他开发板所具备的所有的功能,比如 ...

  10. 阿里云HaaS100物联网开发板学习笔记(三)轻应用初步--用js让小灯闪烁起来

    摘要:能让JavaScript应用运行在haas100开发板上,这实在是太酷了,这种方式被阿里云称之为"轻应用".本文带各位从零开始,先了解啥是轻应用,然后搭建环境,再一步步将一个 ...

最新文章

  1. html脱机不显示图片,Python绘图脱机图表嵌入HTML(不工作)
  2. python代码安全扫描工具
  3. JavaScript学习总结(三)——逻辑And运算符详解
  4. Java读取resource文件/路径的几种方式
  5. 第十一章:Java_多线程
  6. 西北师范大学地理与环境科学学院考研真题汇总(自然地理学)持续更新。。。
  7. 加载elementor时出现问题_不锈钢管在焊接时出现问题要怎么解决?
  8. Timeline的Animation Track详解
  9. 基础正则和扩展正则的作用
  10. 使用checked关键字处理“溢出”错误
  11. linux-tomcat连接数查询
  12. xUtils3 联网模块
  13. nurbs曲线拟合程序_NURBS曲线DeBoor算法(Grasshopper数学插件)
  14. python怎么查文献_查询论文的引用格式,支持批量查询
  15. PADS 不同单位之间的切换
  16. kudu底层存储引擎的数据组织方式
  17. 移动APP开发的三种常见模式
  18. Mach-O文件, 架构包framework的合并和拆分
  19. zookeeper和k8s_Kubernetes(k8s)运行ZooKeeper,一个分布式系统协调器
  20. ArcGIS Pro 简介(二)

热门文章

  1. CDN 的诞生、术语、原理、特征以及应用场景
  2. 单片机用C语言锯齿波,试用c语言编写一个能输出锯齿波信号的单片机c51程序
  3. 结果概率_解疑:一批网申结果何时出?通过网申的概率有多大?
  4. 氩焊机器人编程_如何操作焊接机器人的编程?这六点是基础!
  5. 汇编程序实现快速排序_用Python 3实现快速排序和插入排序代码详解
  6. 122.买卖股票的最佳时机II
  7. Ubuntu1604安装pycharm
  8. StringTokenizer类
  9. Tor源码分析十 -- 连接和链路
  10. Kruskal算法实现最小生成树MST(java)