一、串口協議介紹
串口傳輸協議是嵌入式開發里比較常見的傳輸協議,開發階段用的最多的方式就是將MCU的調試信息打印到PC機串口終端顯示,方便調試錯誤。
一般傳輸協議分為兩種: 并口和串口。
并口傳輸協議:指數據的各位同時發送或接收,每個數據位使用單獨的一條導線。傳輸速度快、效率高,但需要的數據線較多,成本高。
串口傳輸協議:指數據一位接一位地順 序發送或接收。需要的數據線少,成本低,但傳輸速度慢,效率低。
CC2530一共有兩個串口通信接口,分別是USART0和USART1,它們能夠配置成異步UART模式或者同步SPI模式。
兩個USART接口具有相同的功能,通過PERCFG寄存器可以設置兩個USART接口對應外部I/O引腳的映射關系:
位置1:RX0 --- P0_2 TX0 --- P0_3 RX1 --- P0_5 TX1 --- P0_4
位置2:RX0 --- P1_4 TX0 --- P1_5 RX1 --- P1_7 TX1 --- P1_6
復制代碼
<1> UxCSR: USARTx的控制和狀態寄存器。
<2> UxUCR: USARTx的UART控制寄存器。
<3> UxGCR: USARTx的通用控制寄存器。
<4> UxDBUF:USARTx的接收/發送數據緩沖寄存器。
<4> UxBAUD:USARTx的波特率控制寄存器。
復制代碼
在與PC機進行串口通信的時候是,通常需要借助USB轉TTL芯片進行電壓轉換。 所以,在學習串口編程之前,先認識兩種電平:TTL電平和RS232電平
TTL電平: 邏輯0----小于0.8V 邏輯1----大于2.4V。
RS232電平: 邏輯0----5~15V 邏輯1---- -5~-15V。
復制代碼
串口通信過程中,速度的指標由波特率表示。
常見的波特率設置表如下:

計算波特率的方法: CC2530的波特率由BAUD_E和BAUD_M共同決定:

二、原理圖數據手冊分析





