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