ZigBee案例笔记 - USART
Posted GenCoder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZigBee案例笔记 - USART相关的知识,希望对你有一定的参考价值。
文章目录
1.串行通信接口简述
在CC2530内部有2组串口USART0和USART1,它们都能分别运行于异步模式(UART)或者同步模式(SPI),在寄存器UxCSR的MODE配置为1时作为UART模式,其中UxCSR的x为0或1,两个USART具有同样的功能。在UART模式中,可以使用双线连接方式(引脚RXD+TXD)或四线连接方式(引脚RXD+TXD+RTS+CTS),其中RTS和CTS用于硬件流量控制。
UART模式具有以下特点:
- 8位或9位负载数据
- 奇校验、偶校验或者无奇偶校验
- 配置起始位和停止位电平
- 配置LSB或者MSB首先传送
- 独立收发中断
- 独立收发DMA触发
- 奇偶校验和帧校验出错状态
2.串行通信接口寄存器
对于每个USART(USART0/USART1),有5个相关寄存器 (x是USART的编号,为0或1):
- UxCSR:USARTx 控制和状态
- UxUCR:USARTx UART 控制
- UxGCR:USARTx 通用控制
- UxBUF:USART x 接收/发送数据缓冲
- UxBAUD:USART x 波特率控制
U0CSR (0x86) -USART 0 控制和状态
U0UCR (0xC4)–USART 0 UART 控制
U0GCR (0xC5)–USART 0 通用控制
U0BUF (0xC1) – USART 0 接收/传送数据缓存
U0BAUD (0xC2) – USART 0 波特率控制
3.设置串行通信接口比特率控制寄存器
在UART模式时,内部波特率发生器的波特率设置由寄存器UxBAUD.BAUD_M[7:0]和UxGCR.BAUD_E[4:0]来定义波特率
4.外设I/O引脚映射
看芯片手册知道USART0的SPI模式和UART模式除了可以配置P0端口外还可以映射在P1端口,USART2亦是如此
配置PERCFG寄存器可以选择USART0、USART1和定时器使用的I/O位置
PxSEL功能引脚配置
在LED控制与按键检测(输入/输出)一篇中有提到 PxSEL 这个端口功能选择寄存器,将引脚配置为普通I/O或是外设功能,用作USART时需要将对应引脚的位置1
5.USART0 demo
CC2530通过串口0不断向PC串口发送字符串“Hello World”并换行显示
#include <ioCC2530.h>
#define uint unsigned int
#define uint8 unsigned char
void delayUs(uint n)
while(n--)
asm("NOP");
asm("NOP");
asm("NOP");
void delayMs(uint n)
while(n--)
delayUs(1000);
void initUART(void)
CLKCONCMD &= ~0x40; // 设置系统时钟源为32MHz晶振
while(CLKCONSTA & 0x40); // 等待晶振稳定
CLKCONCMD &= ~0x47; // 设置系统主时钟频率为32MHz
PERCFG = 0x00; // USART0 使用位置1 P0_2 P0_3口
P0SEL = 0x3C; // P0_2 P0_3 P0_4 P0_5用作串口
U0CSR |= 0x80; // UART模式
U0GCR |= 8; // 波特率 9600
U0BAUD |= 59;
UTX0IF = 0; // UART0 TX中断标志初始置位0
void UART_Send_String(char *Data,int len)
uint8 j;
for(j=0;j<len;j++)
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
void main(void)
char SendStr[] = "Hello World\\r\\n";
initUART();
while(1)
UART_Send_String(SendStr,sizeof(SendStr));
delayMs(500);
在串口调试助手上可以看到串口打印信息
以上是关于ZigBee案例笔记 - USART的主要内容,如果未能解决你的问题,请参考以下文章
ZigBee案例笔记 -- LED控制与按键检测(输入/输出)