合肥的網(wǎng)站建設(shè)州世界500強(qiáng)企業(yè)名單
文章目錄
- 1.串行通信接口簡(jiǎn)述
- 2.串行通信接口寄存器
- U0CSR (0x86) -USART 0 控制和狀態(tài)
- U0UCR (0xC4)–USART 0 UART 控制
- U0GCR (0xC5)–USART 0 通用控制
- U0BUF (0xC1) – USART 0 接收/傳送數(shù)據(jù)緩存
- U0BAUD (0xC2) – USART 0 波特率控制
- 3.設(shè)置串行通信接口比特率控制寄存器
- 4.外設(shè)I/O引腳映射
- PxSEL功能引腳配置
- 5.USART0 demo
1.串行通信接口簡(jiǎn)述
在CC2530內(nèi)部有2組串口USART0和USART1,它們都能分別運(yùn)行于異步模式(UART)或者同步模式(SPI),在寄存器UxCSR的MODE配置為1時(shí)作為UART模式,其中UxCSR的x為0或1,兩個(gè)USART具有同樣的功能。在UART模式中,可以使用雙線連接方式(引腳RXD+TXD)或四線連接方式(引腳RXD+TXD+RTS+CTS),其中RTS和CTS用于硬件流量控制。
UART模式具有以下特點(diǎn):
- 8位或9位負(fù)載數(shù)據(jù)
- 奇校驗(yàn)、偶校驗(yàn)或者無(wú)奇偶校驗(yàn)
- 配置起始位和停止位電平
- 配置LSB或者M(jìn)SB首先傳送
- 獨(dú)立收發(fā)中斷
- 獨(dú)立收發(fā)DMA觸發(fā)
- 奇偶校驗(yàn)和幀校驗(yàn)出錯(cuò)狀態(tài)
2.串行通信接口寄存器
對(duì)于每個(gè)USART(USART0/USART1),有5個(gè)相關(guān)寄存器 (x是USART的編號(hào),為0或1):
- UxCSR:USARTx 控制和狀態(tài)
- UxUCR:USARTx UART 控制
- UxGCR:USARTx 通用控制
- UxBUF:USART x 接收/發(fā)送數(shù)據(jù)緩沖
- UxBAUD:USART x 波特率控制
U0CSR (0x86) -USART 0 控制和狀態(tài)
U0UCR (0xC4)–USART 0 UART 控制
U0GCR (0xC5)–USART 0 通用控制
U0BUF (0xC1) – USART 0 接收/傳送數(shù)據(jù)緩存
U0BAUD (0xC2) – USART 0 波特率控制
3.設(shè)置串行通信接口比特率控制寄存器
在UART模式時(shí),內(nèi)部波特率發(fā)生器的波特率設(shè)置由寄存器UxBAUD.BAUD_M[7:0]和UxGCR.BAUD_E[4:0]來(lái)定義波特率
4.外設(shè)I/O引腳映射
看芯片手冊(cè)知道USART0的SPI模式和UART模式除了可以配置P0端口外還可以映射在P1端口,USART2亦是如此
配置PERCFG寄存器可以選擇USART0、USART1和定時(shí)器使用的I/O位置
PxSEL功能引腳配置
在LED控制與按鍵檢測(cè)(輸入/輸出)一篇中有提到 PxSEL 這個(gè)端口功能選擇寄存器,將引腳配置為普通I/O或是外設(shè)功能,用作USART時(shí)需要將對(duì)應(yīng)引腳的位置1
5.USART0 demo
CC2530通過(guò)串口0不斷向PC串口發(fā)送字符串“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; // 設(shè)置系統(tǒng)時(shí)鐘源為32MHz晶振while(CLKCONSTA & 0x40); // 等待晶振穩(wěn)定CLKCONCMD &= ~0x47; // 設(shè)置系統(tǒng)主時(shí)鐘頻率為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中斷標(biāo)志初始置位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);}}
在串口調(diào)試助手上可以看到串口打印信息