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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6834|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产视频第一页 | 久久久精| 瑟瑟激情 | 中文字幕亚洲无线 | 中文字幕二区 | 天天躁日日躁aaaa视频 | 久久99精品久久久久久国产越南 | 男人的天堂中文字幕 | 亚洲精品久久久一区二区三区 | 国产a区 | 国产欧美精品一区二区色综合朱莉 | 操夜夜| 91短视频网址 | 成人黄色av网站 | 国产91在线精品 | 国产精品久久久久久久久久免费 | 中文字幕在线免费视频 | 精品国产一区二区三区久久 | 久久精品国产亚洲a | 色婷婷综合久久久久中文一区二区 | 精品国产乱码久久久久久老虎 | 国产亚洲一区二区三区在线 | 成人a视频 | 久久精品播放 | 国产精品视频一区二区三区四蜜臂 | 久久久久久久久淑女av国产精品 | 精品国产一区二区三区久久影院 | 亚洲精品视频久久 | 亚洲日韩视频 | 一级片在线观看 | 天天天天操 | 成人亚洲视频 | 成人精品一区亚洲午夜久久久 | 色婷婷综合久久久中字幕精品久久 | 暖暖成人免费视频 | 一区二区在线免费播放 | 欧洲一级黄 | 久久亚洲欧美日韩精品专区 | www.9191.com| 欧美精品网 | av中文网 |