STM32F103驱动MFRC522Word格式.docx

上传人:b****6 文档编号:20501819 上传时间:2023-01-23 格式:DOCX 页数:27 大小:20.82KB
下载 相关 举报
STM32F103驱动MFRC522Word格式.docx_第1页
第1页 / 共27页
STM32F103驱动MFRC522Word格式.docx_第2页
第2页 / 共27页
STM32F103驱动MFRC522Word格式.docx_第3页
第3页 / 共27页
STM32F103驱动MFRC522Word格式.docx_第4页
第4页 / 共27页
STM32F103驱动MFRC522Word格式.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

STM32F103驱动MFRC522Word格式.docx

《STM32F103驱动MFRC522Word格式.docx》由会员分享,可在线阅读,更多相关《STM32F103驱动MFRC522Word格式.docx(27页珍藏版)》请在冰豆网上搜索。

STM32F103驱动MFRC522Word格式.docx

#definePICC_RESTORE0xC2//调块数据到缓冲区

#definePICC_TRANSFER0xB0//保存缓冲区中数据

#definePICC_HALT0x50//休眠

//MF522FIFO长度定义

#defineDEF_FIFO_LENGTH64//FIFOsize=64byte

#defineMAXRLEN18

//MF522寄存器定义

//PAGE0

#defineRFU000x00

#defineCommandReg0x01

#defineComIEnReg0x02

#defineDivlEnReg0x03

#defineComIrqReg0x04

#defineDivIrqReg0x05

#defineErrorReg0x06

#defineStatus1Reg0x07

#defineStatus2Reg0x08

#defineFIFODataReg0x09

#defineFIFOLevelReg0x0A

#defineWaterLevelReg0x0B

#defineControlReg0x0C

#defineBitFramingReg0x0D

#defineCollReg0x0E

#defineRFU0F0x0F

//PAGE1

#defineRFU100x10

#defineModeReg0x11

#defineTxModeReg0x12

#defineRxModeReg0x13

#defineTxControlReg0x14

#defineTxAutoReg0x15

#defineTxSelReg0x16

#defineRxSelReg0x17

#defineRxThresholdReg0x18

#defineDemodReg0x19

#defineRFU1A0x1A

#defineRFU1B0x1B

#defineMifareReg0x1C

#defineRFU1D0x1D

#defineRFU1E0x1E

#defineSerialSpeedReg0x1F

//PAGE2

#defineRFU200x20

#defineCRCResultRegM0x21

#defineCRCResultRegL0x22

#defineRFU230x23

#defineModWidthReg0x24

#defineRFU250x25

#defineRFCfgReg0x26

#defineGsNReg0x27

#defineCWGsCfgReg0x28

#defineModGsCfgReg0x29

#defineTModeReg0x2A

#defineTPrescalerReg0x2B

#defineTReloadRegH0x2C

#defineTReloadRegL0x2D

#defineTCounterValueRegH0x2E

#defineTCounterValueRegL0x2F

//PAGE3

#defineRFU300x30

#defineTestSel1Reg0x31

#defineTestSel2Reg0x32

#defineTestPinEnReg0x33

#defineTestPinValueReg0x34

#defineTestBusReg0x35

#defineAutoTestReg0x36

#defineVersionReg0x37

#defineAnalogTestReg0x38

#defineTestDAC1Reg0x39

#defineTestDAC2Reg0x3A

#defineTestADCReg0x3B

#defineRFU3C0x3C

#defineRFU3D0x3D

#defineRFU3E0x3E

#defineRFU3F0x3F

//和MF522通讯时返回的错误代码

#defineMI_OK0

#defineMI_NOTAGERR1//(-1)

#defineMI_ERR2//(-2)

#defineSHAQU10X01

#defineKUAI40X04

#defineKUAI70X07

#defineREGCARD0xa1

#defineCONSUME0xa2

#defineREADCARD0xa3

#defineADDMONEY0xa4

#definespi_csPEout(4)

#definespi_ckPEout(3)

#definespi_mosiPEout

(2)

#definespi_misoPEin

(1)

#definespi_rstPEout(0)

#defineSET_SPI_CSspi_cs=1

#defineCLR_SPI_CSspi_cs=0

#defineSET_SPI_CKspi_ck=1

#defineCLR_SPI_CKspi_ck=0

#defineSET_SPI_MOSIspi_mosi=1

#defineCLR_SPI_MOSIspi_mosi=0

#defineSTU_SPI_MISOspi_miso

#defineSET_RC522RSTspi_rst=1

#defineCLR_RC522RSTspi_rst=0

externunsignedcharLastKeyA[6];

//NO.2卡

externunsignedcharNewKeyA[6];

externunsignedcharNewKey[16];

externunsignedcharRC522_Read_Data[16];

externunsignedcharRC522_Write_Data[16];

externunsignedcharMLastSelectedSnr[4];

externunsignedcharRevBuffer[30];

voidRC522_GPIO_Configuration(void);

unsignedcharSPIReadByte(void);

voidSPIWriteByte(unsignedcharSPIData);

charPcdRequest(unsignedcharreq_code,unsignedchar*pTagType);

charPcdAnticoll(unsignedchar*pSnr);

charPcdSelect(unsignedchar*pSnr);

charPcdAuthState(unsignedcharauth_mode,unsignedcharaddr,unsignedchar*pKey,unsignedchar*pSnr);

