专业微网站制作门户网站建设信息工作讲话
文章目录
- 1.串行通信接口简述
 - 2.串行通信接口寄存器
 - U0CSR (0x86) -USART 0 控制和状态
 - U0UCR (0xC4)–USART 0 UART 控制
 - U0GCR (0xC5)–USART 0 通用控制
 - U0BUF (0xC1) – USART 0 接收/传送数据缓存
 - U0BAUD (0xC2) – USART 0 波特率控制
 
- 3.设置串行通信接口比特率控制寄存器
 - 4.外设I/O引脚映射
 - PxSEL功能引脚配置
 
- 5.USART0 demo
 
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 charvoid 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;         // 设置系统主时钟频率为32MHzPERCFG = 0x00;              // USART0 使用位置1 P0_2 P0_3口P0SEL = 0x3C;               // P0_2 P0_3 P0_4 P0_5用作串口U0CSR |= 0x80;			  // UART模式U0GCR |= 8;                 // 波特率 9600U0BAUD |= 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);}}
 
在串口调试助手上可以看到串口打印信息
 
