自定义协议——CW32与九齐051f-创新互联

协议内容:

自定协议:该协议分为头部、数据部、尾部三个部分,默认状态为高电平,协议头部为持续4ms低电平,数据部为1-12ms的高电平(分别对应不12个挡位),尾部为持续4ms的低电平。

创新互联致力于互联网网站建设与网站营销,提供网站制作、成都网站建设、网站开发、seo优化、网站排名、互联网营销、成都小程序开发、公众号商城、等建站开发,创新互联网站建设策划专家,为不同类型的客户提供良好的互联网应用定制解决方案,帮助客户在新的全球化互联网环境中保持优势。

接收:识别头部、数据部分、尾部,并通过识别到的协议选择挡位。

示意图

在这里插入图片描述

代码 发送(CW32单片机)

只是把关键函数写出来供大家学习,并没有把整套代码copy过来。

void Send_Protocol()
{if(Protocol_Status)
	{if(Time_Send_Protocol >=1){	Protocol_cnt++;
			Time_Send_Protocol = 0;
		}
		if(Protocol_cnt<=  FIXED_4MS){//4ms
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_RESET);
		}
		else if(Protocol_cnt<= Protocol_time +   FIXED_4MS){//4ms + N ms
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_SET);	
		}
		else if(Protocol_cnt<= (Protocol_time +   2 * FIXED_4MS)){//4ms + N ms  +4ms
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_RESET);
		}
		else{	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_SET);
			Protocol_Status = 0;
			Protocol_time = 0;
		}
	}
	
}
接收(九齐单片机)
//直接全程用延时
void Check_Protocol(void){	
	if(PORTBbits.PB2 == RESET)
	{delay_time = 0;
		recv_num = 0;
		delay_500us();
		while(PORTBbits.PB2 != SET)
		{	delay_time++;
			delay_1ms();
			if(delay_time >= 20){		return;
			}
		}
		if(delay_time<2|| delay_time>5)
		{	return;
		}
		
		while(PORTBbits.PB2 == SET)
		{	recv_num++;
			delay_1ms();
			if(recv_num >= 50){		return;
			}
		}
		
		delay_time =0;
		while(PORTBbits.PB2 != SET)
		{	delay_time++;
			delay_1ms();
			if(delay_time >= 20){		return;
			}
		}
		if(delay_time<2 || delay_time>5)
		{	return;
		}
	}
	
	if(PORTBbits.PB3 == RESET)
	{		
		delay_time = 0;
		recv_num = 0;
		delay_500us();
		while(PORTBbits.PB3 != SET)
		{	delay_time++;
			delay_1ms();
			if(delay_time >= 20){		return;
			}
		}
		if(delay_time<2|| delay_time>5)
		{	return;
		}
		
		while(PORTBbits.PB3 == SET)
		{	recv_num++;
			delay_1ms();
			if(recv_num >= 50){		return;
			}
		}
		
		delay_time =0;
		while(PORTBbits.PB3 != SET)
		{	delay_time++;
			delay_1ms();
			if(delay_time >= 20){		return;
			}
		}
		if(delay_time<2 || delay_time>5)
		{	return;
		}
	}
//exc
	if(recv_num != 0){iic_SwitchSend(recv_num);
		recv_num = 0;
	}
	else{return;
	}

}
数据选挡
#define Gear0		(10)
#define Gear1		(20)
#define Gear2		(30)
#define Gear3		(40)
#define Gear4		(60)
#define Gear5		(80)
#define Gear6		(100)
#define Gear7		(120)
#define Gear8		(140)
#define Gear9		(160)
#define Gear10		(180)
#define Gear11		(250)

void iic_SwitchSend(uint8_t recv){iic_init();				//重新初始化
		
	iic_sdin_set();
	iic_sclk_set();			//先拉高,准备发送
	delay_1ms();


	switch(recv){case 1:
				//Gear0
			break;
		case 2:
				//Gear1
			break;
		case 3:
				//Gear2
			break;
		case 4:
				//Gear3
			break;
		case 5:
				//Gear4
			break;
		case 6:
				//Gear5
			break;
		case 7:
				//Gear6
			break;
		case 8:
				//Gear7
		break;
		case 9:
				//Gear8
			break;
		case 10:
				//Gear9
		break;
		case 11:
				//Gear10
			break;
		case 12:
				//Gear11
		break;
		default:
		break;
	}

	
}

该协议已经上两个单片机验证过,没有问题。
非常感谢各位的观看!

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:自定义协议——CW32与九齐051f-创新互联
链接分享:http://pwwzsj.com/article/djsepo.html