Car/my_lib/data_channel.c

181 lines
4.4 KiB
C
Raw Permalink Normal View History

2025-04-18 16:22:24 +08:00
//#include "uart_my.h"
//#include "exit.h"
//#include "led.h"
#include "usart.h"
#define __DATA_CHANNEL_C__
#include "data_channel.h"
u8 Zigbee_Rx_Max =8;
u8 Wifi_Rx_num =0;
u8 Wifi_Rx_flag=0;
u8 Zigbee_Rx_num =0;
u8 Zigbee_Rx_flag=0;
u8 Zigbee_RxZt_flag =0;
u8 rxd1_timer4_1ms,rxd1_timer4_flag;
/***************************************************************
** <EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD> <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>4<EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>޲<EFBFBD><EFBFBD><EFBFBD>
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>
****************************************************************/
void TIM4_IRQHandler(void)
{
/* if(TIM4->SR&0X0001) // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
{
rxd1_timer4_1ms++;
if(rxd1_timer4_1ms>5) // 5msʱ<73><CAB1><EFBFBD>ѵ<EFBFBD><D1B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
rxd1_timer4_flag=1;
TIM4->CR1&=~(0x01); // <20><>ʹ<EFBFBD>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>4
Wifi_Rx_flag =1;
}
}
TIM4->SR&=~(1<<0); // <20><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ */
if(TIM_GetITStatus(TIM4,TIM_FLAG_Update) == SET)
{
rxd1_timer4_1ms++;
if(rxd1_timer4_1ms>5) // 5msʱ<73><CAB1><EFBFBD>ѵ<EFBFBD><D1B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
rxd1_timer4_flag=1;
TIM_Cmd(TIM4,ENABLE);
Wifi_Rx_flag =1;
}
TIM_ClearITPendingBit(TIM4,TIM_FLAG_Update);
}
}
/***************************************************************
** <EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD> <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>4<EFBFBD>жϳ<EFBFBD>ʼ<EFBFBD><EFBFBD>
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> arr<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>װֵ
** psc<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>
****************************************************************/
void Timer4_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //ʱ<><CAB1>ʹ<EFBFBD><CAB9>
//<2F><>ʱ<EFBFBD><CAB1>TIM4<4D><34>ʼ<EFBFBD><CABC>
TIM_TimeBaseStructure.TIM_Period = arr; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EEB6AF><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>װ<EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ֵ
TIM_TimeBaseStructure.TIM_Prescaler =psc; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪTIMxʱ<78><CAB1>Ƶ<EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶֵ
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>ӷָ<D3B7>:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM<49><4D><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>ģʽ
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>TIMx<4D><78>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //ʹ<><CAB9>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>TIM4<4D>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>NVIC<49><43><EFBFBD><EFBFBD>
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM4<4D>ж<EFBFBD>
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>0<EFBFBD><30>
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3<EFBFBD><33>
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ<51><CDA8><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
NVIC_Init(&NVIC_InitStructure); //<2F><>ʼ<EFBFBD><CABC>NVIC<49>Ĵ<EFBFBD><C4B4><EFBFBD>
TIM_Cmd(TIM4, ENABLE); //ʹ<><CAB9>TIMx
}
void Wifi_data_Receive( u8 res) // wifi <20><><EFBFBD>ݽ<EFBFBD><DDBD>մ<EFBFBD><D5B4><EFBFBD>
{
rxd1_timer4_1ms=0;
if(rxd1_timer4_flag==1) // 5msʱ<73><CAB1> <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>¿<EFBFBD>ʼ
{
rxd1_timer4_flag=0;
TIM4->CR1|=0x01; //ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>4
Wifi_Rx_num =0;
Wifi_Rx_Buf[Wifi_Rx_num]=res;
}
else if(Wifi_Rx_num < WIFI_MAX_NUM )
{
Wifi_Rx_Buf[++Wifi_Rx_num]=res; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
}
else // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5>Ҫ
{
;
}
}
void Zigbee_data_Receive( u8 res) // zigbee <20><><EFBFBD>ݽ<EFBFBD><DDBD>մ<EFBFBD><D5B4><EFBFBD>
{
u8 sum;
if(Zigbee_Rx_num >0)
{
Zigb_Rx_Buf[Zigbee_Rx_num]=res;
Zigbee_Rx_num++;
}
else if (res==0x55) // Ѱ<>Ұ<EFBFBD>ͷ
{
Zigb_Rx_Buf[0]=res;
Zigbee_Rx_num=1;
}
else Zigbee_Rx_num =0;
if(Zigbee_Rx_num >= Zigbee_Rx_Max)
{
if((Zigb_Rx_Buf[Zigbee_Rx_Max -1]==0xbb)&&(Zigbee_RxZt_flag ==0)&&(Zigb_Rx_Buf[1]!=0xfd)) // <20>жϰ<D0B6>β //change by ygm
{
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
//ע<><EFBFBD><E2A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱӦ<CAB1>öԺ<C3B6><D4BA><EFBFBD>256ȡ<36>
Zigbee_Rx_num=0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Zigbee_RxZt_flag =0; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
sum=(Zigb_Rx_Buf[2]+Zigb_Rx_Buf[3]+Zigb_Rx_Buf[4]+Zigb_Rx_Buf[5])%256;
if(sum==Zigb_Rx_Buf[6])
{
Zigbee_Rx_flag =1; // ָ<><D6B8><EFBFBD><EFBFBD>֤<EFBFBD><D6A4>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>־λ<D6BE><CEBB>1
}
else {Zigbee_Rx_flag =0;}
}
else if((Zigb_Rx_Buf[1]==0xfd)&&(Zigbee_RxZt_flag ==0))
{
if(Zigb_Rx_Buf[2]>8)
{
Zigbee_Rx_Max = Zigb_Rx_Buf[2];
Zigbee_RxZt_flag =1; // <20><><EFBFBD><EFBFBD>״̬1 <20><><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
Zigbee_Rx_num=0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(Zigb_Rx_Buf[Zigbee_Rx_Max-1]==0xbb)
{
Zigbee_RxZt_flag =0; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
// send_Flag=1; //change by ygm
Zigbee_Rx_Max =8;
}
}
}
else if((Zigbee_RxZt_flag ==1)&&(Zigb_Rx_Buf[Zigbee_Rx_Max -1]==0xbb))
{
Zigbee_Rx_num=0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Zigbee_RxZt_flag =0; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
// send_Flag=1;
Zigbee_Rx_Max =8;
}
else {Zigbee_Rx_flag =0; Zigbee_Rx_num =0;} //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD>ָ<EFBFBD><EFBFBD>򿪷<EFBFBD><F2BFAAB7><EFBFBD><EFBFBD><EFBFBD>
}
}