找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32紅外通信實(shí)驗(yàn)程序 實(shí)現(xiàn)最基本的紅外命令控制

[復(fù)制鏈接]
ID:555895 發(fā)表于 2021-1-17 16:41 | 顯示全部樓層 |閱讀模式
PA0為紅外接收模塊信號口
能實(shí)現(xiàn)最基本的紅外命令控制
僅供參考
主函數(shù)
  1. uint8_t IrValue[4];         //設(shè)置一個(gè)4元素?cái)?shù)組變量

  2. void delay_us(uint16_t time)     //粗略微秒延時(shí)函數(shù)
  3. {   
  4.    uint16_t i=0;  
  5.    while(time--)
  6.    {
  7.       i=10;  
  8.       while(i--) ;   
  9.    }
  10. }

  11. int main(void)                                                  //主函數(shù)
  12. {
  13.         
  14.         EXTI_Config();
  15.         GPIO_Config();
  16.                                 
  17.         while(1)
  18.         {               
  19.                 if(IrValue[2] == 0x46)  //紅外按鍵鍵值
  20.                 {
  21.                         GPIO_SetBits(GPIOB,GPIO_Pin_0);
  22.                 }                        
  23.                 else
  24.                 {
  25.                         GPIO_ResetBits(GPIOB,GPIO_Pin_0);
  26.                 }
  27.         }               
  28.                
  29. }
復(fù)制代碼
中斷服務(wù)函數(shù)
  1. void EXTI0_IRQHandler(void)//中斷服務(wù)函數(shù)
  2. {
  3.         if(EXTI_GetITStatus(EXTI_Line0) == 1)
  4.         {
  5.                 uint16_t i,j;
  6.                 uint16_t Time=0;
  7.                                 
  8.                
  9.                 delay_us(5000);        //延時(shí)5ms
  10.                
  11.                 if(DO==1)               //確定不是外界干擾,DO為紅外模塊OUT口連接的引腳PA0
  12.                 {
  13.                         return;
  14.                 }               
  15.                 while(!DO);   //跳過9ms
  16.                 while(DO);    //跳過4.5ms
  17.                
  18.                 for(j=0;j<4;j++)
  19.                 {
  20.                         for(i=0;i<8;i++)
  21.                         {
  22.                                 while(!DO);
  23.                                 while(DO)
  24.                                 {
  25.                                         delay_us(100);
  26.                                         Time++;
  27.                                         if(Time>30)
  28.                                         {
  29.                                                 return;
  30.                                         }                                       
  31.                                 }
  32.                                 IrValue[j] = IrValue[j] >>1;
  33.                                 if(Time>=10)
  34.                                 {
  35.                                                 IrValue[j] |= 0x80;
  36.                                 }                                
  37.                                 Time=0;
  38.                         }
  39.                 }                                                        
  40.         }
  41.         EXTI_ClearITPendingBit(EXTI_Line0);
  42. }
復(fù)制代碼
中斷配置函數(shù)
  1. void EXTI_Config(void)              //中斷初始化配置函數(shù)
  2. {
  3.         GPIO_InitTypeDef  GPIO_InitStruct;//GPIO結(jié)構(gòu)體變量
  4.         EXTI_InitTypeDef  EXTI_InitStruct;//EXTI結(jié)構(gòu)體變量
  5.         NVIC_InitTypeDef  NVIC_InitStruct;//NVIC結(jié)構(gòu)體變量
  6.         
  7.         //NVIC初始化配置
  8.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  9.         NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
  10.         NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
  11.         NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
  12.         NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
  13.         NVIC_Init(&NVIC_InitStruct);
  14.         
  15.         //GPIO初始化配置
  16.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  17.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
  18.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  19.         GPIO_Init(GPIOA,&GPIO_InitStruct);        
  20.         
  21.         //EXTI初始化配置
  22.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  23.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
  24.         EXTI_InitStruct.EXTI_Line = EXTI_Line0;
  25.         EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
  26.         EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
  27.         EXTI_InitStruct.EXTI_LineCmd = ENABLE;
  28.         EXTI_Init(&EXTI_InitStruct);
  29. }
復(fù)制代碼

全部資料51hei下載地址:
IR.7z (175.27 KB, 下載次數(shù): 32)

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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