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控制与按键检测(输入/输出)

ZigBee案例笔记 -- LED控制与按键检测(输入/输出)

基于CC2530(ZigBee设计)的温度报警器

自制zigbee网关接入Homeassistant笔记

zigbee 学习笔记

CC2530 ZigBee自组网模块