在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模式具有以下特点:
对于每个USART(USART0/USART1),有5个相关寄存器 (x是USART的编号,为0或1):
在UART模式时,内部波特率发生器的波特率设置由寄存器UxBAUD.BAUD_M[7:0]和UxGCR.BAUD_E[4:0]来定义波特率
看芯片手册知道USART0的SPI模式和UART模式除了可以配置P0端口外还可以映射在P1端口,USART2亦是如此
配置PERCFG寄存器可以选择USART0、USART1和定时器使用的I/O位置
在LED控制与按键检测(输入/输出)一篇中有提到 PxSEL 这个端口功能选择寄存器,将引脚配置为普通I/O或是外设功能,用作USART时需要将对应引脚的位置1
CC2530通过串口0不断向PC串口发送字符串“Hello World”并换行显示
#include #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;jU0DBUF = *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);}}
在串口调试助手上可以看到串口打印信息
上一篇:C/C++路径去除前缀
下一篇:new bing的申请与使用教程