108 lines
1.6 KiB
C
108 lines
1.6 KiB
C
/*
|
|
* r480r.c
|
|
*
|
|
* Created on: 2021年10月15日
|
|
* Author: wuwenfeng
|
|
*/
|
|
|
|
|
|
#include "r480r.h"
|
|
#define read_infrared HAL_GPIO_ReadPin(infeaed_GPIO_Port,infeaed_Pin)
|
|
|
|
extern TIM_HandleTypeDef htim14;
|
|
uint16_t timer_100us_tick=0;
|
|
int read_bit_flag=0;
|
|
int read_char_flag=0;
|
|
char read_data_buffer[3];
|
|
char read_begin=0;
|
|
|
|
void r480_init()
|
|
{
|
|
HAL_TIM_Base_Start_IT(&htim14);
|
|
r480.times=0;
|
|
}
|
|
|
|
void read_433_exit()
|
|
{
|
|
|
|
char a=read_infrared;
|
|
int b;
|
|
if(read_begin==0)
|
|
{
|
|
if(a==0)
|
|
{
|
|
timer_100us_tick=0;
|
|
return ;
|
|
}else
|
|
{
|
|
if(timer_100us_tick>70&&timer_100us_tick<100)
|
|
{
|
|
read_begin=1;
|
|
r480.times++;
|
|
read_bit_flag=0;
|
|
read_char_flag=0;
|
|
timer_100us_tick=0;
|
|
return ;
|
|
}
|
|
}
|
|
|
|
}else
|
|
{
|
|
if(timer_100us_tick<5)
|
|
{
|
|
timer_100us_tick=0;
|
|
return ;
|
|
}else if(timer_100us_tick<12)
|
|
{
|
|
read_data_buffer[read_char_flag]<<=1;
|
|
if(a==1)
|
|
{
|
|
read_data_buffer[read_char_flag]|=0x01;
|
|
}
|
|
read_bit_flag++;
|
|
if(read_bit_flag==8)
|
|
{
|
|
read_bit_flag=0;
|
|
read_char_flag++;
|
|
if(read_char_flag==3)
|
|
{
|
|
//got data
|
|
|
|
read_char_flag=0;
|
|
timer_100us_tick=0;
|
|
|
|
r480.add[0]=read_data_buffer[0];
|
|
r480.add[1]=read_data_buffer[1];
|
|
r480.key=read_data_buffer[2];
|
|
}
|
|
}
|
|
timer_100us_tick=0;
|
|
return ;
|
|
}else//time out
|
|
{
|
|
read_begin=0;
|
|
timer_100us_tick=0;
|
|
return ;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
|
{
|
|
switch(GPIO_Pin)
|
|
{
|
|
case infeaed_Pin:
|
|
read_433_exit();
|
|
return ;
|
|
break;
|
|
}
|
|
}
|
|
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//100us
|
|
{
|
|
if (htim == (&htim14))
|
|
{
|
|
timer_100us_tick++;
|
|
}
|
|
}
|