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);
  }
  
}

在串口调试助手上可以看到串口打印信息
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GenCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值