charPcdRead(unsignedcharaddr,unsignedchar*pData);

charPcdWrite(unsignedcharaddr,unsignedchar*pData);

charPcdHalt(void);

voidCalulateCRC(unsignedchar*pIndata,unsignedcharlen,unsignedchar*pOutData);

charPcdReset(void);

charM500PcdConfigISOType(unsignedchartype);

unsignedcharReadRawRC(unsignedcharAddress);

voidWriteRawRC(unsignedcharAddress,unsignedcharvalue);

voidSetBitMask(unsignedcharreg,unsignedcharmask);

voidClearBitMask(unsignedcharreg,unsignedcharmask);

charPcdComMF522(unsignedcharCommand,

unsignedchar*pInData,

unsignedcharInLenByte,

unsignedchar*pOutData,

unsignedint*pOutLenBit);

voidPcdAntennaOn(void);

voidPcdAntennaOff(void);

voidInitRc522(void);

#endif

rc522.h"

//////////////////////////////////////////////////////////////////////////////////

//深圳海德电子有限公司

//公司网站:

//修改日期:

2015/7/21

//版本:

V1.0

//版权所有,XX。

//程序员:

李俊

unsignedcharLastKeyA[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};

unsignedcharNewKeyA[6]={0x80,0x80,0x80,0x80,0x80,0x80};

unsignedcharNewKey[16]={0x80,0x80,0x80,0x80,0x80,0x80,\

0xff,0x07,0x80,0x69,\

0x80,0x80,0x80,0x80,0x80,0x80};

unsignedcharRC522_Read_Data[16];

unsignedcharRC522_Write_Data[16];

unsignedcharMLastSelectedSnr[4];

unsignedcharRevBuffer[30];

voidRC522_GPIO_Configuration(void)

{

RCC->

APB2ENR|=1<

<

6;

//使能GPIOE的时钟

GPIOE->

CRL&

=0XFFF00000;

CRL|=0X00022282;

ODR|=1<

1;

}

//------------------------------------------

//SPI读取数据

unsignedcharSPIReadByte(void)

unsignedcharSPICount;

//Counterusedtoclockoutthedata

unsignedcharSPIData;

SPIData=0;

//CLR_SPI_CS;

for(SPICount=0;

SPICount<

8;

SPICount++)//Preparetoclockinthedatatoberead

{

SPIData<

=1;

//Rotatethedata

CLR_SPI_CK;

//RaisetheclocktoclockthedataoutoftheMAX7456

if(STU_SPI_MISO)

SPIData|=0x01;

}

//delay_us(10);

SET_SPI_CK;

//Droptheclockreadyforthenextbit

}

//SET_SPI_CS;

//andloopback

return(SPIData);

//Finallyreturnthereaddata

}

//SPI写入数据

voidSPIWriteByte(unsignedcharSPIData)

//CLR_SPI_CS;

SPICount++)

if(SPIData&

0x80)

SET_SPI_MOSI;

else

CLR_SPI_MOSI;

=1;

//功能:

寻卡

//参数说明:

req_code[IN]:

寻卡方式

//0x52=寻感应区内所有符合14443A标准的卡

//0x26=寻未进入休眠状态的卡

//pTagType[OUT]:

卡片类型代码

//0x4400=Mifare_UltraLight

//0x0400=Mifare_One(S50)

//0x0200=Mifare_One(S70)

//0x0800=Mifare_Pro(X)

//0x4403=Mifare_DESFire

//返回:

成功返回MI_OK

charPcdRequest(unsignedcharreq_code,unsignedchar*pTagType)

charstatus;

unsignedintunLen;

unsignedcharucComMF522Buf[MAXRLEN];

ClearBitMask(Status2Reg,0x08);

WriteRawRC(BitFramingReg,0x07);

SetBitMask(TxControlReg,0x03);

ucComMF522Buf[0]=req_code;

status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&

unLen);

if((status==MI_OK)&

&

(unLen==0x10))

{

*pTagType=ucComMF522Buf[0];

*(pTagType+1)=ucComMF522Buf[1];

status=MI_ERR;

returnstatus;

防冲撞

pSnr[OUT]:

卡片序列号,4字节

/////////////////////////////////////////////////////////////////////

charPcdAnticoll(unsignedchar*pSnr)

unsignedchari,snr_check=0;

WriteRawRC(BitFramingReg,0x00);

ClearBitMask(CollReg,0x80);

ucComMF522Buf[0]=PICC_ANTICOLL1;

ucComMF522Buf[1]=0x20;

status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&

if(status==MI_OK)

for(i=0;

i<

4;

i++)

*(pSnr+i)=ucComMF522Buf[i];

snr_check^=ucComMF522Buf[i];

if(snr_check!

=ucComMF522Buf[i])

{status=MI_ERR;

SetBitMask(CollReg,0x80);

选定卡片

pSnr[IN]:

charPcdSelect(unsignedchar*pSnr)

unsignedchari;

ucComMF522Buf[1]=0x70;

ucComMF522Buf[6]=0;

for(i=0;

ucComMF522Buf[i+2]=*(pSnr+i);

ucComMF522Buf[6]^=*(pSnr+i);

CalulateCRC(ucComMF522Buf,7,&

ucComMF522Buf[7]);

status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&

(unLen==0x18))

{status=MI_OK;

////////////////////////////////

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1