STM32F103和RC522模块通信,为什么M1卡无回应?

从网上下载的代码例程,可以正确运行,运行,硬件方面没问题,但我根据需要作出修改后,就无法读卡了。
源程序是如下连线

/*******************************
1--SS <----->PF0 //普通GPIO
*2--SCK <----->PB13
*3--MOSI<----->PB15
*4--MISO<----->PB14
*5--IRQ 悬空
*6--GND <----->GND
*7--RST <----->PF1 //普通GPIO
*8--VCC <----->VCC
*
**********************************/

我修改成了

/*******************************
1--SS <----->PB12 //SPI的NSS口
*2--SCK <----->PB13
*3--MOSI<----->PB15
*4--MISO<----->PB14
*5--IRQ 悬空
*6--GND <----->GND
*7--RST <----->PA8 //普通GPIO
*8--VCC <----->VCC
*
**********************************/
初始化配置下
void SPI2_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE );
RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE );

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;    //PA8 -> RST

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_ResetBits(GPIOA,GPIO_Pin_8);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;   
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;   
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;      
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;    
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;       
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;    
SPI_Init(SPI2, &SPI_InitStructure);  
SPI_Cmd(SPI2, ENABLE); 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;   //PB12 -> SS

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_SetBits(GPIOB,GPIO_Pin_12);

}

下面是我修改的位操作
#define SET_SPI_CS (GPIOB->BSRR = 0X1000) //PB12 -> 1
#define CLR_SPI_CS (GPIOB->BRR = 0X1000) //PB12 -> 0

#define SET_RC522RST GPIOA->BSRR = 0X0100 //PA8 -> 1
#define CLR_RC522RST GPIOA->BRR = 0X0100 //PA8 -> 0

不知道我这么修改可不可以,反正M1卡就是不理我

根据芯片手册,您宏定义这块应该修改成下面这样吧:

#define SET_SPI_CS (GPIOB->BSRR |= 1<<12)  //PB12 -> 1
#define CLR_SPI_CS (GPIOB->BRR  |= 1<<12)  //PB12 -> 0
#define SET_RC522RST GPIOA->BSRR  |= 1<<8) //PA8 -> 1
#define CLR_RC522RST GPIOA->BRR  |= 1<<8) //PA8 -> 0

用移位做好些,操作本位时不影响其他位!

13.56MHz芯片:SI522(软硬件直接PIN对PIN 兼容RC522,与FM17550/FM17520/RM522) ,省去开发成本,中科微推出SI522(超低功耗13.56M芯片) 以目前测试结果来看,其有如下几大优势

1) 在接收模式功耗上,Si522比RC522低10mA,Si522为16mA。
2) 低功耗自动寻卡功能,功耗在4.5μa,业界最低。
3) 定时唤醒。
4) 寻卡时模组不死机。
5) 价格优势,性价比极强。

我是中科微的SI522全国总代理,提供软硬件全方位技术支持,欢迎交流
刘工 18025398186 QQ 2355239055