三、串口配置代碼示例
3.1編寫串口初始化函數,實現串口字符串發送 (CPU頻率在16MHZ下,波特率的為9600)
#include
#include
//定義LED燈的端口
#define LED1 P1_2
#define LED2 P1_3
//定義KEY按鍵的端口
#define KEY1 P1_0 //定義按鍵為P1_0口控制
#define KEY2 P1_1 //定義按鍵為P1_1口控制
/*
函數功能:LED燈IO口初始化
硬件連接:LED1-->P1_2 , LED2-->P1_3
*/
void LED_Init(void)
{
P1DIR |=0x3<<2; //配置P1_2、P1_3為輸出模式
LED1 = 1;
LED2 = 1;
}
/*
函數功能:按鍵IO口初始化
硬件連接:KEY1-->P1_0 KEY2-->P1_1
*/
void KEY_Init(void)
{
P1SEL&=~(0x3<<0); //配置P1_0,P1_1處于通用GPIO口模式
P1DIR&=~(0x3<<0); //配置P1_0,P1_1為輸入模式
P1INP|= 0x3<<0; //上拉
}
void delay10ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=193;c>0;c--)
for(b=118;b>0;b--)
for(a=2;a>0;a--);
}
/*
函數功能:按鍵掃描
返 回 值:按下的按鍵值
*/
unsigned char Key_Scan(void)
{
static unsigned char stat=1;
if((KEY1==0||KEY2==0)&&stat)
{
stat=0;
delay10ms();
if(KEY1==0)return 1;
if(KEY2==0)return 2;
}
else
{
if(KEY1&&KEY2)stat=1;
}
return 0;
}
/*
函數功能:串口0初始化
*/
void Init_Uart0(void)
{
PERCFG&=~(1<<0); //串口0的引腳映射到位置1,即P0_2和P0_3
P0SEL|=0x3<<2; //將P0_2和P0_3端口設置成外設功能
U0BAUD = 59; //16MHz的系統時鐘產生9600BPS的波特率
U0GCR&=~(0x1F<<0);//清空波特率指數
U0GCR|=9<<0; //配置波特率的指數值
U0UCR |= 0x80; //禁止流控,8位數據,清除緩沖器
U0CSR |= 0x3<<6; //選擇UART模式,使能接收器
}
/*
函數功能:UART0發送字符串函數
*/
void UR0SendString(char *str,unsigned int len)
{
int j;
for(j=0;j;j++)>
3.2 編寫串口初始化函數,實現串口字符串發送 (CPU頻率在16MHZ下,波特率為115200)
#include
#include
//定義LED燈的端口
#define LED1 P1_2
#define LED2 P1_3
//定義KEY按鍵的端口
#define KEY1 P1_0 //定義按鍵為P1_0口控制
#define KEY2 P1_1 //定義按鍵為P1_1口控制
/*
函數功能:LED燈IO口初始化
硬件連接:LED1-->P1_2 , LED2-->P1_3
*/
void LED_Init(void)
{
P1DIR |=0x3<<2; //配置P1_2、P1_3為輸出模式
LED1 = 1;
LED2 = 1;
}
/*
函數功能:按鍵IO口初始化
硬件連接:KEY1-->P1_0 KEY2-->P1_1
*/
void KEY_Init(void)
{
P1SEL&=~(0x3<<0); //配置P1_0,P1_1處于通用GPIO口模式
P1DIR&=~(0x3<<0); //配置P1_0,P1_1為輸入模式
P1INP|= 0x3<<0; //上拉
}
void delay10ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=193;c>0;c--)
for(b=118;b>0;b--)
for(a=2;a>0;a--);
}
/*
函數功能:按鍵掃描
返 回 值:按下的按鍵值
*/
unsigned char Key_Scan(void)
{
static unsigned char stat=1;
if((KEY1==0||KEY2==0)&&stat)
{
stat=0;
delay10ms();
if(KEY1==0)return 1;
if(KEY2==0)return 2;
}
else
{
if(KEY1&&KEY2)stat=1;
}
return 0;
}
/*
函數功能:串口0初始化
*/
void Init_Uart0(void)
{
PERCFG&=~(1<<0); //串口0的引腳映射到位置1,即P0_2和P0_3
P0SEL|=0x3<<2; //將P0_2和P0_3端口設置成外設功能
U0BAUD = 216; //16MHz的系統時鐘產生115200BPS的波特率
U0GCR&=~(0x1F<<0);//清空波特率指數
U0GCR|=12<<0; //16MHz的系統時鐘產生115200BPS的波特率
U0UCR |= 0x80; //禁止流控,8位數據,清除緩沖器
U0CSR |= 0x3<<6; //選擇UART模式,使能接收器
}
/*
函數功能:UART0發送字符串函數
*/
void UR0SendString(char *str,unsigned int len)
{
int j;
for(j=0;j;j++)>
3.3 配置串口中斷接收數據
3.3 配置串口中斷接收數據
#include
#include
//定義LED燈的端口
#define LED1 P1_2
#define LED2 P1_3
//定義KEY按鍵的端口
#define KEY1 P1_0 //定義按鍵為P1_0口控制
#define KEY2 P1_1 //定義按鍵為P1_1口控制
unsigned char dataRecv;
unsigned char Flag = 0;
/*
函數功能:LED燈IO口初始化
硬件連接:LED1-->P1_2 , LED2-->P1_3
*/
void LED_Init(void)
{
P1DIR |=0x3<<2; //配置P1_2、P1_3為輸出模式
LED1 = 1;
LED2 = 1;
}
/*
函數功能:按鍵IO口初始化
硬件連接:KEY1-->P1_0 KEY2-->P1_1
*/
void KEY_Init(void)
{
P1SEL&=~(0x3<<0); //配置P1_0,P1_1處于通用GPIO口模式
P1DIR&=~(0x3<<0); //配置P1_0,P1_1為輸入模式
P1INP|= 0x3<<0; //上拉
}
void delay10ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=193;c>0;c--)
for(b=118;b>0;b--)
for(a=2;a>0;a--);
}
/*
函數功能:按鍵掃描
返 回 值:按下的按鍵值
*/
unsigned char Key_Scan(void)
{
static unsigned char stat=1;
if((KEY1==0||KEY2==0)&&stat)
{
stat=0;
delay10ms();
if(KEY1==0)return 1;
if(KEY2==0)return 2;
}
else
{
if(KEY1&&KEY2)stat=1;
}
return 0;
}
/*
函數功能:串口0初始化
*/
void Init_Uart0(void)
{
PERCFG&=~(1<<0); //串口0的引腳映射到位置1,即P0_2和P0_3
P0SEL|=0x3<<2; //將P0_2和P0_3端口設置成外設功能
U0BAUD = 216; //16MHz的系統時鐘產生115200BPS的波特率
U0GCR&=~(0x1F<<0);//清空波特率指數
U0GCR|=12<<0; //16MHz的系統時鐘產生115200BPS的波特率
U0UCR |= 0x80; //禁止流控,8位數據,清除緩沖器
U0CSR |= 0x3<<6; //選擇UART模式,使能接收器
UTX0IF = 0; //清除TX發送中斷標志
URX0IF = 0; //清除RX接收中斷標志
URX0IE = 1; //使能URAT0的接收中斷
EA = 1; //使能總中斷
}
/*
函數功能:UART0發送字符串函數
*/
void UR0SendString(char *str,unsigned int len)
{
int j;
for(j=0;j;j++)>
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
串口
+關注
關注
15文章
1619瀏覽量
82811 -
傳輸協議
+關注
關注
0文章
80瀏覽量
11950 -
CC2530
+關注
關注
19文章
222瀏覽量
60125
發布評論請先 登錄
相關推薦
熱點推薦
cc2530芯片有哪些功能
CC2530是專門針對IEEE 802.15.4和Zigbee應用的單芯片解決方案,經濟且低功耗。 CC2530有四種不同的版本:CC2530-F32 / 64 / 128 / 256
發表于 11-08 11:05
?2.4w次閱讀
cc2530程序設計實例之CC2530 RF部分使用—實現點對點收發
本文主要介紹了cc2530程序設計實例之CC2530 RF部分使用—實現點對點收發,通過串口調試助手發送字節數據。例如通過串口向設備A發送H
發表于 12-09 12:22
?2.3w次閱讀
基于CC2530的ZigBee協調器節點設計
本文給出了基于TI新一代芯片CC2530的ZigBee協調器節點設計方法,該方法選用TICC2591作為射頻前端芯片。
發表于 01-05 15:25
?5w次閱讀
CC2530芯片的基本特性和CC2530無線模塊的設計
本文介紹了CC2530芯片的基本特性,論述了以CC2530芯片為核心的無線通信模塊的硬件設計和調試軟件設計,在介紹設計規范和模塊結構的基礎上,采用TI公司的CC2530芯片作為主控制芯片設計出具
發表于 02-11 08:00
?101次下載
如何使用ZigBee TI ZStack CC2530 2.5搭建開發環境
本文檔的主要內容詳細介紹的是如何使用ZigBee TI ZStack CC2530 2.5搭建開發環境。
發表于 05-10 18:14
?31次下載
微雪電子ZIGBEE開發板 CC2530 Eval Kit簡介
ZigBee CC2530 串口透傳 開發套件 物聯網套件 板載電池插槽 支持多種供電方式 引出所有IO 方便用戶功能擴展 板載一個CP2102 方便調試下載 型號
微雪電子ZIGBEE開發板 CC2530 Eval Kit5簡介
ZigBee CC2530 串口透傳 開發套件 XBEE 物聯網套件 直插接口兼容Xbee 支持自動組網 支持板載PCB天線及IPEX外接天線 型號
CC2530(zigbee)入門開發: 安裝IAR開發環境
CC2530本身是一個51單片機內核,開發過51的搞起來非常容易,也就是多了一個無線射頻部分;如果不使用無線射頻功能,那么就和一個正常的51單片機一樣。要進行CC2530的軟件開發,需
CC2530(zigbee)入門開發: 串口收發配置
評論