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 ...
随机推荐
- hdu 小希的迷宫
真是被这道并查集的水题给坑哭了...忘记给uset数组初始化我也是醉了. 题目意思是找到判断是不是连通无环的图,首先想到的就是并查集. 1判断成环的时候,只要判断输入边的两个点.有一个共同的父节点,那 ...
- bootstrap使用性能问题
1.如icheckbox等的初始化,不要采用类似for in的循环来对所需应用的元素进行初始化,直接采用如 $('[data-toggle="popover"]').popove ...
- EmguCV 轮廓匹配
一.相关类 MCvMoments inv_sqrt_m00 m00!=0?1/sqrt(m00):0 m00 spatial moments m01, m02, m03, m10, m11 m12, ...
- [转]快速构建App界面的框架(●'◡'●) -----SalutJs
前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着迭代的更新和业务 ...
- pomotime_v1.7.2 番茄软件完全教程
资源下载:http://download.csdn.net/detail/xz_legendx/8546211 番茄规则和技巧 一个番茄时间共30分钟,包括25分钟的工作时间和5分钟的休息时间. ...
- js弹窗
常用人JS弹窗,lhgDialog 4.20
- JS弹出遮罩层
// create div var mask=document.createElement("div"); mask.id="mask"; mask.style ...
- 【转】基于 CoreText 实现的高性能 UITableView
引起UITableView卡顿比较常见的原因有cell的层级过多.cell中有触发离屏渲染的代码(譬如:cornerRadius.maskToBounds 同时使用).像素是否对齐.是否使用UITab ...
- HTML中的图像
格式: 1.JPEG:文件品质高,内存大,文件大小为GIF的1/4,色彩丰富 2.PNG:内存最小,图像不失真,支持透明度设置 3.GIF:适合显示色调不连续或具有大面积单一颜色的图像,比如导航条.按 ...
- df 命令(转)
linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...