网站关键词推广企业,定制网站建设需要多少钱,网站建设公司生存现状,字体logo设计在线生成器文章目录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…
文章目录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 demo1.串行通信接口简述
在CC2530内部有2组串口USART0和USART1它们都能分别运行于异步模式UART或者同步模式SPI在寄存器UxCSR的MODE配置为1时作为UART模式其中UxCSR的x为0或1两个USART具有同样的功能。在UART模式中可以使用双线连接方式引脚RXDTXD或四线连接方式引脚RXDTXDRTSCTS其中RTS和CTS用于硬件流量控制。 UART模式具有以下特点
8位或9位负载数据奇校验、偶校验或者无奇偶校验配置起始位和停止位电平配置LSB或者MSB首先传送独立收发中断独立收发DMA触发奇偶校验和帧校验出错状态
2.串行通信接口寄存器
对于每个USARTUSART0/USART1有5个相关寄存器 x是USART的编号为0或1
UxCSRUSARTx 控制和状态UxUCRUSARTx UART 控制UxGCRUSARTx 通用控制UxBUFUSART x 接收/发送数据缓冲UxBAUDUSART 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(j0;jlen;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);}}在串口调试助手上可以看到串口打印信息