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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6590|回復: 12
收起左側

STM32開發SI4432發送和接受程序

  [復制鏈接]
ID:217121 發表于 2017-7-4 16:03 | 顯示全部樓層 |閱讀模式
STM32開發SI4432
0.png

單片機源程序如下(發送):
  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. u8 i;
  15. u8 SI4432_RxBUFF[100];
  16. u8 SI4432_RxCount,SI4432_RxLenth;
  17. u8 ItStatus1,ItStatus2,res;
  18. int main(void)
  19. {         
  20.         delay_init();                     //延時函數初始化          
  21.         NVIC_Configuration();          //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  22.         uart_init(9600);                 //串口初始化為9600
  23.         LED_Init();                             //LED端口初始化
  24.         SPI1_Init();
  25.         GPIO_SET();

  26.         SI4432_NSEL=0;  
  27.         delay_ms(600);

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

  54. //SpiWriteRegister(0x72, 0x48);        //(9.6kbps)       
  55.     SI4432_WriteReg(0x72, 0x38);        //頻率偏差(1.2kbps)       
  56. // 下面的設置根據Silabs 的Excel        (9.6 kbps, deviation: 45 kHz, channel filter BW: 102.2 kHz
  57.         SI4432_WriteReg(0x1C, 0x1b);                                                                                                                        //write 0x1E to the IF Filter Bandwidth register               
  58.         SI4432_WriteReg(0x20, 0x83);                                                                                                                        //write 0xD0 to the Clock Recovery Oversampling Ratio register               
  59.         SI4432_WriteReg(0x21, 0xc0);                                                                                                                        //write 0x00 to the Clock Recovery Offset 2 register               
  60.         SI4432_WriteReg(0x22, 0x13);                                                                                                                        //write 0x9D to the Clock Recovery Offset 1 register               
  61.         SI4432_WriteReg(0x23, 0xa9);                                                                                                                        //write 0x49 to the Clock Recovery Offset 0 register               
  62.         SI4432_WriteReg(0x24, 0x00);                                                                                                                        //write 0x00 to the Clock Recovery Timing Loop Gain 1 register               
  63.         SI4432_WriteReg(0x25, 0x03);                                                                                                                        //write 0x24 to the Clock Recovery Timing Loop Gain 0 register               
  64.         SI4432_WriteReg(0x1D, 0x40);                                                                                                                        //write 0x40 to the AFC Loop Gearshift Override register               
  65.         SI4432_WriteReg(0x1E, 0x0A);                                                                                                                        //write 0x0A to the AFC Timing Control register               
  66.         SI4432_WriteReg(0x2A, 0x14);                                                                                                                        //write 0x20 to the AFC Limiter register                               
  67. //前導碼 同步字
  68.         SI4432_WriteReg(0x34, 0X0A);  // 發射5字節的Preamble
  69.         SI4432_WriteReg(0x35, 0x2A);  // 需要檢測 Preamble                                                       
  70.         SI4432_WriteReg(0x33, 0x02);// 同步字3,2 是同步字
  71.         SI4432_WriteReg(0x36, 0x2d);  // 同步字為 0x2dd4
  72.         SI4432_WriteReg(0x37, 0xd4);
  73.         SI4432_WriteReg(0x30, 0x8D);   // 使能PH+ FIFO模式,高位在前面,使能CRC校驗        CCITTT        
  74.     SI4432_WriteReg(0x32, 0x00 );//        禁止幀頭
  75.         SI4432_WriteReg(0x71, 0x63); // 發射不需要 CLK,FiFo , FSK模式       
  76. //GPIO
  77.         SI4432_WriteReg(0x0b, 0x12); //  
  78.         SI4432_WriteReg(0x0c, 0x15); //
  79. //其他設置
  80.         SI4432_WriteReg(0x09, 0xD7);  //  負載電容
  81.         SI4432_WriteReg(0x69, 0x60);  //AGC過載         
  82. //發射功率
  83.         SI4432_WriteReg(0x6d, 0x1e);
  84. //手動打開接收
  85.         SI4432_WriteReg(0x07, 0x05);
  86. //打開 接收中斷
  87.         SI4432_WriteReg(0x05, 0x03);
  88.         SI4432_WriteReg(0x06, 0x00);
  89. //清中斷
  90.         ItStatus1 = SI4432_ReadReg(0x03);          //read the Interrupt Status1 register
  91.         ItStatus2 = SI4432_ReadReg(0x04);          //read the Interrupt Status2 register       
  92. //接收設置
  93.         SI4432_WriteReg(0x08, 0x02);
  94.         SI4432_WriteReg(0x08, 0x00);
  95.         SI4432_WriteReg(0x07, 0x05);         //手動打開接收
  96. /////////////////////////////////                               
  97.         while(1)
  98.         {
  99.                 if( SI4432_NIRQ == 0 )        //如果發生中斷
  100.                 {
  101.                         delay_ms(50);       
  102.                 ItStatus1 = SI4432_ReadReg(0x03);                //read the Interrupt Status1 register
  103.                 ItStatus2 = SI4432_ReadReg(0x04);                //read the Interrupt Status2 register
  104.                        
  105.                         if ( (ItStatus1 & 0x02) == 0x02 )
  106.                                 {
  107.                                         SI4432_RxLenth = SI4432_ReadReg(0x4B);                                                       
  108.                                         for (SI4432_RxCount=0;SI4432_RxCount < SI4432_RxLenth;SI4432_RxCount++)
  109.                                                 {
  110.                                                         SI4432_RxBUFF[SI4432_RxCount] = SI4432_ReadReg(0x7F);       
  111.                                                 }
  112.                                         SI4432_RxCount=0;
  113.                                         SI4432_WriteReg(0x08, 0x02);       
  114.                                         SI4432_WriteReg(0x08, 0x00);
  115.                                         SI4432_WriteReg(0x07, 0x05); //手動打開接?
  116.                                 }
  117.                 }                               
  118.                 res = SI4432_ReadReg(0x02);         delay_ms(50);
  119.                 delay_ms(20);           printf("res =%02x \n",(unsigned short)res );  
  120.         }
  121. }



  122. // 讀取寄存器
  123. u8  SI4432_ReadReg(u8  addr)   //讀取寄存器的值
  124. {
  125.         uint8_t temp=0;
  126.        
  127.         SI4432_NSEL=0;
  128.         SPI1_ReadWriteByte(addr);    //發送讀取寄存器地址
  129.         temp=SPI1_ReadWriteByte(0Xff);
  130.         SI4432_NSEL=1;
  131.        
  132.         return temp;
  133. ……………………

  134. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
si4432.rar (546.01 KB, 下載次數: 131)



回復

使用道具 舉報

ID:124245 發表于 2018-5-29 10:01 | 顯示全部樓層
謝謝樓主
回復

使用道具 舉報

ID:364014 發表于 2018-7-3 15:05 | 顯示全部樓層
好東西,但錢不夠,不讓下
回復

使用道具 舉報

ID:364014 發表于 2018-7-3 15:20 | 顯示全部樓層
已下載,stm32f1寫的,發送的接收是分開寫的,只能當參考
回復

使用道具 舉報

ID:158903 發表于 2018-7-4 00:45 | 顯示全部樓層
MACK
回復

使用道具 舉報

ID:397282 發表于 2018-9-22 16:48 | 顯示全部樓層
我的程序在7F放入數據,07設置為09,但ipksent一直不置位,誰幫忙是哪有問題
回復

使用道具 舉報

ID:401662 發表于 2018-9-23 20:56 | 顯示全部樓層
好東西
回復

使用道具 舉報

ID:407899 發表于 2018-10-26 15:17 | 顯示全部樓層
非常感謝樓主的分享,先mark,以備后用
回復

使用道具 舉報

ID:324015 發表于 2018-11-23 11:57 | 顯示全部樓層
正需要用到,謝謝分享!!!!!!!!!!!
回復

使用道具 舉報

ID:381973 發表于 2019-1-6 22:16 | 顯示全部樓層
謝謝樓主,正用得到呢
回復

使用道具 舉報

ID:273434 發表于 2019-2-18 10:56 | 顯示全部樓層
支持一下
回復

使用道具 舉報

ID:68875 發表于 2019-6-6 23:18 | 顯示全部樓層
good job
回復

使用道具 舉報

ID:518303 發表于 2019-8-23 18:03 | 顯示全部樓層
下載了,調不通
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品无码一区二区三区 | 婷婷久久五月天 | 日日夜夜狠狠操 | 成人在线播放网址 | 久久久久香蕉视频 | 亚洲+变态+欧美+另类+精品 | 国产欧美一区二区三区在线看 | 超碰伊人久久 | 黄色一级大片视频 | 免费能直接在线观看黄的视频 | 日韩免费福利视频 | 拍真实国产伦偷精品 | 日本特黄a级高清免费大片 国产精品久久性 | 久久av.com | 大象一区 | 蜜桃臀av一区二区三区 | 国产精品成人品 | 国产真实精品久久二三区 | 中文字幕在线网 | 成人在线视频网站 | 日韩精品成人网 | 亚洲一区二区三区免费视频 | 久久国产综合 | 天天干夜夜操 | 国产美女一区 | 天天看天天摸天天操 | 超碰在线人人干 | 91精品国产91久久久久久最新 | 欧美色欧美亚洲另类七区 | 色久影院| 免费毛片在线 | 国产在线精品一区二区三区 | 日韩欧美在线一区 | 国产乱码精品一区二区三区中文 | 成人午夜电影网 | 国产成人综合一区二区三区 | 一级毛片视频在线 | 欧美日韩一区二区三区视频 | 欧美日高清视频 | 精品久久久久久亚洲精品 | 91精品国产欧美一区二区成人 |