0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >业界动态 > 泰克合作伙伴柯泰发布基于TOF的3D传感VCSEL阵列测试

泰克合作伙伴柯泰发布基于TOF的3D传感VCSEL阵列测试

来源: 中电网
2021-03-10
类别:业界动态
eye 21
文章创建人 拍明

原标题:泰克合作伙伴柯泰发布基于TOF的3D传感VCSEL阵列测试

基于STM32实现韦根(Wiegand)协议接收,通常用于门禁系统、考勤系统等需要读取RFID卡信息的场合。韦根协议是一种简单的串行通信协议,通常用于读卡器与控制器之间的数据传输。其基本的信号特性包括两条数据线(D0和D1),以及一个时钟信号(通常由数据线的跳变产生)。

以下是一个基于STM32实现韦根协议接收的基本步骤和示例代码:

硬件准备

  1. STM32开发板:确保开发板上有足够的GPIO口用于接收韦根信号。

  2. 韦根读卡器:通常读卡器会提供D0、D1和GND三个接口。

  3. 连接线:将读卡器的D0、D1分别连接到STM32的GPIO口,GND连接到开发板的GND。

软件实现

1. 配置GPIO

首先,需要配置STM32的GPIO口为输入模式,用于接收韦根信号。可以使用STM32的HAL库或标准外设库进行配置。

c复制代码


// 假设D0连接到GPIOA的第0脚,D1连接到GPIOA的第1脚

GPIO_InitTypeDef GPIO_InitStruct = {0};



// 使能GPIOA时钟

__HAL_RCC_GPIOA_CLK_ENABLE();



// 配置D0引脚

GPIO_InitStruct.Pin = GPIO_PIN_0;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);



// 配置D1引脚

GPIO_InitStruct.Pin = GPIO_PIN_1;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

2. 初始化定时器(可选)

如果需要精确测量韦根信号的脉冲宽度或时间间隔,可以配置一个定时器来捕捉这些信号。

3. 编写中断服务程序

为了实时响应韦根信号的跳变,可以配置外部中断。例如,当D0或D1发生变化时,触发中断。


image.png

c复制代码


// 假设使用EXTI0和EXTI1中断

void MX_GPIO_EXTI_Init(void)

{

__HAL_RCC_SYSCFG_CLK_ENABLE();



// 配置D0引脚为EXTI0中断

GPIO_InitTypeDef GPIO_InitStruct = {0};

GPIO_InitStruct.Pin = GPIO_PIN_0;

GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);



// 配置EXTI0中断优先级和使能

HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);

HAL_NVIC_EnableIRQ(EXTI0_IRQn);



// 配置D1引脚为EXTI1中断

GPIO_InitStruct.Pin = GPIO_PIN_1;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);



// 配置EXTI1中断优先级和使能

HAL_NVIC_SetPriority(EXTI1_IRQn, 2, 0);

HAL_NVIC_EnableIRQ(EXTI1_IRQn);

}



// EXTI0中断服务程序

void EXTI0_IRQHandler(void)

{

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);

}



// EXTI1中断服务程序

void EXTI1_IRQHandler(void)

{

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);

}



// GPIO中断回调函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

static uint8_t bit_count = 0;

static uint32_t data = 0;

static uint8_t parity = 0;



if (GPIO_Pin == GPIO_PIN_0)

{

// D0信号变化

// 根据D0和D1的状态确定当前位

uint8_t bit = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_SET) ? 1 : 0;



// 更新数据和奇偶校验

data = (data >> 1) | (bit << 23);

parity += bit;



// 位计数增加

bit_count++;



// 如果接收完一个字节(26位或34位,根据韦根版本)

if (bit_count == 26 || bit_count == 34)

{

// 检查奇偶校验

if ((parity % 2) == 0)

{

// 奇偶校验正确,处理数据

ProcessWiegandData(data);

}



// 重置位计数、数据和奇偶校验

bit_count = 0;

data = 0;

parity = 0;

}

}

// 如果需要处理D1信号的变化,可以在这里添加代码

}



// 处理韦根数据的函数

void ProcessWiegandData(uint32_t data)

{

// 在这里处理接收到的韦根数据

// 例如,将数据存储到缓冲区或发送到其他模块

}

注意事项

  1. 韦根协议版本:韦根协议有多个版本(如韦根26、韦根34等),不同版本的数据格式和奇偶校验方式可能有所不同。在编写代码时,需要确保与所使用的读卡器协议相匹配。

  2. 噪声处理:韦根信号可能会受到电磁干扰或机械振动的影响,导致误触发中断。因此,在编写代码时,需要添加适当的噪声处理逻辑,以提高系统的稳定性。

  3. 时序要求:韦根协议对信号的时序有一定的要求。在编写代码时,需要确保能够正确捕捉和处理韦根信号的上升沿和下降沿。

通过上述步骤和示例代码,你可以在STM32上实现韦根协议的接收功能。根据具体的应用需求,你可能还需要对代码进行进一步的优化和扩展。


责任编辑:

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

资讯推荐
云母电容公司_云母电容生产厂商

云母电容公司_云母电容生产厂商

开关三极管13007的规格参数、引脚图、开关电源电路图?三极管13007可以用什么型号替代?

开关三极管13007的规格参数、引脚图、开关电源电路图?三极管13007可以用什么型号替代?

74ls74中文资料汇总(74ls74引脚图及功能_内部结构及应用电路)

74ls74中文资料汇总(74ls74引脚图及功能_内部结构及应用电路)

芯片lm2596s开关电压调节器的中文资料_引脚图及功能_内部结构及原理图_电路图及封装

芯片lm2596s开关电压调节器的中文资料_引脚图及功能_内部结构及原理图_电路图及封装

芯片UA741运算放大器的资料及参数_引脚图及功能_电路原理图?ua741运算放大器的替代型号有哪些?

芯片UA741运算放大器的资料及参数_引脚图及功能_电路原理图?ua741运算放大器的替代型号有哪些?

28nm光刻机卡住“02专项”——对于督工部分观点的批判(睡前消息353期)

28nm光刻机卡住“02专项”——对于督工部分观点的批判(睡前消息353期)

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告