久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 25939|回復: 57
打印 上一主題 下一主題
收起左側

分享調試SI4432的一些經驗和程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:82008 發表于 2015-6-4 14:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 huyun 于 2015-6-4 14:13 編輯

最近想做無線遙控,選用SI4432這個模塊,因為這個芯片需要配置的寄存器比較多,調試的時候遇到了很多困難,在網上搜索了很久沒找到幾篇好的文章。曾多方求助,經過幾天的努力終于將該模塊調試成功。在此隨筆寫些調試的主要步驟希望給其他開始學SI4432的人一些幫助。另外,本人菜鳥一枚,寫這篇文章目的在于避免其他新手像我一樣無助,請大家多提寶貴意見,共同進步!歡迎轉載。
    好了,開始。
    一、無線模塊選型。
    根據無線通訊的頻段,平常用的無線模塊主要有315MHZ,433MHZ,2.4GHZ。2.4G最近貌似比較火,像24L01,好多開發板上都配這一款芯片。433MHZ頻段的模塊常用的有NRF905、CC1101、SI4432。在315MHZ頻段好像做普通的遙控器比較多,像超外差模塊。
   本人想做無線通信,選擇在2.4GHZ和433MHZ之間。說下區別,2.4G無線通信頻率高、波長短、傳輸速率高、繞射能力差、通信距離短。網上賣的模塊不加功率放大也就是一百米以內。433MHZ無線通信頻率低、波長較長、傳輸速率低、繞射能力強、通信距離遠。價格和2.4GHZ模塊相當,但是距離一般在幾百米甚至更遠,據說加上功率放大可達一兩千米。本人想用來遙控智能車,通信數據量不大,但是想讓距離遠一點。所以選擇433MHZ模塊,具體型號是SI4432。
   二、初次接觸SI4432   
    該芯片價格低、傳輸距離遠,網上用的人挺多的。曾經找過一些資料發現很多商業上的無線通信也是用這一款。于是在網上買了一對,加運費一共四十多。沒有廣告嫌疑,感興趣自己搜。買回來之后開始看相關的手冊和例程。我嘞個去,需要配置的寄存器真多,而且通訊速率、頻段、前導碼、同步字等等都是自己定義的,大家寫的都不一樣。加上沒有專業的知識,更是加大難度。 賣家配的資料室51的版本,說實話程序寫的有點亂,主要是因為他們的程序是配套他們的開發板的,有很多都看不懂。而對于我們初學者而言,最需要的卻是最簡單的:簡單收發就行。我使用的控制器型號:STM32F103RB。分析了很久慢慢移植到STM32里面,失敗。多次修改,失敗。在網上搜索,網上雖然用的人多,但是資料甚少。而且一般都是51單片機驅動的,而且是虛擬SPI!然后是幾天的調試,不多說。
    經過幾天的調試,終于成功,下面說下使用這款芯片的要點。
   三、SPI
    我用的控制芯片是STM32F103RB。SPI可以軟件模擬,也可以用硬件的。再次,建議大家用硬件的SPI,穩定,減少CPU負擔。
    配置硬件SPI要點:
        1、速率不要太高,SI4432手冊上說不要大于10MHZ。
        2、MOSI、MOSO、SCK三個引腳配置為復用功能推挽輸出。
        3、SPI的時鐘極性配置為:同步時鐘的空閑狀態為
低電平
        4、SPI的時鐘的第2個跳變沿數據被采樣。(SPI_CPHA)
        5、片選信號軟件控制,自己定義一個IO空控制片選吧,方便。
   四、硬件連接
    STM32和SI4432硬件連接,具體看模塊吧。我簡單說幾個比較重要的
        1、SI4432的SDN引腳,為高時:芯片停止工作。為低時:芯片允許工作。
