zigbee学习之串口通信

纠错:U0DBUF发送缓冲区,但是我在中文手册手册上没有找的到这个寄存器,手册上只有U0BUF,U0BUF编译会出错,
我去查了下英文手册,才发现原来是翻译人员翻译错误了,只有U0DBUF,建议看英文手册。

串口通信:
P_2 接收端 P_3发送端(单片机和电脑的电频不同,通过PL2303转换,这是针对zigbee模块的
,想51单片机可以通过232,485来转换)。
TTL 输出:低电平小于0.8,高电平大于2.4 。TTL 输入:低电平小于1.2,高电平大于2

P_2和P_3可以复用到串口,也可以复用到SPI

#include <string.h>
void *memcpy(void *, const void *, size_t);//复制函数
void *memset(void *, int, size_t);//设置函数,注意是传递的指针,这些很基础,是C语言库里面的函数接口,自己下个C语言完全手册看 
int memcmp(const void *, const void *, size_t);

CLKCONCMD &= ~0x40;               //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40);          //等待晶振稳定为32M
CLKCONCMD &= ~0x47;               //设置系统主时钟频率为32MHZ 

void UartSendString(char *Data, int len)//串口发送函数Data:发送缓冲区   len:发送长度
{
    uint i;
    
    for(i=0; i<len; i++)
    {
        U0DBUF = *Data++;//我猜测U0DBUF发送缓冲区,但是我在手册上没有找的到这个寄存器,手册上只有U0BUF
        while(UTX0IF == 0);
        UTX0IF = 0;//发送完后UTX0IF自动设置成1
    }
}

void InitUart(void)

    PERCFG = 0x00;           //外设控制寄存器 USART 0的IO位置:0为P0口位置1 
    P0SEL = 0x0c;            //P0_2,P0_3用作串口(外设功能)
    P2DIR &= ~0XC0;          //P0优先作为UART0
    
    U0CSR |= 0x80;           //设置为UART方式
    U0GCR |= 11; //1011 有      
    U0BAUD |= 216;           //波特率设为115200
    UTX0IF = 0;              //UART0 TX中断标志初始置位0
U0CSR |= 0x40;           //允许接收 
    IEN0 |= 0x84;            //开总中断允许接收中断 
}

#pragma vector = URX0_VECTOR 
__interrupt void UART0_ISR(void) 

    URX0IF = 0;       // 接受中断标志 清中断标志 
    RxBuf = U0DBUF;    //我猜测应该还有个发送中断,发送完了应该也可以中断                       
}
 U0CSR &= ~0x40;                    //禁止接收 发送的时候必须把这个禁止了
 U0CSR |= 0x40;                     //允许接收 
 
用到的寄存器如下:
U0CSR 寄存器
Bit[7] USART模式选择 0:SPI模式 1:UART模式 
Bit[6]  UART接收器使能 0: 禁用接收器 1: 接收器使能 
Bit[5] SP 主或者从模式选择 0: SPI 主模式 1: SPI 从模式 
Bit[4] UART 帧错误状态 0: 无帧错误检测 1: 字节收到不正确停止位级别 
Bit[3] UART 奇偶错误状态 0: 无奇偶错误检测 1: 字节收到奇偶错误 
Bit[2]  接收字节状态 0: 没有收到字节 1: 准备好接收字节 
Bit[1] 传送字节状态 0 字节没有被传送 1 写到数据缓存寄存器的最后字节被传送 
Bit[0] USART 传送/接收主动状态、在 SPI 从模式该位等于从模式选择 0: USART 空闲 1: 在传送或者接收模式USART 忙碌 

P2DIR (0xFF) – 端口 2 方向和端口 0 外设优先级控制
[7:6]外设优先级控制。当 PERCFG 分配给一些外设 到 相同引脚的时候,这些位将确定优先级。
详细优先级列表:
00:第1优先级:USART0第2优先级:USART1 第3优先级:定时器 1
01:第1优先级:USART1第2优先级:USART0 第3优先级:定时器 1
10:第1优先级:定时器1通道0-1第2优先级:USART1第3优先级:USART0第4优先级:定时器 1 通道 2 – 3
11 :第 1 优先级:定时器1通道 2-3第2优先级:USART0第3优先级:USART1第4优先级:定时器 1 通道 0 – 1
[5]  不使用
[4:0] P2 . 4 到 P2 . 0 的 I/O 方向 0 : 输入 1 : 输出

