平台: STM32F103C8T6
芯片F115 发送:
数据的发射主要以,低电平的时间来判断,
下降沿发送数据,以低电平的时间来区别数据0和1。
程序中:
发送bbit位1 : 高电平保持 500us 跳变到低电平 保持 450us
发送bbit位0 : 高电平保持 500us 跳变到低电平 保持 1000us
发送的为一个 32位数据, 数据内容为 CUPID加密运行后的值。
void RF_SendData(u32 Key)
{
uint8_t i,j;
uint32_t MSB_Temp = 0x00800000;
uint32_t Send_data = 0;
//Send_data2 = 0;
static uint32_t Lock_Code;
Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
// Send_data = (CpuID[0] << 4)|Key;
for(i = 0; i < 3; i ++) //循环发送3次高频数据
{
LED_ON();
for(j = 0; j < 12; j ++)
{
RFOUT_One();
Delay_US(500);
RFOUT_Zeor();
Delay_US(500);
}
RFOUT_One(); //发送数据头
Delay_US(500);
RFOUT_Zeor();
LED_OFF();
for(j = 0; j < 10; j ++) Delay_US(500); // 5mS
// Send_data = CpuID[0];
Send_data = Lock_Code;
// Send_data= 0x12345678;
MSB_Temp = 0x80000000;
for(j = 0; j < 32; j ++) //发送32bit数据
{
if((Send_data & MSB_Temp) != 0) //数据1
{
RFOUT_One();
Delay_US(500);
RFOUT_Zeor();
Delay_US(450);
}
else //数据0
{
RFOUT_One();
Delay_US(500);
RFOUT_Zeor();
Delay_US(1000);
}
MSB_Temp = MSB_Temp >> 1;
}
RFOUT_One();
Delay_US(1100);
RFOUT_Zeor();
Delay_MS(18);
}
}
SYN480R 接收
1,中断接收 bit位, 每100us去检测 SYN480接收脚的状态,及保持电平时间。
检测低电平时间在 300us~700us 间时,判定为接收到数据 bit 1
检测低电平时间在 700us~1300us 间时,判定为接收到数据 bit0
//定时中断 100us
void TIM4_IRQHandler (void)
{
if(TIM_GetITStatus( TIM4, TIM_IT_Update) != RESET )
{
TIM_ClearITPendingBit(TIM4 , TIM_FLAG_Update);
if(RFFull) return; //接收完数据没有处理
if(!RFin) {LL_w ++; RFBit = 0;} //433接收脚IN, PB1=0 记录低电平长度
else // PB1=1 //433接收脚IN, PB1=1
{
if(!RFBit) //RFBit在上句if置0成立 433M接收脚IN发生跳变 PB1=1
{
if(First_flag == 0) //没有同步过初值为0
{
if((LL_w > 40)&&(LL_w < 60)) // 4000us < LL_w < 6000us
{
First_flag = 1;
BitCount = 0;
}
}
else // ÉÏFirst_flag = 1;
{
if((LL_w > 3)&&(LL_w <= 7)) // PB1=0 低电平长度 //300us 700us
{
Buff_B[BitCount/8] = Buff_B[BitCount/8] << 1; //433M 数据
Buff_B[BitCount/8] = Buff_B[BitCount/8] | 0x01;
BitCount ++;
// if(BitCount==24)
if(BitCount==32)
{
BitCount = 0;
First_flag = 0;
RFFull = 1;
}
}
else if((LL_w > 7)&&(LL_w < 13))
{
Buff_B[BitCount/8] = Buff_B[BitCount/8] << 1;
BitCount ++;
// if(BitCount==24)
if(BitCount==32)
{
BitCount = 0;
First_flag = 0;
RFFull = 1;
}
}
else //错误
{
First_flag = 0;
BitCount = 0;
RFFull = 0;
}
}
LL_w = 0;
}
RFBit = 1; //记录IO状态
}
}
}
2,接收到的433MHz数据处理
uint32_t RF_Remote(void) //433M数据处理
{
uint16_t i;
uint16_t crc;
uint8_t RF_UartSend[10];
uint8_t Buffer[5];
uint32_t Lock_Code;
for(i = 0; i < 4; i ++) //将接收缓存区的数据复制过来
Buffer[i] = Buff_B[i];
RFFull = 0; //清楚接收完成标志
}
资源工程:https://download.csdn.net/download/jiangchao3392/11166623