《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 如何實(shí)現(xiàn)PC機(jī)與CC2430之間的串口通信
如何實(shí)現(xiàn)PC機(jī)與CC2430之間的串口通信
摘要: 在無線傳感網(wǎng)絡(luò)中,CC2430需要將采集到的數(shù)據(jù)發(fā)送給上位機(jī)(即PC)處理,同時(shí)上位機(jī)需要向CC2430發(fā)送控制信息。這一切都離不開兩者之間的信息傳遞。這一節(jié),我們就來學(xué)習(xí)如何實(shí)現(xiàn)PC機(jī)與CC2430之間的串口通信。
Abstract:
Key words :

  一、承上啟下

  在無線傳感網(wǎng)絡(luò)中,CC2430需要將采集到的數(shù)據(jù)發(fā)送給上位機(jī)(即PC)處理,同時(shí)上位機(jī)需要向CC2430發(fā)送控制信息。這一切都離不開兩者之間的信息傳遞。這一節(jié),我們就來學(xué)習(xí)如何實(shí)現(xiàn)PC機(jī)與CC2430之間的串口通信

  CC2430包括2個(gè)串行通信接口 USART0 與 USART1,每個(gè)串口包括兩個(gè)模式:UART(異步)模式、SPI(同步)模式,本節(jié)僅涉及UART模式)。

  二、串口通信實(shí)驗(yàn)

  (1)實(shí)驗(yàn)簡(jiǎn)介

  實(shí)現(xiàn)開發(fā)板與PC機(jī)的通信:PC向CC2430發(fā)送某一字符串,CC2430收到后返回此此字符串給PC。

  (2)實(shí)驗(yàn)準(zhǔn)備

  開始編寫代碼之前,需要搭建好硬件設(shè)施:正確連線 + 安裝USB轉(zhuǎn)串的驅(qū)動(dòng)。

  硬件連線需要兩條:

  CC2430開發(fā)板的JTAG口 → 調(diào)試器 → PC的USB口(用于程序的調(diào)試、下載)

  CC2430開發(fā)板的串口 → PC的USB口(用于PC與CC2430的數(shù)據(jù)通信)

  然后需要安裝USB轉(zhuǎn)串口的驅(qū)動(dòng)(下載地址)

  為了向串口發(fā)送數(shù)據(jù),還需要一個(gè)串口調(diào)試工具(下載地址)。

  (3)程序流程圖

  (4)實(shí)驗(yàn)源碼及剖析

/*

  實(shí)驗(yàn)說明:UART0,波特率115200bps,PC機(jī)向CC2430送字符串(以@字符結(jié)束),CC2430收到后返回該字符串

*/

#include

unsigned char recv_buf[300] = {0};

unsigned char recv_count = 0;

/*系統(tǒng)時(shí)鐘初始化

-------------------------------------------------------*/

void xtal_init(void)

{

  SLEEP &= ~0x04;             //都上電

  while(!(SLEEP & 0x40));     //晶體振蕩器開啟且穩(wěn)定

  CLKCON &= ~0x47;            //選擇32MHz 晶體振蕩器

  SLEEP |= 0x04;

}

/*UART0通信初始化

-------------------------------------------------------*/

void Uart0Init(unsigned char StopBits,unsigned char Parity)

{

   PERCFG&= ~0x01;                  //選擇UART0為可選位置一,即RXD接P0.2,TXD接P0.3

   P0SEL |=  0x0C;                  //初始化UART0端口,設(shè)置P0.2與P0.3為外部設(shè)備IO口

   U0CSR = 0xC0;                    //設(shè)置為UART模式,并使能接收器

 

   U0GCR = 216;

   U0BAUD = 11;                     //設(shè)置UART0波特率為115200bps,至于為何是216和11,可查閱CC2430中文手冊(cè)

 

   U0UCR |= StopBits|Parity;        //設(shè)置停止位與奇偶校驗(yàn)

}

/*UART0發(fā)送數(shù)據(jù)

-------------------------------------------------------*/

void  Uart0Send(unsigned char data)

{

  while(U0CSR&0x01);    //等待UART空閑時(shí)發(fā)送數(shù)據(jù)

  U0DBUF = data;

}

/*UART0發(fā)送字符串

-------------------------------------------------------*/

void Uart0SendString(unsigned char *s)

{

  while(*s != 0)         //依次發(fā)送字符串s中的每個(gè)字符

    Uart0Send(*s++);

}

/*UART0接受數(shù)據(jù)

-------------------------------------------------------*/

unsigned char Uart0Receive(void)

{

  unsigned char data;

  while(!(U0CSR&0x04)); //查詢是否收到數(shù)據(jù),否則繼續(xù)等待

  data=U0DBUF;          //提取接收到的數(shù)據(jù)

  return data;        

}

/*主函數(shù)

-------------------------------------------------------*/

void main(void)

{

  unsigned char i,b;

 

  xtal_init();

  Uart0Init(0x00,0x00);  //初始化UART0,設(shè)置1個(gè)停止位,無奇偶校驗(yàn)

  Uart0SendString("Please Input string ended with '@'!\r\n");

  recv_count = 0;

 

  while(1)

  {

    while(1)                         

    {

      b = Uart0Receive();UART

      if(b=='@')break;                 //若接收到'@',則跳出循環(huán),輸出字符串

      recv_buf[recv_count] = b;        //若不是'@',則繼續(xù)向字符數(shù)組recv_buf[]添加字符

      recv_count++;

    }

    for(i=0; i

      Uart0Send(recv_buf[i]);

  

    Uart0SendString("\n");

    recv_count =0;                     //重置

  }

}

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 国产欧美日韩精品高清二区综合区 | 日韩永久在线观看免费视频 | 亚洲国产三级在线观看 | 国产成人夜间影院在线观看 | 韩国一级毛片视频 | 久久国产国内精品对话对白 | 美女色黄网站 | 中文字幕精品在线 | 国产成人手机视频 | 欧美一区三区 | 国产成人免费a在线资源 | 国产自偷自拍 | 亚洲高清一区二区三区久久 | 福利片成人午夜在线 | 精品国产免费第一区二区三区日韩 | 国产精品欧美日韩 | 欧美一级三级 | 在线观看免费视频国产 | 久久中文字幕久久久久91 | 亚洲精品成人a在线观看 | 男女乱淫真视频免费一级毛片 | 国产成人aaa在线视频免费观看 | 日本高清aⅴ毛片免费 | www射射一区| 99久久精品国产9999高清 | 国产高清一级视频在线观看 | 黄色片三级网站 | 99精品久久精品一区二区 | 国产精品视频九九九 | 久久精品国产精品亚洲毛片 | 全部免费国产潢色一级 | 免费高清一级欧美片在线观看 | 绝对真实偷拍盗摄高清在线视频 | 天天精品在线 | 美女毛片免费 | 网站三级| 国产午夜永久福利视频在线观看 | 日本欧美不卡一区二区三区在线 | 精品视频在线播放 | 手机看片日本 | 成年人黄色网址 |