一、串口通讯简介

        同步通信:在发送数据信号的时候,会同时送出一根同步时钟信号, 用来同步发送方和接收方的数据采样频率。

        异步通信:数据发送方和数据接收方没有同步时钟,只有数据信号线,只不过发送端和接收端会按照协商好的协议(固定频率)来进行数据采样。

        USART:  全称Universal Synchronous Asynchronous Receiver and Transmitter(通用同步异步收发器)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。

        UART: 与USART裁剪掉了同步的功能,只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx和Tx) 就可以完成通信过程,因此也称为异步串行通信。

串口通讯帧格式:

① 空闲位:当线路上没有数据的时候,电平处于逻辑'1'。
② 起始位:发送一位逻辑'0',数据开始传输
③ 数据位:常见的是8位的数据,数据低位在前。
④ 校验位:校验位通常存在于数据位的下一位,当数据位加上这一位后,如果是奇校验则1的位数是奇数,相反则1的位数为偶数。
⑤ 停止位:是一个字符数据的结束位,通常是1位、1.5位或者2位的高电平。

二、 CC2530串口寄存器介绍

      ① U0CSR:控制和状态寄存器

Bit7: 设置为1,为UART模式
        Bit6: 设置为1,接收器使能

        ② U0UCR:控制寄存器

Bit6: 设置为0,禁止流控 
        Bit4: 设置为0,传输数据长度为8位
        Bit3: 设置为0,禁用奇偶校验功能
        Bit2: 设置为0,1位停止位

        ③ U0BUF:接收/传送数据缓存寄存器

    ④ U0GCR、U0BAUD:通用控制核波特率控制寄存器 

U0GCR寄存器的低5位和U0BAUD寄存器的8位共同决定通讯的波特率大小,下面给出常用波特率配置表:

        ⑤ PERCFG:外设控制寄存器 

通过该寄存器的Bit0可以决定串口0使用的管脚位置。

⑥ P2DIR:外设优先级控制

P0优先作为UART0,所以设置bite[7:6]为00

三、代码实现

#include <ioCC2530.h>
#include <string.h>typedef unsigned char uchar;
typedef unsigned int  uint;#define UART0_RX    1
#define UART0_TX    2
#define SIZE       51char RxBuf;
char UartState;
uchar count;
char RxData[SIZE];        //存储发送字符串//32MHZ晶振ms延时函数
void DelayMS(uint msec)
{ uint i,j;for (i=0; i<msec; i++)for (j=0; j<1070; j++);
}//串口寄存器初始化
void InitUart(void)
{PERCFG = 0x00;       //外设控制寄存器 USART 0的IO位置:0为P0口位置1 P0SEL = 0x0c;        //P0_2,P0_3用作(外设功能)P2DIR &= ~0xC0;// 1100 0000 将外设设置为串口0优先U0UCR = 0x00; //禁止流控制 8位数据传输 禁止奇偶校验 1位停止位U0CSR |= 0x80;           //设置为UART模式U0GCR |= 11;  //设置数据LSB和波特率U0BAUD |= 216;           //波特率设为115200UTX0IF = 0;              //UART0 TX中断标志初始置位0U0CSR |= 0x40;           //允许接收 IEN0 |= 0x84;            //开总中断允许接收中断
}//串口发送函数
//string:发送的字符串
//len:发送的数据长度
void UartSend_string(char *Data, int len)
{uint i;for(i = 0;i < len;i++) {U0DBUF = *Data++; while(UTX0IF == 0);//等待发送完成UTX0IF = 0;  //发送中断标志位置0}}//接收中断处理函数
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{ URX0IF = 0;       // 清中断标志 RxBuf = U0DBUF;
}void main(void)
{   CLKCONCMD &= ~0x40;                        //设置系统时钟源为32MHZ晶振while(CLKCONSTA & 0x40);                   //等待晶振稳定为32MCLKCONCMD &= ~0x47;                        //设置系统主时钟频率为32MHZ   InitUart();                                //调用串口初始化函数   UartState = UART0_RX;                      //串口0默认处于接收模式memset(RxData, 0, SIZE);while(1){if(UartState == UART0_RX)              //接收状态 { if(RxBuf != 0) {                 if((RxBuf != '#')&&(count < 50))//以'#'为结束符,一次最多接收50个字符            RxData[count++] = RxBuf; else{if(count >= 50)             //判断数据合法性,防止溢出{count = 0;              //计数清0memset(RxData, 0, SIZE);//清空接收缓冲区}elseUartState = UART0_TX;  //进入发送状态 }RxBuf  = 0;}}if(UartState == UART0_TX)              //发送状态 {                         U0CSR &= ~0x40;                    //禁止接收 UartSend_string(RxData, count);     //发送已记录的字符串。U0CSR |= 0x40;                     //允许接收 UartState = UART0_RX;              //恢复到接收状态 count = 0;                         //计数清0memset(RxData, 0, SIZE);           //清空接收缓冲区}    }
}

代码流程:

① 初始化晶振模式
② 串口寄存器初始化
③ 将串口设置为接收模式,进入while循环
④  串口接收主机发送的数据,并且数据长度不超过50,并且数据以#结尾将串口设置为发送模式,并把数据发送给主机。
⑤ 如果接收数据异常,则清空接收缓冲区。

CC2530串口通讯的实现相关推荐

  1. CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)

    目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...

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

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

  3. CC2530串口控制LED灯奇怪玩法

    CC2530串口控制LED灯奇怪玩法 实验目的:CC2530用串口从上位机发送16进制命令代码来控制LED3.4.5.6并返回相应动作 文章目录 CC2530串口控制LED灯奇怪玩法 一.串口设置 二 ...

  4. 串口 发送 接收 高位_电工进阶PLC大神,必备PLC串口通讯的基本知识!

    戳上方蓝字"技成电工课堂"快速关注!!! 电力作业人员在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗?1,什么是串口通讯? ...

  5. plc和pc串口通讯接线_让你搞懂PLC串口通讯和通讯接口,这东西估计没几个能说清楚~...

    电力作业人员在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗? 1,什么是串口通讯? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 ...

  6. android 串口开发_详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印...

    01 写在前面: 上篇关于如何在内置仅1M的Esp8285做到 OTA 升级的同步到微信公众号,竟然被安信可的某些运维人员看到了,想要转载,我很欣慰,竟然自己的笔记可以被这么大型的公司员工认可! 我是 ...

  7. c++实现sscom串口助手循环发送_串口通讯你真的会了吗?不妨看看这些经验

    点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看编程笔记! 平时使用串口打印出现乱码的绝大部分原因是串口波特率没对.那么我们怎么测量实际的波特率呢?在这之前,顺便一起回顾一下波特率的概念. 什 ...

  8. VC基于MSCOMM控件串口通讯

    在mfc中进行串口通讯最简单的方法莫过于在对话框中使用MSCOMM控件了,MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem). 还可以发送命 ...

  9. delphi 串口通信发送_STM32第五章串口通讯详解

    点击上方"果果小师弟",选择"置顶/星标公众号"干货福利,第一时间送达! 串口通信是串行通信里面的异步方式.串行通信是相对于并行通信来说的.串口是一个事实存在的 ...

  10. Android蓝牙串口通讯【转】

    本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...