我買的模塊里,這個引腳是被引出來的,別費勁了,直接接地,不要用IO口控制高低。高手略過。
        2、模塊的引腳有些是2.54mm間距,有些是1.27mm。想DIY的朋友注意了,我當時就忘了結果買了個1.27mm的后來轉接,麻煩了。
        3、盡量不要用杜邦線。
我開始一直用杜邦線連起來,但是經常在發送和接收的時候出錯,初始化正常。后來用洞洞板連起來,正常。
      4、SI4432是3.3V供電,電源線和地線盡量和STM32的3.3V和地線連在一起。不然的話容易出錯,水平有限,不解釋,等高人。
     五、軟件
調試
     1、SPI配置好以后,向SI4432寫數據注意地址最高位置1。 如:SPI1_ReadWriteByte(addr|0x80)
    2、
配置好以后,向0X00、0X01、0X02地址讀取,應該有返回值,具體看手冊,如果和手冊上的差不多就證明SPI通訊成功了。
     3、  
前導碼個數。SI4432_WriteReg(0x34, 0X0A);  0x34是向SI4432寫入前導碼的地址,0X0A是個數,但是表示其一半,也就是5個字節。
   
4、剛開始,不要配置幀頭。直接禁止    SI4432_WriteReg(0x32, 0x00 );// 禁止幀頭
    5、SI4432有3個GPIO,一般自己是不用的,但是依然要配置,因為這個和模塊相關。具體問賣家。
    6、SI4432主要三個狀態:接收狀態、發送狀態、掛起狀態。發送和接收之間可以相互轉換、但是轉換之前需要先進入掛起狀態然后至少15ms之后再進入發送或者接收狀態。程序while(1)之前最好開始就配置為掛起狀態:SI4432_WriteReg(0x07, 0x01);
六、一定要多看官方的程序設計指南和芯片的手冊,我會放到附件里。
    以上算是對SI4432的初步認識和注意事項。但是這些細節是比較重要的,因為像這樣的無線模塊最主要是先實現通訊,高級的功能慢慢調。
具體程序不再分析,我會放在附件里。STM32F103RB,庫函數。測試多次,但是需要根據自己的模塊進行調整。
  
快畢業了,事多,時間有限,具體看程序,多調試,多看手冊。
   歡迎多提意見,歡迎轉載。


