標(biāo)題:
STM32開發(fā)SI4432發(fā)送和接受程序
[打印本頁]
作者:
huadldl
時(shí)間:
2017-7-4 16:03
標(biāo)題:
STM32開發(fā)SI4432發(fā)送和接受程序
STM32開發(fā)SI4432
0.png
(34.91 KB, 下載次數(shù): 110)
下載附件
2017-7-4 22:59 上傳
單片機(jī)源程序如下(發(fā)送):
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "spi.h"
// 0321 注意1:SPI 空閑時(shí)為低電平,第二跳邊沿生效 //注意2:SDN直接接DGND算了
// 注意3:SI4432和STM32要用同一個(gè)VCC3.3否則的話收到全為0
#define SI4432_NSEL PAout(4) //SI4432_NSEL 使能
#define SI4432_SDN PCout(4) //SI4432_SDN 使能
#define SI4432_NIRQ PCin(5) //SI4432_NIRQ 中斷狀態(tài)
void SI4432_Init(void) ;
u8 SI4432_ReadReg(u8 addr) ;
void SI4432_WriteReg(u8 addr, u8 value) ;
u8 i;
u8 SI4432_RxBUFF[100];
u8 SI4432_RxCount,SI4432_RxLenth;
u8 ItStatus1,ItStatus2,res;
int main(void)
{
delay_init(); //延時(shí)函數(shù)初始化
NVIC_Configuration(); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
uart_init(9600); //串口初始化為9600
LED_Init(); //LED端口初始化
SPI1_Init();
GPIO_SET();
SI4432_NSEL=0;
delay_ms(600);
res = SI4432_ReadReg(0x00);
delay_ms(20); printf("res =%02x \n",(unsigned short)res );
res = SI4432_ReadReg(0x01);
delay_ms(20); printf("res =%02x \n",(unsigned short)res );
res = SI4432_ReadReg(0x02);
delay_ms(20); printf("res =%02x \n",(unsigned short)res );
delay_ms(1000);
//讀取中斷狀態(tài) 清除中斷 釋放 SI4432_NIRQ
ItStatus1 = SI4432_ReadReg(0x03);
ItStatus2 = SI4432_ReadReg(0x04);
//軟件復(fù)位
SI4432_WriteReg(0x07, 0x80); //向0X07地址 寫入0X80 軟件復(fù)位
while ( SI4432_NIRQ == 1);
//讀取中斷狀態(tài) 清除中斷 釋放 SI4432_NIRQ
ItStatus1 = SI4432_ReadReg(0x03);
ItStatus2 = SI4432_ReadReg(0x04);
/////////////////////////開始設(shè)置
// 頻率設(shè)置 434
SI4432_WriteReg(0x75, 0x53);
SI4432_WriteReg(0x76, 0x64); //
SI4432_WriteReg(0x77, 0x00);
// 1.2K bps 發(fā)射速率
SI4432_WriteReg(0x2a, 0x14);
SI4432_WriteReg(0x6e, 0x09);
SI4432_WriteReg(0x6f, 0xd5);
SI4432_WriteReg(0x70, 0x2c);//
//SpiWriteRegister(0x72, 0x48); //(9.6kbps)
SI4432_WriteReg(0x72, 0x38); //頻率偏差(1.2kbps)
// 下面的設(shè)置根據(jù)Silabs 的Excel (9.6 kbps, deviation: 45 kHz, channel filter BW: 102.2 kHz
SI4432_WriteReg(0x1C, 0x1b); //write 0x1E to the IF Filter Bandwidth register
SI4432_WriteReg(0x20, 0x83); //write 0xD0 to the Clock Recovery Oversampling Ratio register
SI4432_WriteReg(0x21, 0xc0); //write 0x00 to the Clock Recovery Offset 2 register
SI4432_WriteReg(0x22, 0x13); //write 0x9D to the Clock Recovery Offset 1 register
SI4432_WriteReg(0x23, 0xa9); //write 0x49 to the Clock Recovery Offset 0 register
SI4432_WriteReg(0x24, 0x00); //write 0x00 to the Clock Recovery Timing Loop Gain 1 register
SI4432_WriteReg(0x25, 0x03); //write 0x24 to the Clock Recovery Timing Loop Gain 0 register
SI4432_WriteReg(0x1D, 0x40); //write 0x40 to the AFC Loop Gearshift Override register
SI4432_WriteReg(0x1E, 0x0A); //write 0x0A to the AFC Timing Control register
SI4432_WriteReg(0x2A, 0x14); //write 0x20 to the AFC Limiter register
//前導(dǎo)碼 同步字
SI4432_WriteReg(0x34, 0X0A); // 發(fā)射5字節(jié)的Preamble
SI4432_WriteReg(0x35, 0x2A); // 需要檢測(cè) Preamble
SI4432_WriteReg(0x33, 0x02);// 同步字3,2 是同步字
SI4432_WriteReg(0x36, 0x2d); // 同步字為 0x2dd4
SI4432_WriteReg(0x37, 0xd4);
SI4432_WriteReg(0x30, 0x8D); // 使能PH+ FIFO模式,高位在前面,使能CRC校驗(yàn) CCITTT
SI4432_WriteReg(0x32, 0x00 );// 禁止幀頭
SI4432_WriteReg(0x71, 0x63); // 發(fā)射不需要 CLK,F(xiàn)iFo , FSK模式
//GPIO
SI4432_WriteReg(0x0b, 0x12); //
SI4432_WriteReg(0x0c, 0x15); //
//其他設(shè)置
SI4432_WriteReg(0x09, 0xD7); // 負(fù)載電容
SI4432_WriteReg(0x69, 0x60); //AGC過載
//發(fā)射功率
SI4432_WriteReg(0x6d, 0x1e);
//手動(dòng)打開接收
SI4432_WriteReg(0x07, 0x05);
//打開 接收中斷
SI4432_WriteReg(0x05, 0x03);
SI4432_WriteReg(0x06, 0x00);
//清中斷
ItStatus1 = SI4432_ReadReg(0x03); //read the Interrupt Status1 register
ItStatus2 = SI4432_ReadReg(0x04); //read the Interrupt Status2 register
//接收設(shè)置
SI4432_WriteReg(0x08, 0x02);
SI4432_WriteReg(0x08, 0x00);
SI4432_WriteReg(0x07, 0x05); //手動(dòng)打開接收
/////////////////////////////////
while(1)
{
if( SI4432_NIRQ == 0 ) //如果發(fā)生中斷
{
delay_ms(50);
ItStatus1 = SI4432_ReadReg(0x03); //read the Interrupt Status1 register
ItStatus2 = SI4432_ReadReg(0x04); //read the Interrupt Status2 register
if ( (ItStatus1 & 0x02) == 0x02 )
{
SI4432_RxLenth = SI4432_ReadReg(0x4B);
for (SI4432_RxCount=0;SI4432_RxCount < SI4432_RxLenth;SI4432_RxCount++)
{
SI4432_RxBUFF[SI4432_RxCount] = SI4432_ReadReg(0x7F);
}
SI4432_RxCount=0;
SI4432_WriteReg(0x08, 0x02);
SI4432_WriteReg(0x08, 0x00);
SI4432_WriteReg(0x07, 0x05); //手動(dòng)打開接?
}
}
res = SI4432_ReadReg(0x02); delay_ms(50);
delay_ms(20); printf("res =%02x \n",(unsigned short)res );
}
}
// 讀取寄存器
u8 SI4432_ReadReg(u8 addr) //讀取寄存器的值
{
uint8_t temp=0;
SI4432_NSEL=0;
SPI1_ReadWriteByte(addr); //發(fā)送讀取寄存器地址
temp=SPI1_ReadWriteByte(0Xff);
SI4432_NSEL=1;
return temp;
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
si4432.rar
(546.01 KB, 下載次數(shù): 131)
2017-7-4 22:59 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
澤之南
時(shí)間:
2018-5-29 10:01
謝謝樓主
作者:
qw11111111
時(shí)間:
2018-7-3 15:05
好東西,但錢不夠,不讓下
作者:
qw11111111
時(shí)間:
2018-7-3 15:20
已下載,stm32f1寫的,發(fā)送的接收是分開寫的,只能當(dāng)參考
作者:
mrliangg
時(shí)間:
2018-7-4 00:45
MACK
作者:
hp_song
時(shí)間:
2018-9-22 16:48
我的程序在7F放入數(shù)據(jù),07設(shè)置為09,但ipksent一直不置位,誰幫忙是哪有問題
作者:
XiaoTao5555
時(shí)間:
2018-9-23 20:56
好東西
作者:
robe
時(shí)間:
2018-10-26 15:17
非常感謝樓主的分享,先mark,以備后用
作者:
1244791860
時(shí)間:
2018-11-23 11:57
正需要用到,謝謝分享!!!!!!!!!!!
作者:
313yang
時(shí)間:
2019-1-6 22:16
謝謝樓主,正用得到呢
作者:
njjm
時(shí)間:
2019-2-18 10:56
支持一下
作者:
cnc2020
時(shí)間:
2019-6-6 23:18
good job
作者:
ぃ默〞語乀
時(shí)間:
2019-8-23 18:03
下載了,調(diào)不通
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1