完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在写读卡器案子,,一直寻卡不成功,读写寄存器好像没问题,有没有人做过,指点下。
#define NSS522_1 PB_ODR_ODR4=1 // 从机选择无效 #define NSS522_0 PB_ODR_ODR4=0 // 从机选择有效 #define SCK522_1 PB_ODR_ODR3=1 // 数据时钟置高 #define SCK522_0 PB_ODR_ODR3=0 // 数据时钟置低 #define SI522_1 PB_ODR_ODR2=1 // 数据置高 #define SI522_0 PB_ODR_ODR2=0 // 数据置低 #define SO522 PB_IDR_IDR1 // 数据输入 #define RST522_1 PB_ODR_ODR0=1 #define RST522_0 PB_ODR_ODR0=0 #define _NOP() {asm("nop");asm("nop");asm("nop");} //============================================================================== void RC522_IO_Init(void) { PB_DDR = 0xFD; //pe5 output PB_CR1 = 0xFD; PB_CR2 = 0xFD; } unsigned char ReadRawRC(unsigned char Address) { unsigned char i, ucAddr; unsigned char ucResult=0; SCK522_0; NSS522_0; ucAddr = ((Address<<1)&0x7E)|0x80; for(i=8;i>0;i--) { if ((ucAddr&0x80)==0x80) { SI522_1; } else { SI522_0; } _NOP(); SCK522_1; ucAddr <<= 1; _NOP(); _NOP(); SCK522_0; } for(i=8;i>0;i--) { SCK522_1; _NOP(); ucResult <<= 1; ucResult |= SO522; SCK522_0; _NOP(); _NOP(); } NSS522_1; SCK522_1; return ucResult; } //================================================================== void WriteRawRC(unsigned char Address, unsigned char value) { unsigned char i, ucAddr; SCK522_0; NSS522_0; ucAddr = ((Address<<1)&0x7E); for(i=8;i>0;i--) { if ((ucAddr&0x80)==0x80) { SI522_1; } else { SI522_0; } _NOP(); SCK522_1; _NOP(); _NOP(); ucAddr <<= 1; _NOP(); SCK522_0; } for(i=8;i>0;i--) { if ((value&0x80)==0x80) { SI522_1; } else { SI522_0; } _NOP(); SCK522_1; _NOP(); _NOP(); value <<= 1; _NOP(); SCK522_0; } NSS522_1; SCK522_1; } //====================================================================== unsigned char data1[16] = {0x12,0x34,0x56,0x78,0xED,0xCB,0xA9,0x87,0x12,0x34,0x56,0x78,0x01,0xFE,0x01,0xFE}; //M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令 //4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反 unsigned char data2[4] = {0x12,0,0,0}; unsigned char DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; unsigned char g_ucTempbuf[20]; int main(void) { Clock_Set_HSI(); GPIO_Init(); RC522_IO_Init(); PcdReset(); PcdAntennaOff(); PcdAntennaOn(); while(1) { status = PcdRequest(PICC_REQIDL, g_ucTempbuf); if (status == MI_OK) { PA_ODR_ODR2=1; // Beep=1 } } } |
|
相关推荐
1 条评论
1个回答
|
|
读写寄存器的前提就是先寻卡,你寻卡都寻不了怎么知道读写寄存器没问题的?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
969 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
954 浏览 2 评论
2066 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1162 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1587 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 08:50 , Processed in 0.645872 second(s), Total 87, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号