下面是發送端源代碼:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"         
  5. #include "spi.h"
  6. // 0321 注意1:SPI 空閑時為低電平,第二跳邊沿生效                         //注意2:SDN直接接DGND算了
  7. //      注意3:SI4432和STM32要用同一個VCC3.3否則的話收到全為0
  8. #define        SI4432_NSEL   PAout(4)  //SI4432_NSEL  使能
  9. #define        SI4432_SDN    PCout(4)  //SI4432_SDN   使能
  10. #define        SI4432_NIRQ   PCin(5)  //SI4432_NIRQ  中斷狀態

  11. void SI4432_Init(void) ;
  12. u8  SI4432_ReadReg(u8  addr) ;
  13. void SI4432_WriteReg(u8 addr, u8 value) ;
  14.         unsigned char i;

  15. u8 ItStatus1,ItStatus2,res;
  16. int main(void)
  17. {         
  18.         delay_init();                     //延時函數初始化          
  19.         NVIC_Configuration();          //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  20.         uart_init(9600);                 //串口初始化為9600
  21.         LED_Init();                             //LED端口初始化
  22.         SPI1_Init();
  23.         GPIOSet();

  24.         SI4432_NSEL=0;  
  25.         delay_ms(600);

  26.         res = SI4432_ReadReg(0x00);
  27.         delay_ms(20);   printf("res =%02x \n",(unsigned short)res );          
  28.         res = SI4432_ReadReg(0x01);
  29.         delay_ms(20);          printf("res =%02x \n",(unsigned short)res );
  30.         res = SI4432_ReadReg(0x02);
  31.         delay_ms(20);           printf("res =%02x \n",(unsigned short)res );  
  32.         delay_ms(1000);
  33. //讀取中斷狀態          清除中斷  釋放         SI4432_NIRQ
  34.         ItStatus1 = SI4432_ReadReg(0x03);  
  35.         ItStatus2 = SI4432_ReadReg(0x04);                          
  36. //軟件復位
  37.         SI4432_WriteReg(0x07, 0x80); //向0X07地址  寫入0X80  軟件復位
  38.          while ( SI4432_NIRQ == 1);      
  39.         //讀取中斷狀態          清除中斷  釋放         SI4432_NIRQ
  40.         ItStatus1 = SI4432_ReadReg(0x03);  
  41.         ItStatus2 = SI4432_ReadReg(0x04);  
  42. /////////////////////////開始設置
  43. // 頻率設置 434                       
  44.         SI4432_WriteReg(0x75, 0x53);  
  45.         SI4432_WriteReg(0x76, 0x64);  //
  46.         SI4432_WriteReg(0x77, 0x00);
  47. // 1.2K bps 發射速率       
  48.         SI4432_WriteReg(0x2a, 0x14);
  49.         SI4432_WriteReg(0x6e, 0x09);
  50.         SI4432_WriteReg(0x6f, 0xd5);
  51.         SI4432_WriteReg(0x70, 0x2c);//

  52. //SpiWriteRegister(0x72, 0x48);        //(9.6kbps)       
  53.     SI4432_WriteReg(0x72, 0x38);        //頻率偏差(1.2kbps)       
  54. // 下面的設置根據Silabs 的Excel        (9.6 kbps, deviation: 45 kHz, channel filter BW: 102.2 kHz
  55.         SI4432_WriteReg(0x1C, 0x1b);                                                                                                                        //write 0x1E to the IF Filter Bandwidth register               
  56.         SI4432_WriteReg(0x20, 0x83);                                                                                                                        //write 0xD0 to the Clock Recovery Oversampling Ratio register               
  57.         SI4432_WriteReg(0x21, 0xc0);                                                                                                                        //write 0x00 to the Clock Recovery Offset 2 register               
  58.         SI4432_WriteReg(0x22, 0x13);                                                                                                                        //write 0x9D to the Clock Recovery Offset 1 register               
  59.         SI4432_WriteReg(0x23, 0xa9);                                                                                                                        //write 0x49 to the Clock Recovery Offset 0 register               
  60.         SI4432_WriteReg(0x24, 0x00);                                                                                                                        //write 0x00 to the Clock Recovery Timing Loop Gain 1 register               
  61.         SI4432_WriteReg(0x25, 0x03);                                                                                                                        //write 0x24 to the Clock Recovery Timing Loop Gain 0 register               
  62.         SI4432_WriteReg(0x1D, 0x40);                                                                                                                        //write 0x40 to the AFC Loop Gearshift Override register               
  63.         SI4432_WriteReg(0x1E, 0x0A);                                                                                                                        //write 0x0A to the AFC Timing Control register               
  64.         SI4432_WriteReg(0x2A, 0x14);                                                                                                                        //write 0x20 to the AFC Limiter register                               
  65. //前導碼 同步字
  66.         SI4432_WriteReg(0x34, 0X0A);  // 發射5字節的Preamble
  67.         SI4432_WriteReg(0x35, 0x2A);  // 需要檢測 Preamble                                                       
  68.         SI4432_WriteReg(0x33, 0x02);// 同步字3,2 是同步字
  69.         SI4432_WriteReg(0x36, 0x2d);  // 同步字為 0x2dd4
  70.         SI4432_WriteReg(0x37, 0xd4);
  71.         SI4432_WriteReg(0x30, 0x8D);   // 使能PH+ FIFO模式,高位在前面,使能CRC校驗        CCITTT        
  72.     SI4432_WriteReg(0x32, 0x00 );//        禁止幀頭
  73.         SI4432_WriteReg(0x71, 0x63); // 發射不需要 CLK,FiFo , FSK模式       

  74. //GPIO
  75.         SI4432_WriteReg(0x0b, 0x12); //  
  76.         SI4432_WriteReg(0x0c, 0x15); //
  77. //其他設置
  78.         SI4432_WriteReg(0x09, 0xD7);  //  負載電容
  79.         SI4432_WriteReg(0x69, 0x60);  //AGC過載         
  80. //發射功率
  81.         SI4432_WriteReg(0x6d, 0x1e);
  82. //手動打開接收
  83.         SI4432_WriteReg(0x07, 0x05);
  84. //打開 接收中斷
  85.         SI4432_WriteReg(0x05, 0x03);
  86.         SI4432_WriteReg(0x06, 0x00);
  87. //清中斷
  88.         ItStatus1 = SI4432_ReadReg(0x03);          //read the Interrupt Status1 register
  89.         ItStatus2 = SI4432_ReadReg(0x04);          //read the Interrupt Status2 register               
  90.         SI4432_WriteReg(0x07, 0x05);//打開接收       
  91.         SI4432_WriteReg(0x0d, 0xf4);//GPIO2接收數據
  92.                                
  93.         while(1)
  94.         {
  95.                 GPIO_SetBits(GPIOB , GPIO_Pin_10);//信號燈
  96.                 res = SI4432_ReadReg(0x02); delay_ms(20);printf("res =%02x \n",(unsigned short)res );  
  97.                
  98.                 SI4432_WriteReg(0x07, 0x01);        // rf 模塊進入Ready 模式                                       
  99.                 delay_ms(20);                // 延時 5ms, 讓系統穩定       
  100.                
  101.                 SI4432_WriteReg(0x3e, 0x08);  // 總共發射8個字節的數據
  102.                 SI4432_WriteReg(0x7F, 0x42);
  103.                 SI4432_WriteReg(0x7F, 0x42);
  104.                 SI4432_WriteReg(0x7F, 0x42);
  105.                 SI4432_WriteReg(0x7F, 0x42);
  106.                 SI4432_WriteReg(0x7F, 0x42);
  107.                 SI4432_WriteReg(0x7F, 0x42);
  108.                 SI4432_WriteReg(0x7F, 0x42);
  109.                 SI4432_WriteReg(0x7F, 0x42);

  110.                 SI4432_WriteReg(0x05, 0x04);        // 整包數據發射完后,產生中斷       
  111.                 SI4432_WriteReg(0x06, 0x00);
  112.                 ItStatus1 = SI4432_ReadReg(0x03);//清除中斷          
  113.                 ItStatus2 = SI4432_ReadReg(0x04);
  114.                 SI4432_WriteReg(0x07, 0x09);//打開發射          
  115.                  while ( SI4432_NIRQ == 1);     
  116.              GPIO_ResetBits(GPIOB , GPIO_Pin_10);         
  117.                 //read interrupt status registers to release the interrupt flags
  118.                 ItStatus1 = SI4432_ReadReg(0x03);                  printf("ItStatus1 =%02x \n",(unsigned short)ItStatus1 );                          
  119.                 ItStatus2 = SI4432_ReadReg(0x04);            printf("ItStatus2 =%02x \n",(unsigned short)ItStatus2 );                         
  120.                 delay_ms(1000);
  121.         }

  122. }

  123. // 讀取寄存器
  124. u8  SI4432_ReadReg(u8  addr)   //讀取寄存器的值
  125. {
  126.         uint8_t temp=0;
  127.        
  128.         SI4432_NSEL=0;
  129.         SPI1_ReadWriteByte(addr);    //發送讀取寄存器地址
  130.         temp=SPI1_ReadWriteByte(0Xff);
  131.         SI4432_NSEL=1;
  132.        
  133.         return temp;
  134. }
  135. //寫寄存器
  136. void SI4432_WriteReg(u8 addr, u8 value)  //寫寄存器
  137. {
  138.         SI4432_NSEL=0;
  139.         SPI1_ReadWriteByte(addr|0x80);  
  140.         SPI1_ReadWriteByte(value);   
  141.         SI4432_NSEL=1;
  142. }









