首页 > 编程知识 正文

stm32wifi通信协议,STM32通信协议

时间:2023-05-04 16:09:41 阅读:157562 作者:4290

韦根26位STM32收发简介: Wiegand (韦根)协议是摩托罗拉公司制定的通信协议,常用于门禁系统的读卡器和IC卡。 该协议没有规定数据传输的波特率和长度。 目前市场上常用的数据长度为26位、34位、36位、44位等。 34bit与26bit的原理相同,所以代码只有很小的差异,但这里主要论述的是26bit

Wiegand 26格式:

奇偶校验位1HIDPID奇偶校验位21bit2~9bit10~25bit26bit2~9第9比特: ID卡HID码的低位8比特

第10~25位: ID卡的PID号码

第1位:2~13位奇偶校验位

第26位:第14~25位奇偶校验位

奇偶校验位1: 2~13比特中,在如果有偶数个1情况下,奇偶校验位1=0,反之为1

奇偶校验位2:14~25比特中,在如果有奇数个个1情况下,奇偶校验位2=0,反之亦然1

通信:

wegan的传输主要取决于两条数据线,一条为DATA0,另一条为DATA1。 从名称上可以看出,DATA0主要发送数据“0”,而DATA1主要发送数据“1”。

发送:

空闲的时候,两条数据线的水平都很高。 想发送“0”时,DATA0数据线从高电平被拉低并保持100us-300us的持续时间发送数据“0”。 发送数据“1”的方法也很相似,但请注意,发送1位数据后,要在有1ms~3ms的时间间隔上发送下一位数据。

上图是我在逻辑分析中抓取的数据,从图中可以看出,低电平持续的时间大概是200us,下一个信号重新发出的时间在2ms左右。

接收:

由于wiegan的接收不需要判断脉冲宽度,所以速度快,只需要一个等级就可以了。 所以,通常是用中断接收。 两张卡片的最小级别时间间隔为250ms,所以如果接收多张卡片,可以使用该时间来判断一张卡片上的数据是否完全接收。

整体介绍结束后,让我们来看看代码的实现。

韦根26发送:

intWG_send26(unsignedchar*str ) {unsigned char i,j,one_num=0; unsigned char even=0; unsigned char odd=0; unsigned short check_temp; 无符号短消息WG data=0; if (空值==str ) return -1; check_temp=str[0]; for(I=0; i 8; I ) if(check_tempi0x80 ) one_num=1; }check_temp=str[1]; for(I=0; i 4; I ) if(check_tempi0x80 ) one_num=1; }if(one_num%2) even=1; elseeven=0; //奇校验one_num=0; check_temp=str[1]; for(I=0; i 4; I ) if(check_tempi0x01 ) one_num=1; }check_temp=str[2]; for(I=0; i 8; I ) if(check_tempi0x80 ) one_num=1; }if(one_num%2) odd=0; elseodd=1; DATA0=1; DATA1=1; dlay_ms(1; if(Even ) {WG_send_bit_1; }else{WG_send_bit_0(; 发送//24位for (I=0; i3; I ) {wgdata=str[i]; for(j=0; j8; j () if ) (wgdataj )0x80 ) {WG_send_bit_1); }else{WG_send_bit_0(; }}if(odd ) ) {WG_send_bit_1); }else{WG_send_bit_0(; }DATA0=1; DATA1=1; 返回0; (薇甘菊26的接收:

intWG_recv26(unsignedchar*str ) if(WG_state ) if ) WG_count==26 ) str(0)=WG_data170xff; str[1]=WG_Data90xFF; str[2]=WG_Data10xFF; check_Even_odd(str; if(Even==(WG_data250x01 ) odd==(WG _ data0x 01 ) ) {WG_State=0; WG_Data=0; WG_Count=0; 返回1; }else {WG_State=0; WG_Data=0; WG_Count=0; 返回0; }}WG_State=0; WG_Data=0; WG_Count=0; 返回- 1; }return -2; }中断:

//外部中断3服务器程序voidexti0_IRQHandler(void ) if ) exti_getitstatus ) exti_line0)!=reset(cqdhxc_setcounter ) cqd hxc 3,0 ); cqdhxc_cmd(cqdhxc3,ENABLE ); if(data_in0==0) {WG_Data=1; WG_Count; } exti _ clearitpendingbit (exti _ line0); 清除LINE2的中断标志位}//外部中断4服务程序voidexti1_IRQHandler(void ) if ) exti_getitstatus ) exti_line1)!=reset(cqdhxc_setcounter ) cqd hxc 3,0 ); cqdhxc_cmd(cqdhxc3,ENABLE ); if(data_in1==0) WG_data=) WG_data1 )|0x01; WG_Count; } exti _ clearitpendingbit (exti _ line1); 清除LINE3的中断标志位}//定时器3中断服务程序void//cqdhxc3_IRQHandler(void )//cqdhxc3中断(if(cqdhxc_getitstatus )=检查是否发生=reset//cqdhxc3更新中断{ cqd hxc _ clearitpendingbit (cqd hxc 3,cqdhxc_IT_Update ); cqdhxcx更新中断标志WG_State=1; cqdhxc_cmd(cqdhxc3,DISABLE ); )还记录了Weigan 26收发的步骤和步骤。 可能有说明不清楚的地方或错误。 发现错误的朋友请注意以下事项。 我很容易更改。

整个测试工序可以通过以下链接下载。 没有积分的话请留下邮箱地址。 我看了就发送。 单片机使用的是STM32f103系列的(

下载项目

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。