关于stm32驱动rfid时一些问题的解决办法(开源)

关于rfid的使用我也是摸爬滚打了两周才用明白,网上也没找到很多相关的优质教程和一些硬件问题的解决办法,所以我写了这篇文章如果你也在使用rfid出现了问题的话可以参考一下哈哈

1.关于rfid的硬件问题

24c8f8ce108d4e9b80ad3c0849e789cd.jpg

 这里放一张rc522的照片,驱动这个模块呢我们是需要稳定的电压的,如果电压不稳定它的红灯就会一闪一闪的,由于上电RFID只会初始化一次,所以当出现电压不稳定(rc522电源灯一直在闪)的情况,由于rc522的特性或者是c8t6的特性(这部分我猜的),会导致rc522功能失灵,也就是无法录入或者“开门”,哪怕电压稳定后也无法使用。

这个时候需要重新初始化RFID,也就是把RFID_init();放到while(1)的第一行去就行了。

注意!在rc522电源灯一直在闪的时候也是无法使用的,需要稳定后才能使用。

2.如果电压稳定灯不乱闪还是不能用呢

如果这样到话就可以考虑是这个模块坏掉了哈哈哈(虽然这个模块没有那么容易坏掉的)当然也很有可能是代码出现了问题

这就是我是用rfid的时候遇到的问题,需要代码的话可以私信我找我要代码哈哈哈这里提供一下主函数的代码叭(亲测好用)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "rc522_config.h"
#include "rc522_function.h"
#include "OLED.h"
uint32_t dat = 0;
#define     REQ_ALL               0x52
void WaitCardOff(void)
{
	char          status;
  unsigned char	TagType[2];
 
	while(1)
	{
		status = PcdRequest(REQ_ALL, TagType);
		if(status!=MI_OK)
		{
			status = PcdRequest(REQ_ALL, TagType);
			if(status!=MI_OK)
			{
				status = PcdRequest(REQ_ALL, TagType);
				if(status!=MI_OK)
				{
					return;
				}
			}
		}
		Delay_ms(10);
	}
}
void IC_test ( void )
{
	char cStr [ 30 ];
  u8 ucArray_ID [ 4 ];                                                                                             //先后存放IC卡的类型和UID(IC卡序列号)
	u8 ucStatusReturn;                                                                                               //返回状态
  static u8 ucLineCount = 0; 
	
  while ( 1 )
  { 
		if ( ( ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID ) ) != MI_OK )                                    //寻卡
		{
				ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID );		                                                 //若失败再次寻卡
		}
		if ( ucStatusReturn == MI_OK  )
		{
			if ( PcdAnticoll ( ucArray_ID ) == MI_OK )                                                                   //防冲撞(当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作)
			{
				//sprintf ( cStr, "The Card ID is: %02X%02X%02X%02X", ucArray_ID [ 0 ], ucArray_ID [ 1 ], ucArray_ID [ 2 ], ucArray_ID [ 3 ] );
				
				
				//printf ( "%s\r\n",cStr ); 
					  dat |= (uint32_t)(ucArray_ID[0]<<24);
	  dat |= (uint32_t)(ucArray_ID[1]<<16);
	  dat |= (uint32_t)(ucArray_ID[2]<<8);
	  dat |= (uint32_t)(ucArray_ID[3]);

				OLED_ShowHexNum(1,1,dat,4);
		PcdHalt();
				if ( ucLineCount == 0 )
				
				ucLineCount ++;
				
				if ( ucLineCount == 17 ) ucLineCount = 0;
				WaitCardOff();
				
				
			}
			
		}
		RC522_Init();
		
  }
	
	
}


int main(void)
{
	OLED_Init();

	RC522_Init ();     //RC522

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-29 10:42:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-29 10:42:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-29 10:42:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-29 10:42:01       20 阅读

热门阅读

  1. 代谢组数据分析三:差异分析

    2024-04-29 10:42:01       15 阅读
  2. Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别

    2024-04-29 10:42:01       14 阅读
  3. 一起深度学习

    2024-04-29 10:42:01       16 阅读
  4. 第六十四章 Apache 的替代选项 (Windows)

    2024-04-29 10:42:01       13 阅读
  5. Python索引用法:理解Python中的索引及其用法

    2024-04-29 10:42:01       18 阅读
  6. MySql:连接和关闭

    2024-04-29 10:42:01       15 阅读