自定协议:该协议分为头部、数据部、尾部三个部分,默认状态为高电平,协议头部为持续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-创新互联
文章链接:https://www.cdcxhl.com/article30/djsepo.html
成都网站建设公司_创新互联,为您提供移动网站建设、网站策划、商城网站、微信公众号、软件开发、面包屑导航
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联