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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值