单数据线自定义通讯驱动程序
简介:在双MCU单片机之间通过一根数据线(GPIO口)进行通讯的驱动(50us中断一次)
发送数据的数据头:定义为90次中断的低电平(50us*90 = 4.5ms) 270-90此中断的高电平(50us*180 = 9ms)
发送数据1:定义为11次中断的低电平(50us*11 = 550us) 45-11次中断的高电平(50us*34 = 1.7ms)
发送数据0:定义为11次中断的低电平(50us*11 = 550us) 22-11次中断的高电平(50us*11 = 550us)
两个MCU之间分为发送方和回复方,发送方首先发送数据包,回复方接收到完整的数据后 等待10ms 的延时后发送回 复数据给发送方。
STM8s定时器配置:
// 定时50us
static void TIM4_Config(void)
{
TIM4_DeInit();
TIM4_TimeBaseInit(TIM4_PRESCALER_4,199); //50us
TIM4->EGR = 0x01; //允许更新
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); //允许中断
TIM4_Cmd(ENABLE); //使能计数
}
50us中断函数:
/*******************************************************************************
#Function : Interrupt_Time4Up
#Description : 定时器中断运行,定时50us执行通讯驱动程序
#Parameter : NULL
#Return : NULL
#AuthorAndData : huangzhigang 20140915
*******************************************************************************/
void Interrupt_Time4Up(void)
{
if(!g_b1SciTxFlag)
{
s_SCIRxDriver(); //串行数据接收驱动函数
}
else
{
s_SCITxDriver(); //串行数据发送驱动函数
}
}
通讯发送和接收驱动:
union STATUS_BIT_U uInterruptStatusBufFlag = {0};
//50us基础时钟
#define MSE