PERCFG (0xF1) – 外设控制
[7]  没有使用
[6]定 时器1的I/O位置0 :备用 位置 1 1 :备用 位置 2
[5]定 时器3的I/O位置0 :备用 位置 1 1 :备用 位置 2
[4]定 时器4的I/O位置0 :备用 位置 1 1 :备用 位置 2
[3:2] 没有使用
[1]USART1的I/O位置0备用位置1 1:备用位置2
[0]USART0的I/O位置0备用位置1 1:备用位置2

U0GCR (0xC5) – USART 0 通用控制
位 名称 复位 描述
[7]SPI 的时钟极性0:负时钟极性 1:正时钟极性
[6]SPI 时钟相位0:当SCK从CPOL倒置到CPOL时数据输出到MOSI,并且当SCK从CPOL倒置到 
CPOL 时数据输入抽样到 MISO 。1:当SCK从CPOL倒置到CPOL时数据输出到 MOSI 并且当 
SCK 从 CPO L倒置到 CPOL 时数据输入抽样到 MISO 。
[5] 传送位顺序 0 : LSB 先传送 1 : MSB 先传送
[4:0] BAUD_E[4:0] 波特率指数值。 BAUD_E 和 BAUD_M 决定了 UART 波特率 和 SPI 的主 SCK 时
钟频率。

U0BAUD (0xC2) – USART 0 波特率控制
[7:0]BAUD_M[7:0]波特率小数部分的值。BAUD_E和BAUD_M决定了UART的波特率和SPI的主SCK时钟频率。
注意:BAUD_E[4:0]和BAUD_M[7:0]决定波特率
表 16-1 32 MHz 系统时钟常用的波特率设置
波特率 ( b ps) UxBAUD.BAUD_M UxGCR.BAUD_E   误差 ( % )
2400                59          6            
0.14
4800                59          7            
0.14
9600                59         8
0.14
14400              216    
8 0.03
19200              59 9
0.14
28800 216 9
0.03
38400 59
10
0.14
57600 216
10
0.03
76800 59
11
0.14
115200 216
11
0.03
230400 216
12
0.03

时间: 2024-12-29 20:55:55

zigbee学习之串口通信的相关文章

51单片机之间的串口通信问题

问题描述 51单片机之间的串口通信问题 请问各位大虾,我要让两块51之间用串口进行通信,请问要怎么弄呢? 比如说我一块采集温度,将采集到的温度发送到另一块并在另一块显示出来,要怎么弄呢? 希望能详细点...谢谢... 解决方案 arm与51单片机之间串口通信实验arm与51单片机之间串口通信实验51单片机串口通信 解决方案二: 代码难得写,你找一下单片机多机通讯的书看看,硬件电路上两根串口线是交叉连接的.就是一个单片机tx连接另一个的rx 解决方案三: 网上也有详细的代码,方向给你说了,加油哦.

linux串口通信!求大神!急

问题描述 linux串口通信!求大神!急 我现在有一块7444的开发板,想实现7444通过串口传输命令给7444开发板上的另一模块cc2530(zigbee中的协调器),然后发送给给第三方开发板(只要当前cc2530能接收到命令就能直接发送数据到zigbee终端,以实现),然后终端zigbee模块的温度数据回传到7444开发板上的CC2530协调器,再从串扣回传给7445,已知我当前的串口设备文件是tty1,怎么编写C程序读取改开发板上cc2530传来的温度数据,和通过串口给cc2530发送命令

《单片机串口通信及测控应用实战详解》——6.3 PC端程序设计

