找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6994|回復(fù): 5
收起左側(cè)

學(xué)習(xí)型315M無(wú)線遙控器學(xué)習(xí)與發(fā)送的STM32程序源碼

  [復(fù)制鏈接]
ID:318233 發(fā)表于 2018-10-20 09:12 | 顯示全部樓層 |閱讀模式
能夠進(jìn)行315m無(wú)線信號(hào)的學(xué)習(xí)與發(fā)送,需要配合相應(yīng)的硬件
0.png

單片機(jī)源程序如下:
  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無(wú)線模塊數(shù)據(jù)

  10. 1、輸入腳PA15
  11. 2、PA15下降沿觸發(fā)外部中斷
  12. 3、采用定時(shí)器TIM3計(jì)算脈寬
  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();                     //延時(shí)函數(shù)初始化         
  20.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  21.         uart_init(115200);         //串口初始化為115200
  22.         EXTIX_Init();                         //外部中斷初始化
  23.         TIM3_Int_Init(49999,71);//10Khz的計(jì)數(shù)頻率,計(jì)數(shù)到5000為500ms  
  24.         TIM7_Int_Init(59999,71);
  25.          send_init();
  26.          KEY_Init();
  27.         while(1)
  28.         {         
  29. //按鍵315發(fā)送數(shù)據(jù)
  30.                  if(KEY0==0)
  31.                  {
  32.                                 EXTI->IMR &= ~(EXTI_Line15);         //315無(wú)線關(guān)閉接收中斷      
  33.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標(biāo)志位         
  34.                                 delay_ms(10);     //按鍵消抖
  35.                                 senddata();       //發(fā)送315無(wú)線信號(hào)
  36.                         for(i=0;i<3;i++)
  37.                         {
  38.                         printf("\r\n發(fā)送數(shù)據(jù):%x \r\n\r\n",WiRecBuff[i]);
  39.                         }
  40.                  }
  41.                  else
  42.                  {
  43.                                 EXTI->IMR |= EXTI_Line15;            //開啟315無(wú)線接手卸險(xiǎn)
  44.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標(biāo)志位         
  45.                  }
  46.                 /**     315無(wú)線發(fā)送數(shù)據(jù)           **/                    
  47.                 if(USART_RX_STA&0x8000)
  48.                 {                                          
  49.                         len=USART_RX_STA&0x3fff;//得到此次接收到的數(shù)據(jù)長(zhǎng)度
  50.                         if((USART_RX_BUF[0]!=0x30))   //判斷首位不等于0x30,以及接收數(shù)據(jù)完成
  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無(wú)線關(guān)閉接收中斷      
  59.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標(biāo)志位         

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

  73.                  
  74.         }
  75. }
復(fù)制代碼

IR_SendData.c
  1. /*******************************************************************
  2.         使用定時(shí)器發(fā)送315無(wú)線數(shù)據(jù)
  3. *******************************************************************/
  4. #include "IR_SendData.h"
  5. #include "delay.h"
  6. #include "led.h"
  7. #include "usart.h"
  8. /********************************************************************

  9. 1、315發(fā)送: 24位 數(shù)據(jù)
  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;     //定時(shí)器溢出中斷標(biāo)志位
  17. unsigned char  REM_Table[14]={1,0,1,0,1,0,1,0,1,0,1,0,1,0};//發(fā)送高低電緩沖區(qū)

  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. /*串口接收數(shù)據(jù)    轉(zhuǎn)為發(fā)送*/
  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無(wú)線發(fā)送IO口初始化

  40. *********************************************************************/
  41. void send_init(void)
  42. {
  43. GPIO_InitTypeDef  GPIO_InitStructure;
  44.          
  45. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);         //使能PC端口時(shí)鐘
  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);                                         //根據(jù)設(shè)定參數(shù)初始化GPIOC.0
  51. GPIO_SetBits(GPIOC,GPIO_Pin_0);                                                 //PC.0 輸出高

  52. }

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

  56.                 for(i=0;i<2;i++)
  57.         {
  58.                 Send=REM_Table[i];         //發(fā)送高低電
  59.                 send_bit=0;                //定時(shí)器溢出中斷標(biāo)志位清零
  60.                 TIM7->CNT = 0;             //計(jì)數(shù)器數(shù)值清零
  61.                 TIM7->ARR = Time_Table[i]; //設(shè)置定時(shí)器計(jì)數(shù)值
  62.                 TIM7->CR1 |= 0x01;         //開啟TIM3定時(shí)器
  63.     while(send_bit==0);               //等待溢出中斷
  64.                 //TIM3->CR1 &= ~(0x01);           //關(guān)閉定時(shí)器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定時(shí)器
  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定時(shí)器
  91.                 while(send_bit==0);        
  92. //    while(TIM_GetITStatus(TIM3, TIM_IT_Update) == RESET);               
  93.                
  94.         }

  95. }

  96. void senddata(void)      //發(fā)送引導(dǎo)碼+24數(shù)據(jù)
  97. {
  98.         u8 i,j;
  99. //        RecBuff_change();
  100.         send_foot();          //發(fā)送引導(dǎo)碼
  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();    //發(fā)送邏輯1脈沖
  108.                         }
  109.                         else
  110.                         {
  111.                                 bit_0();    //發(fā)送邏輯0脈沖
  112.                         }
  113.                 }
  114.         }







  115. }
復(fù)制代碼


所有資料51hei提供下載:
315學(xué)習(xí) 315發(fā)送.zip (330.6 KB, 下載次數(shù): 135)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:138119 發(fā)表于 2018-11-28 10:57 | 顯示全部樓層
用STM32制作,成本略高,但作為學(xué)習(xí),還是有價(jià)值的!
回復(fù)

使用道具 舉報(bào)

ID:483019 發(fā)表于 2019-3-16 22:36 | 顯示全部樓層
有STC的示例嗎?我已經(jīng)讀出了數(shù)據(jù)串,怎樣發(fā)射出去?
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
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:518278 發(fā)表于 2019-11-28 17:10 | 顯示全部樓層
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表