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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6960|回復: 5
收起左側

學習型315M無線遙控器學習與發送的STM32程序源碼

  [復制鏈接]
ID:318233 發表于 2018-10-20 09:12 | 顯示全部樓層 |閱讀模式
能夠進行315m無線信號的學習與發送,需要配合相應的硬件
0.png

單片機源程序如下:
  1. #include "delay.h"
  2. #include "key.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "exti.h"
  6. #include "timer.h"
  7. #include "IR_SendData.h"
  8. /************************************************
  9. 接收315無線模塊數據

  10. 1、輸入腳PA15
  11. 2、PA15下降沿觸發外部中斷
  12. 3、采用定時器TIM3計算脈寬
  13. ************************************************/
  14. extern u8 USART_RX_BUF[USART_REC_LEN];
  15. extern u8 WiRecBuff[5];
  16. int main(void)
  17. {               
  18.   unsigned char i=0,t=0,len=0;
  19.         delay_init();                     //延時函數初始化         
  20.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  21.         uart_init(115200);         //串口初始化為115200
  22.         EXTIX_Init();                         //外部中斷初始化
  23.         TIM3_Int_Init(49999,71);//10Khz的計數頻率,計數到5000為500ms  
  24.         TIM7_Int_Init(59999,71);
  25.          send_init();
  26.          KEY_Init();
  27.         while(1)
  28.         {         
  29. //按鍵315發送數據
  30.                  if(KEY0==0)
  31.                  {
  32.                                 EXTI->IMR &= ~(EXTI_Line15);         //315無線關閉接收中斷      
  33.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位         
  34.                                 delay_ms(10);     //按鍵消抖
  35.                                 senddata();       //發送315無線信號
  36.                         for(i=0;i<3;i++)
  37.                         {
  38.                         printf("\r\n發送數據:%x \r\n\r\n",WiRecBuff[i]);
  39.                         }
  40.                  }
  41.                  else
  42.                  {
  43.                                 EXTI->IMR |= EXTI_Line15;            //開啟315無線接手卸險
  44.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位         
  45.                  }
  46.                 /**     315無線發送數據           **/                    
  47.                 if(USART_RX_STA&0x8000)
  48.                 {                                          
  49.                         len=USART_RX_STA&0x3fff;//得到此次接收到的數據長度
  50.                         if((USART_RX_BUF[0]!=0x30))   //判斷首位不等于0x30,以及接收數據完成
  51.                         {
  52.                                 for(i=0;i<3;i++)
  53.                                 {
  54.                                         WiRecBuff[i]=USART_RX_BUF[i];
  55.                                         delay_ms(10);     //按鍵消抖
  56.                                 }
  57.         //                        
  58.                                 EXTI->IMR &= ~(EXTI_Line15);         //315無線關閉接收中斷      
  59.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位         

  60.                                 senddata();                           //發送315無線信號
  61.                         }
  62.                         else
  63.                          {
  64.                                 EXTI->IMR |= EXTI_Line15;            //開啟315無線接手卸險
  65.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位         
  66.                          }
  67.                         
  68.                         USART_RX_STA=0;
  69.                         memset(USART_RX_BUF, '\0', sizeof(USART_RX_BUF));  //清除串口接收數組
  70.                 }
  71.                
  72.    

  73.                  
  74.         }
  75. }
復制代碼