復制代碼


SI4432 發送 接收程序.rar

3.46 MB, 下載次數: 399, 下載積分: 黑幣 -5

手冊 和編程指南.rar

3.71 MB, 下載次數: 252, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:89536 發表于 2015-9-7 09:32 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

板凳
ID:89846 發表于 2015-9-10 22:24 | 只看該作者
樓主講的很細,非常感謝!!
回復

使用道具 舉報

地板
ID:89846 發表于 2015-9-10 22:25 | 只看該作者
STM32控制SI4432無線模塊詳解!
回復

使用道具 舉報

5#
ID:93752 發表于 2015-10-27 15:09 | 只看該作者
厲害,必須注冊一個賬號來頂一下
回復

使用道具 舉報

6#
ID:95108 發表于 2015-11-8 21:24 | 只看該作者
謝謝樓主分享。。
回復

使用道具 舉報

7#
ID:95108 發表于 2015-11-9 20:15 | 只看該作者
我使用TMS570板子,自帶的gpio鏈接4432上的TXON和RXON,而不是4432自帶的gpio控制發送接收可以嗎??
其他流程和樓主一致,現在問題是發送完中斷一直沒來!
回復

使用道具 舉報

8#
ID:95218 發表于 2015-11-9 21:50 | 只看該作者
非常感謝
回復

