zigbee学习之路(九):串口(发送)
一.前言
今天,我们来学习和实验串口模块方面的,串口通信是我们常用的通信手段,通过串口交互,我们可以很容易的和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学习之路(九):串口(发送)的更多相关文章
- zigbee学习之路(十):串口(接收)
一.前言 上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制LED 灯闪烁,而且将收到的数据发回给电脑显示出来.而且要采用不占用cpu资源的中断. 二原理与分析 ...
- zigbee学习之路(十三):基于协议栈的Usart 实验
一.前言 这次实验我们来学习基于zigbee的串口通信实验,揭开zigbee神秘的面纱,让大家可以用zigbee协议编制属于自己的程序,这次实验只是串口发送数据,并没有进行无线的数据传输,为的是使大家 ...
- zigbee学习之路(十四):基于协议栈的无线数据传输
一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...
- 【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互
引言 在第一章博客中,我们讲了Arduino对Esp32的一个环境配置,以及了解到了常用的一个总线通讯协议,其中有SPI,IIC,UART等,今天我为大家带来UART串口通讯和c#串口进行通讯的一个案 ...
- zigbee学习之路(十二):zigbee协议原理介绍
一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...
- zigbee学习之路(一):zigbee介绍
一.前言 大家好,我是一名在校的大学生,最近对zigbee非常感兴趣,于是自己从网上买了一款秉火cc2530的zigbee开发板,想通过这个平台来和大家分享自己学习和研究的经历,下面就来简单的介绍下z ...
- zigbee学习之路(十五):基于协议栈的按键实验
一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...
- zigbee学习之路(八):定时器1(中断)
一.前言 通过上次的实验,我们已经学会了定时器3的中断方式,这次,我们来看看定时器1通过中断怎么控制. 二.原理分析 定时器1的初始化跟前面提到的一样,也是要配置寄存器T1CTL,还要进行开中断的操作 ...
- zigbee学习之路(十一):看门狗
一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU ...
随机推荐
- mysql批量替换指定字符串
将字段title中的abc替换为123 UPDATE `table1` SET `title` = replace(title, 'abc', '123') WHERE `typeid` =18;
- asp.net identity 2.2.0 中角色启用和基本使用(六)
创建用户管理相关视图 第一步:添加视图 打开UsersAdminController.cs 将鼠标移动到public ActionResult Index()上 右键>添加视图 系 ...
- ASP.NET Global Application_Error事件中访问Session报错 解决
报错信息:会话状态在此上下文中不可用 protected void Application_Error(object sender, EventArgs e) { //以此判断是否可用Session ...
- 【后台测试】Linux下小试jmeter
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5784288.html 前言 上一篇主要讲了在Window ...
- 《Linux内核设计与实现》CHAPTER5阅读梳理
<Linux内核设计与实现>CHAPTER5阅读梳理 [学习时间:2.5hours] [学习内容:系统调用的概念.功能及实现:系统调用的创建和使用方法] CHAPTER5 系统调用 1.系 ...
- Linux Shell编程基础
在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls 显示当前路径下的文件,常用的有 -l 显示长格式 -a 显示所有包括隐 ...
- [转]android:clipToPadding和android:clipChildren
转自:http://www.tuicool.com/articles/32YRJrq android:clipToPadding和android:clipChildren 时间 2014-10-14 ...
- LeetCode Best Time to Buy and Sell Stock with Cooldown
原题链接在这里:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/ 题目: Say you hav ...
- Git add 常见用法
Git add git add [参数] [--] <路径> //作用就是将我们需要提交的代码从工作区添加到暂存区,就是告诉git系统,我们要提交哪些文件,之后就可以使用gi ...
- Lock较synchronized多出的特性
1.尝试非阻塞形式获取锁 tryLock() :当前线程尝试获取锁,如果锁被占用返回false;如果成功则占有锁 //类似用法if(lock.tryLock()) { try { System.out ...