最新文章

  1. 使用inetaddress测试目标可达性_白盒测试工具―Winams介绍
  2. 人脸关键点 Stasm
  3. hive链接mysql的shell命令_Hive shell 基本命令
  4. arma模型谱估计matlab_基于机器学习的心律失常分类(四)——心电信号特征提取[MATLAB]...
  5. WebMagic写的网络爬虫优秀文章
  6. 小数分数转换c语言,这是把小数转换成分数的程序,可是输入0.6666无限循环
  7. jquery.js和jquery-1.4.2.min.js的区别
  8. mysql opendrowset,java,mysql、jdbc
  9. 语音信号处理基础(一)
  10. 【语法】iOS(一)ObjectC的语法
  11. 鸿蒙系统会有彩蛋吗,华为新系统亮点不断,一个新功能让人欢呼,升级后还有惊喜彩蛋...
  12. win10添加桌面图标到开始屏幕
  13. 使用SpringBoot做一个班级管理系统
  14. SAP那些事-理论篇-7-SAP的优势和劣势
  15. 笔记本电脑禁用自带键盘
  16. 2013年12月甘肃省广播电台网络影响力排名
  17. 小丁在美国的惬意生活 日常学学英语吃吃BBQ-猎豹体育网
  18. Win32:三菱FX3U/FX5U读写软元件方法和注意事项
  19. Db2 purescale环境db2start因为缺少TSAMP license报错:SQL1677N
  20. MATLAB生成exe脱离matlab运行可执行程序

热门文章

  1. Apache commons-text和Configuration 命令执行CVE-2022-42889/CVE-2022-33980分析
  2. 伪随机序列MATLAB实现
  3. 佳能G1800 G2800 G3800提示5B00打印机清零软件用软件ST5302
  4. 简明python教程 沈洁元_Python简明教程-沈洁元
  5. html5 canvas+js贪吃蛇网页小游戏代码
  6. 送给你,PBA商业分析指南(全书下载)
  7. python运维是什么_什么是python自动化运维?
  8. MySQL 游标(CURSOR)
  9. yacc语法学习-part1
  10. 计算机组成原理白中英第五版之总线系统