使用道具 舉報

9#
ID:97689 發表于 2015-11-30 12:37 | 只看該作者
謝謝分享
回復

使用道具 舉報

10#
ID:97689 發表于 2015-11-30 12:38 | 只看該作者
謝謝分享,老感謝了
回復

使用道具 舉報

11#
ID:98900 發表于 2015-12-8 21:41 | 只看該作者
非常感謝你的分享
回復

使用道具 舉報

12#
ID:99174 發表于 2015-12-10 17:41 | 只看該作者
特意注冊一個賬號,只為來頂一下。在這弄幾天也沒有進展了
回復

使用道具 舉報

13#
ID:100167 發表于 2015-12-23 16:42 | 只看該作者
正需要這個資料,謝謝了
回復

使用道具 舉報

14#
ID:100326 發表于 2015-12-24 15:13 | 只看該作者
好東西必須支持
回復

使用道具 舉報

15#
ID:99627 發表于 2015-12-29 17:28 | 只看該作者
我把代碼復制到keil軟件里,編譯了一下。怎么有5處警告都是頭文件,還有一處錯誤。是怎么回事?請指教。
回復

使用道具 舉報

16#
ID:106047 發表于 2016-2-22 09:58 | 只看該作者
畢業設計需要,好東西哇
回復

使用道具 舉報

17#
ID:106047 發表于 2016-2-22 09:59 | 只看該作者
好東西畢業設計需要,希望有機會可以向老師學習
回復

使用道具 舉報

18#
ID:40121 發表于 2016-2-27 15:46 | 只看該作者
不錯的帖子,我必須要頂一下,我頂。。。。。。。
回復

使用道具 舉報

19#
ID:107677 發表于 2016-3-9 22:54 | 只看該作者
好資料,謝謝大家
回復

使用道具 舉報

20#
ID:110687 發表于 2016-3-26 15:59 | 只看該作者
謝謝樓主,謝謝樓主的共享!收藏了
回復

使用道具 舉報

21#
ID:112677 發表于 2016-4-7 11:43 | 只看該作者
頂一下 希望我可以下載啊
回復

使用道具 舉報

22#
ID:114848 發表于 2016-4-18 00:09 | 只看該作者

頂一下 正好我也在用
回復

使用道具 舉報

23#
ID:118636 發表于 2016-5-5 16:55 | 只看該作者
樓主有用SI4010嗎?
回復