IR_SendData.c
  1. /*******************************************************************
  2.         使用定時器發送315無線數據
  3. *******************************************************************/
  4. #include "IR_SendData.h"
  5. #include "delay.h"
  6. #include "led.h"
  7. #include "usart.h"
  8. /********************************************************************

  9. 1、315發送: 24位 數據
  10. 2、A: 0x0c
  11. 3、B:0xc0
  12. 4、C:0x03
  13. 5、D:0x30

  14. *********************************************************************/
  15. u8 WiRecBuff[5];

  16. extern unsigned char send_bit;     //定時器溢出中斷標志位
  17. unsigned char  REM_Table[14]={1,0,1,0,1,0,1,0,1,0,1,0,1,0};//發送高低電緩沖區

  18. /********************************************************************
  19. 1、 14ms  :0x36af   14000-1
  20. 2、 1.2ms :0x4af    1200-1
  21. 3、 600us :0X257    600-1
  22. *********************************************************************/
  23. unsigned int Time_Table[14]={0x36af,0x36af,0x4af,0X257,0x4af};//  14ms  1`2ms   600us


  24. extern u8  USART_RX_BUF[USART_REC_LEN];

  25. /*串口接收數據    轉為發送*/
  26. //void RecBuff_change(void)
  27. //{
  28. //        unsigned char i=0;
  29. //        if(USART_RX_BUF[0]!=0x30)
  30. //        {
  31. //                for(i=0;i<3;i++)
  32. //                {
  33. //                        WiRecBuff[i]=USART_RX_BUF[i];
  34. //                        delay_us(100);
  35. //                }
  36. //        }
  37. //}
  38. /********************************************************************

  39. 315無線發送IO口初始化

  40. *********************************************************************/
  41. void send_init(void)
  42. {
  43. GPIO_InitTypeDef  GPIO_InitStructure;
  44.          
  45. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);         //使能PC端口時鐘
  46.         
  47. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                                 //PC.0 端口配置
  48. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  49. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  50. GPIO_Init(GPIOC, &GPIO_InitStructure);                                         //根據設定參數初始化GPIOC.0
  51. GPIO_SetBits(GPIOC,GPIO_Pin_0);                                                 //PC.0 輸出高

  52. }

  53. void send_foot(void)    //發送14ms的引導嗎
  54. {
  55.                 unsigned char i;

  56.                 for(i=0;i<2;i++)
  57.         {
  58.                 Send=REM_Table[i];         //發送高低電
  59.                 send_bit=0;                //定時器溢出中斷標志位清零
  60.                 TIM7->CNT = 0;             //計數器數值清零
  61.                 TIM7->ARR = Time_Table[i]; //設置定時器計數值
  62.                 TIM7->CR1 |= 0x01;         //開啟TIM3定時器
  63.     while(send_bit==0);               //等待溢出中斷
  64.                 //TIM3->CR1 &= ~(0x01);           //關閉定時器3        
  65.         }

  66. }

  67. void bit_1(void)       //高電平1.2ms+低電平500us表示:邏輯1
  68. {
  69.                 unsigned char i;
  70.         for(i=0;i<2;i++)
  71.         {
  72.                 Send=REM_Table[i];
  73.                 send_bit=0;
  74.                 TIM7->CNT = 0;
  75.                 TIM7->ARR = Time_Table[i+2];
  76.                 TIM7->CR1 |= 0x01;     //開啟TIM3定時器
  77.                 while(send_bit==0);        
  78. //    while(TIM_GetITStatus(TIM3, TIM_IT_Update) == RESET);               
  79.         }
  80. }

  81. void bit_0(void)      //高電平500us+低電平1.2ms 表示:邏輯0
  82. {
  83.         unsigned char i;
  84.         for(i=0;i<2;i++)
  85.         {
  86.                 Send=REM_Table[i];
  87.                 send_bit=0;
  88.                 TIM7->CNT = 0;
  89.                 TIM7->ARR = Time_Table[i+3];
  90.                 TIM7->CR1 |= 0x01;     //開啟TIM3定時器
  91.                 while(send_bit==0);        
  92. //    while(TIM_GetITStatus(TIM3, TIM_IT_Update) == RESET);               
  93.                
  94.         }

  95. }

  96. void senddata(void)      //發送引導碼+24數據
  97. {
  98.         u8 i,j;
  99. //        RecBuff_change();
  100.         send_foot();          //發送引導碼
  101.         for(i=0;i<25;i++)
  102.         {
  103. //                for(j=0;j<8;j++)
  104.                 {
  105.                         if(((WiRecBuff[i/8]<<i%8)&0x80))   //從高位到低位,判斷邏輯0還是邏輯1
  106.                         {
  107.                                 bit_1();    //發送邏輯1脈沖
  108.                         }
  109.                         else
  110.                         {
  111.                                 bit_0();    //發送邏輯0脈沖
  112.                         }
  113.                 }
  114.         }







  115. }
復制代碼


所有資料51hei提供下載:
315學習 315發送.zip (330.6 KB, 下載次數: 135)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:1 發表于 2018-10-20 14:18 | 顯示全部樓層
能分享下原理圖嗎?
回復

使用道具 舉報

ID:138119 發表于 2018-11-28 10:57 | 顯示全部樓層
用STM32制作,成本略高,但作為學習,還是有價值的!
回復

使用道具 舉報

ID:483019 發表于 2019-3-16 22:36 | 顯示全部樓層
有STC的示例嗎?我已經讀出了數據串,怎樣發射出去?
RAW signal: 4860 1516 375 739 375 738 735 381 735 380 736 380 735 380 376 738 375 753 375 738 736 380 375 739 375 738 375 739 375 739 375 738 375 753 735 380 375 739 375 738 376 738 375 739 375 738 735 381 375 752 375 738 736 380 735 380 735 380 376 738 375 738 428 739 735 390 375 738 375 739 735 380 736 380 375 738 376 738 735 381 735 4806 1516 375 792 375 738 735 381 735 380 735 380 735 380 375 738 375 752 376 738 735 380 376 738 375 739 375 738 375 738 376 738 375 753 735 380 375 739 375 739 375 738 375 739 375 738 735 380 375 753 375 738 735 380 735 380 735 380 375 738 375 739 375 738 734 391 375 738 375 738 375 738 375 738 788 380 735 380 735 380 735 8411
回復

使用道具 舉報

ID:450244 發表于 2019-10-29 18:45 | 顯示全部樓層
有接受程序嗎
回復

使用道具 舉報

ID:518278 發表于 2019-11-28 17:10 | 顯示全部樓層
學習一下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美一区二区三区久久久 | 国产98色在线 | 日韩 | 老司机深夜福利网站 | 欧美性受xxx| 欧美一区二区三区视频 | 自拍偷拍中文字幕 | 蜜桃视频在线观看免费视频网站www | 午夜国产一级片 | 亚洲激情综合 | 国产精品久久久久久一区二区三区 | 日日夜夜天天 | 欧美成人h版在线观看 | 成人在线观看免费视频 | 二区久久 | 免费特级黄毛片 | 国产亚洲成av人在线观看导航 | .国产精品成人自产拍在线观看6 | 久久久久久中文字幕 | 都市激情亚洲 | 国产二区视频 | 久久精品国产99国产精品 | 奇米视频777 | 日韩在线不卡 | 夜夜av| 免费a网站 | 青春草国产 | 网色| 黄色大片观看 | 国产精品美女久久久 | 精品免费视频 | 一级欧美一级日韩片免费观看 | 超碰在线国产 | 色婷婷一区二区三区四区 | 欧美成年人网站 | 欧美一级片在线看 | 91在线观看视频 | 久久久激情 | 成人午夜免费福利视频 | 罗宾被扒开腿做同人网站 | 日韩中文字幕在线视频 | 精品影视 |