6.3 PC端程序设计 单片机串口通信及测控应用实战详解 6.3.1 采用Visual Basic实现 1.程序界面设计 运行VB 6.0,创建标准的工程项目文件,设计程序窗体. (1)添加1个MSComm控件用于实现PC与单片机串口通信. (2)添加2个按钮控件CommandButton,用于输出指令和关闭程序. (3)添加3个文本控件TextBox,用于输入单片机地址.继电器状态和返回数据. (4)添加5个标签控件Label,用于显示文本框功能等. 2.属性设置 程序窗体.控件对象的主要属性

《单片机串口通信及测控应用实战详解》——导读

前言 单片机串口通信及测控应用实战详解 目前,许多单片机应用系统中,上.下位机分工明确,作为下位机核心器件的单片机一般只负责数据的采集和通信.采用单片机的控制系统或装置具有可靠性高.易于控制.系统设计灵活.编程简单.使用方便及性价比高等优点.但是,单片机也有不易显示各种实时图表/曲线和汉字.无良好的用户界面及不便于监控等缺点.而作为上位机的计算机通常以基于图形界面的Windows系统为操作平台,可以提供良好的人机界面,进行系统的监控和管理,进行程序编制.参数设定和修改.数据采集和保存等,既能保证

cpu-求大神,linux串口通信方面!!!7445CPU串口和CC2530通信验证

问题描述 求大神,linux串口通信方面!!!7445CPU串口和CC2530通信验证 我现在有一块7444的开发板,想实现7444通过串口传输命令给7444开发板上的另一模块cc2530(zigbee中的协调器),然后发送给给第三方开发板(只要当前cc2530能接收到命令就能直接发送数据到zigbee终端,以实现),然后终端zigbee模块的温度数据回传到7444开发板上的CC2530协调器,再从串扣回传给7445,已知我当前的串口设备文件是tty1,怎么编写C程序读取改开发板上cc2530传

C#串口通信和以太网通讯 实时采集下位机的电压、电流、温度等多路数据

问题描述 请教各位大神,我需要用vsc#,实时采集下位机的电压.电流.温度等多路数据,以便后续的界面开发.求教各位大神能不能用串口或以太网通讯实现?具体的学习内容和步骤是怎样的?不甚感激,万谢,万谢! 解决方案 解决方案二:实时采集下位机的电压.电流.温度等多路数据下位机有接口给你吗?或者会实时发送数据出来吗?解决方案三:谢谢您的回复.是的,下位机连有接口,我要怎么通过以太网通讯给下位机发读指令读取数据,实现实时采集?另外,请问学习IEC60870-5-101/104的侧重点在哪里?最好有以太网

串口通信-Java通过得到的Socket流向串口发送数据

问题描述 Java通过得到的Socket流向串口发送数据 我是一个菜鸟,最近学习Java ,写了个向串口发送数据的代码,有点问题,希望各位大神给指点指点 package server; import gnu.io.CommPortIdentifier; import gnu.io.PortInUseException; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventLis

如何在B/S架构的服务器端进行大数据量的串口通信, 并在客户端的浏览器上实时显示呢?(50分)

问题描述 现需开发一套B/S架构的软件系统,但在服务器端需要进行在数据量的串口通信,也就是说在服务器端需要通过串口向设备每秒就查询一次,由于设备较多,故数据量较大.并且要求,在客户端的浏览器上及时地显示最新的数据.想问:我如何架构这套软件系统呢?有人建议是串口通信及设备的管理使用VC编写成ActiveX控件或作成服务,然后在ASP中使用C#直接调用此ActiveX接口即可.这样可行吗?哪位能提供例子程序或告之哪里有例子程序吗?本人以前是C/C++程序员,对.net及网页这块不熟悉. 解决方案 解

求C#串口通信程度

问题描述 从设备采集显示数据,想采集作成cs结构的,显示作成bs结构的.cs结构做个串口通信的程序,从手持器中读数据.(手持器中数据从设备中采集),数据最终是要传进SQLServer中的,请问谁有类似的例子参考下?串口通信的程序想作成cs结构的,但是我显示数据的系统是bs结构的? 解决方案 解决方案二:上网查一个叫justinio的程序,但是那个程序有一个bug在调用SetCommState这个API之前,应该调用一下BuildCommDCB解决方案三:跟我们公司做的一样的东西哦.我手头现在没有