使用道具 舉報

24#
ID:123271 發表于 2016-5-26 08:45 | 只看該作者
謝樓主分享
回復

使用道具 舉報

25#
ID:124722 發表于 2016-6-2 17:05 | 只看該作者
不錯不錯不錯不錯不錯
回復

使用道具 舉報

26#
ID:129793 發表于 2016-7-9 11:20 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

27#
ID:136504 發表于 2016-9-7 16:07 | 只看該作者
HW3000國產第一家433無線模塊,完美替換si4432,4463.cc1101。咨詢電話:13570852936;
回復

使用道具 舉報

28#
ID:151687 發表于 2016-12-2 16:57 | 只看該作者
原本準備自己折騰折騰了,這下好了
回復

使用道具 舉報

29#
ID:151861 發表于 2016-12-3 15:24 | 只看該作者
你好,我下載你的si4432代碼程序的時候提示下載不了,你能單獨發送給我一下嗎?824564795@qq.com
回復

使用道具 舉報

30#
ID:151861 發表于 2016-12-3 15:27 | 只看該作者
你好樓主,我下載你的si4432的代碼時候提示下載不了,能給我單獨發一份嗎?qq郵箱:824564795@qq.com
回復

使用道具 舉報

31#
ID:182980 發表于 2017-3-24 09:04 | 只看該作者
樓主很用心   社會需要你
回復

使用道具 舉報

32#
ID:193871 發表于 2017-4-26 16:01 | 只看該作者
想要學習一下,估計以后會用到
回復

使用道具 舉報

33#
ID:204598 發表于 2017-5-25 09:01 | 只看該作者
樓主好人
回復

使用道具 舉報

34#
ID:183147 發表于 2017-6-14 10:22 | 只看該作者
正好要用到!!!!謝謝樓主!
回復

使用道具 舉報

35#
ID:137543 發表于 2017-10-22 18:48 | 只看該作者
非常感謝,樓主辛苦了··
回復

使用道具 舉報

36#
ID:241124 發表于 2017-10-22 20:58 | 只看該作者
謝謝分享哈!!!
回復

使用道具 舉報

37#
ID:147350 發表于 2017-11-18 09:09 | 只看該作者
好資料,收藏了,多謝哈哈哈哈
回復

使用道具 舉報

38#
ID:48664 發表于 2017-11-28 14:16 | 只看該作者
MARK,收藏了
回復

使用道具 舉報

39#
ID:254772 發表于 2017-11-28 16:47 | 只看該作者
謝謝分享
回復

使用道具 舉報

40#
ID:254771 發表于 2017-11-28 16:54 | 只看該作者
不錯
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品伊人 | 国产精品视频一区二区三区, | 高清视频一区二区三区 | 青青久久| 干干干操操操 | 国产一级黄色网 | 婷婷丁香激情 | 久久久久国产一区二区三区 | 麻豆a级片 | 亚洲精品一区二区三区丝袜 | www.97zyz.com| 成人影 | 成人在线免费 | 日韩欧美大片在线观看 | 精品自拍视频 | 在线精品亚洲欧美日韩国产 | 欧美日韩成人 | 999免费视频 | 国产一区二区三区视频在线观看 | 亚洲欧美网站 | 天天射天天操天天干 | 337p日本欧洲亚洲大胆鲁鲁 | 成人免费淫片aa视频免费 | 国产精品揄拍一区二区 | 欧美在线成人影院 | 中文字幕视频在线 | 成人福利电影 | 日韩伦理一区二区 | 成人在线中文字幕 | 欧美精品日韩 | 自拍偷拍中文字幕 | 欧美中文字幕 | 青青草综合网 | 国产日韩欧美精品一区二区 | 久久免费看 | 在线日韩欧美 | 欧美在线一区二区三区 | 成人在线视频免费观看 | 天天艹天天干天天 | av黄色免费在线观看 | 日韩欧美中文字幕在线观看 |