江南踏雪 2019-04-06 15:52 采纳率: 50%
浏览 934

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卡就是不理我

  • 写回答

2条回答 默认 最新

  • 您好,哪位? 2019-04-08 14:16
    关注

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

    #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
    

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

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?