一.前言

今天,我们来学习和实验串口模块方面的,串口通信是我们常用的通信手段,通过串口交互,我们可以很容易的和pc机进行数据的交换和发送,所以我们今天就来学习一下。这个实验所进行的功能是一开始CC2530 向电脑发送“单片机欢迎您”,“This is a Uart test.”,之后按下Key1,就在电脑上显示“Key1 has been pressed down. ”,Key2 也是同样的道理。

二.原理与分析

cc2530有两个串口,分别为Usart0,Usart1,它们有同步模式和异步模式。串口对应的引脚如下:

在实际的应用中,我们一般都应用的是异步模式,所以今天实验就是异步的串口传送,先介绍一下异步传输的特点:

串口进行收发的数据都会保存在UxBUF寄存器中,要使用串口进行收发数据,我们要先对串口进行配置和波特率的设置

要配置的寄存器:

系统时钟和串口的配置如下:

配置时钟为什么要用clkconcmd寄存器,下面给出寄存器表:

三.实验效果

四.程序

主函数

#include <ioCC2530.h>

#include "Uart.h"

#define uint unsigned int

#define uchar unsigned char

#define KEY1  P0_4     //KEY1为P0_4口控制

#define KEY2  P0_5     //KEY2为P0_5口控制

#define LED1  P1_0     //P1_0连接LED1

#define LED2  P1_1     //P1_1连接LED2

#define LED3  P1_4     //P1_4连接LED3

//函数声明 void Initial_IO(void); void Delayms(uint xms);

//定义待发送的数据

char Txdata0[]={"秉火团队欢迎您\n"};  //存放"秉火团队欢迎您"

char Txdata1[]={"This is a Uart test.\n"};

char Txdata2[]={"Key1 has been pressed down.\n"};

char Txdata3[]={"Key2 has been pressed down.\n"};

/**************************************************  函 数 名  : main  功能描述  : USART测试(USART0发送数据给电脑)  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE ***************************************************/

void main(void)

