CC2530 实现无线串口
用CC2530實現無線串口可以說是最簡單的了,話不多說直接看代碼:
1.初始化
void RF_Init(void)
{
? FRMFILT0 ?=0x0C; ? ? ? ? ? ? ? ?//靜止接收過濾,即接收所有數據包 ? ??
? TXPOWER ? =0xD5; ? ? ? ? ? ? ? ?//發射功率為1dBm ?
? FREQCTRL ?=0x0B; ? ? ? ? ? ? ? ?//選擇通道11 ?
??
? CCACTRL0 ?=0xF8; ? ? ? ? ? ? ? ?//推薦值 smartRF軟件生成 ?
? FSCAL1 = ? 0x00; ? ? ? ? ? ? ? ? ?
? TXFILTCFG =0x09; ?
? AGCCTRL1 = 0x15; ?
? AGCCTRL2 = 0xFE; ? ? ? ?
? TXFILTCFG =0x09; ? ? ? ? ? ? ? ? ?
??
? RFIRQM0 |=(1<<6); ? ? ? ? ? ? ? //使能RF數據包接收中斷 ?
? IEN2 |=(1<<0); ? ? ? ? ? ? ? ? ?//使能RF中斷 ?
??
? RFST =0xED; ? ? ? ? ? ? ? ? ? ? //清除RF接收緩沖區 ISFLUSHRX ?
? RFST =0xE3; ? ? ? ? ? ? ? ? ? ? // RF接收使能 ISRXON
}
2.發送
void RF_Send(u8 *pbuf,int len) ?
{
? RFST =0xE3; ? ? ? ? ? ? ? ? ? ? // RF接收使能 ISRXON ?
? // 等待發送狀態不活躍并且沒有接收到SFD ?
? while( FSMSTAT1&((1<<1)|(1<<5))); ?
? ?
?RFIRQM0 &=~(1<<6); ? ? ? ? ? ? ?//禁止接收數據包中斷 ?
? IEN2 &=~(1<<0); ? ? ? ? ? ? ? ? //清除RF全局中斷 ?
? ?
? RFST =0xEE; ? ? ? ? ? ? ? ? ? ? //清除發送緩沖區 ISFLUSHTX ?
?RFIRQF1 =~(1<<1); ? ? ? ? ? ? ? //清除發送完成標志 ?
? ?
? // 填充緩沖區填充過程需要增加2字節,CRC校驗自動填充 ?
? RFD = len+2; ? ? ? ??
? for(int i=0; i< len; i++) ?
? { ?
? ? RFD=*pbuf++; ?
? } ?
? ?
? RFST =0xE9; ? ? ? ? ? ? ? ? ? ? //發送數據包 ISTXON ?
? while(!(RFIRQF1&(1<<1))); ? ? //等待發送完成 ?
?RFIRQF1 =~(1<<1); ? ? ? ? ? ? ? //清除發送完成標志位 ?
? ?
?RFIRQM0 |=(1<<6); ? ? ? ? ? ? ? // RX接收中斷 ?
? IEN2 |=(1<<0);
}
3.接收
#pragma vector=RF_VECTOR ?
__interrupt void rf_isr(void) ?
{
// ?EA =0;
? // 接收到一個完整的數據包 ?
? if(RFIRQF0&(1<<6)) ?
? {
? ? RF_RXLen=0;
? ??RF_RSSI=0;
??
? ? RF_RXLen = RFD-2; ? ? ? ? ? ? ? ? ? ? ? //第一次讀出為長度,去除兩字節附加結果(RSSI和CRC校驗結果)?
? ? RF_RXLen &=0x7F; ?
? ? for(int i=0; i< RF_RXLen; i++) ?
? ? {
? ? ? RF_RXBuf[i]= RFD; ? ? ? ? ? ? ? ? ? ? ?//連續讀取接收緩沖區內容 ?
? ? }
? ?
? ? RF_RSSI = RFD-73; ? ? ? ? ? ? ? ? ? ? ? ? ? //讀取RSSI結果 ??
? ?
? ? RFST = 0xED; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //清除接收緩沖區 ?
??
? ? if(RFD&0x80) ? ? ? ? ? ? ? ? //判斷CRC校驗是否正確
? ? {
? ? ? printf("GET DATA:%d\n",RF_RXLen);
? ? }
? ? else
? ? {
? ? ? printf("CRC Error!\n");
? ? }
? ??
? ? S1CON =0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//清除RF中斷標志 ?
? ? RFIRQF0 &=~(1<<6); ? ? ? ? ? ? ? ? ? ? ? ?//清除RF接收完成數據包中斷 ?
? }
// ?EA =1; ?
}?
4.注
2530無線串口缺陷在于一次性發送的字節數不多,我實測是23Byte,這樣傳輸速度肯定就上不去,然后傳輸大的數據量的話也麻煩!
需要示例代碼可郵件:X_Q_Wei@163.com
總結
以上是生活随笔為你收集整理的CC2530 实现无线串口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 破解WEP加密
- 下一篇: 视频流媒体直播系统---------Br