{

SetSysClock();               //设置系统时钟为32MHz

Initial_IO();   //调用初始化函数

InitUART();                  //调用初始化函数

UartSend_String(Txdata0,sizeof("秉火团队欢迎您\n"));

Delayms(500);

UartSend_String(Txdata1,sizeof("This is a Uart test.\n"));

while(1)

{

if(KEY1==0)

{

UartSend_String(Txdata2,sizeof("Key1 has been pressed down.\n"));  //发送数据

Delayms(500);     //按键去抖         }

if(KEY2==0)

{

UartSend_String(Txdata3,sizeof("Key2 has been pressed down.\n"));  //发送数据

Delayms(500);     //按键去抖         }     }   }

/**************************************************  函 数 名  : Initial_IO  功能描述  : LED_IO初始化函数  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE ***************************************************/

void Initial_IO(void)

{

P1DIR |= 0x13;     //P1_0、P1_1、P1_4为输出,其他为输入

P1=0xff;          //P1口为高(LED1、LED2,LED3高) }

/**************************************************  函 数 名  : Delayms  功能描述  : 毫秒延时  输入参数  : xms:延时时间,如 i=xms 即延时i/2毫秒  输出参数  : none  返 回 值  : none ***************************************************/

void Delayms(uint xms)   {     uint i,j;     for(i=xms;i>0;i--)         for(j=587;j>0;j--); }

Uart.c文件

#include "Uart.h"

#define uint unsigned int

#define uchar unsigned char

/**************************************************  函 数 名  : InitUART  功能描述  : CC2530串口初始化配置  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE ***************************************************/

void InitUART(void)

{

PERCFG = 0x00;        //位置1 P0口

P0SEL = 0x0c;        //P0_2,P0_3 用作串口(IO 复用)

P2DIR &= ~0XC0;                   //P0优先作为UART0

U0CSR |= 0x80;        //设置为UART方式

U0GCR |= 11;

U0BAUD |= 216;        //波特率设为115200

UTX0IF = 0;                       //UART0 TX中断标志初始置位0 }

/**************************************************  函 数 名  : UartSend_String  功能描述  : 串口向电脑发送字符串  输入参数  : *Data---字符串首地址              len---字符串长度  输出参数  : NONE  返 回 值  : NONE ***************************************************/

void UartSend_String(char *Data,int len)

{     int j;

for(j=0;j<len;j++)

{         U0DBUF = *Data++;         while(UTX0IF == 0);         UTX0IF = 0;     } }

/**************************************************  函 数 名  : SetSysClock  功能描述  : 设置系统时钟为32MHz  输入参数  : NONE  输出参数  : NONE  返 回 值  : NONE ***************************************************/

void SetSysClock(void) {     CLKCONCMD &= ~0x40;           //选择系统时钟源为外部32MHz crystal oscillator

while(CLKCONSTA & 0x40);      //等待晶振稳定为32MHz

CLKCONCMD &= ~0x47;           //设置系统主时钟频率为32MHZ  }

四.总结与分析

通过这次的实验,我们可以学会用串口进行数据的发送,这是非常基础的,但需要记住的是要先配置串口的初值和系统的时钟。

zigbee学习之路(九):串口(发送)的更多相关文章

  1. zigbee学习之路(十):串口(接收)

    一.前言 上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制LED 灯闪烁,而且将收到的数据发回给电脑显示出来.而且要采用不占用cpu资源的中断. 二原理与分析 ...

  2. zigbee学习之路(十三):基于协议栈的Usart 实验

    一.前言 这次实验我们来学习基于zigbee的串口通信实验,揭开zigbee神秘的面纱,让大家可以用zigbee协议编制属于自己的程序,这次实验只是串口发送数据,并没有进行无线的数据传输,为的是使大家 ...

  3. zigbee学习之路(十四):基于协议栈的无线数据传输

    一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...

  4. 【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互

    引言 在第一章博客中,我们讲了Arduino对Esp32的一个环境配置,以及了解到了常用的一个总线通讯协议,其中有SPI,IIC,UART等,今天我为大家带来UART串口通讯和c#串口进行通讯的一个案 ...

  5. zigbee学习之路(十二):zigbee协议原理介绍

    一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...

  6. zigbee学习之路(一):zigbee介绍

    一.前言 大家好,我是一名在校的大学生,最近对zigbee非常感兴趣,于是自己从网上买了一款秉火cc2530的zigbee开发板,想通过这个平台来和大家分享自己学习和研究的经历,下面就来简单的介绍下z ...

  7. zigbee学习之路(十五):基于协议栈的按键实验

    一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...

  8. zigbee学习之路(八):定时器1(中断)

    一.前言 通过上次的实验,我们已经学会了定时器3的中断方式,这次,我们来看看定时器1通过中断怎么控制. 二.原理分析 定时器1的初始化跟前面提到的一样,也是要配置寄存器T1CTL,还要进行开中断的操作 ...

  9. zigbee学习之路(十一):看门狗

    一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU ...

随机推荐

  1. 从全局中通过class类名获取标签

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. linux笔记五-------编辑器

    1. 三种模式    命令(默认).尾行.编辑模式 2. 尾行模式    :    :q      退出vi编辑器    :w      保存修改    :wq     保存并退出编辑    :q!  ...

  3. 模拟状态为inactive的日志损坏的恢复实验(完全恢复)

    1查看当前日志状态 从这里可以看到我们现在有三组日志,每组日志中只有1个成员.为了演示这个实验,我们为每个组增加1个成员. 2为每组增加组成员 添加后我们验证一下目前各日志成员的状态: 从上面的视图中 ...

  4. js 所有事件列表

    javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown ...

  5. 【iCore3 双核心板_FPGA】例程五:Signal Tapll实验——逻辑分析仪

    实验指导书及代码包下载: http://pan.baidu.com/s/1bnNRfaB iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  6. 【iCore3 双核心板_ uC/OS-III】例程二:任务的建立与删除

    实验指导书及代码包下载: http://pan.baidu.com/s/1bD7ulK iCore3 购买链接: https://item.taobao.com/item.htm?id=5242294 ...

  7. Apache Spark技术实战之7 -- CassandraRDD高并发数据读取实现剖析

    未经本人同意,严禁转载,徽沪一郎. 概要 本文就 spark-cassandra-connector 的一些实现细节进行探讨,主要集中于如何快速将大量的数据从cassandra 中读取到本地内存或磁盘 ...

  8. phpcms v9的url优化

    nginx配置重定向 # nginx rewrite rule rewrite ^/show-(.+)-(.+)-(.+).html$ /index.php?m=content&c=index ...

  9. IIS应用程序池最大进程数设置

    1.当工作进程数>1时,如果有多个连接请求就会启动多个工作进程实例来处理,所启动的最多工作进程数就是你设置的最大进程数,后续更多的连接请求会循环的发送至不同的工作进程来处理.每个工作进程都能承担 ...

  10. HAProxy 实践(一)

    运行环境 OS: Deiban 7 软件:haproxy 1.5.8 HTTP Server: 192.168.99.1:8520 192.168.99.1:8530 192.168.99.1:854 ...