江南踏雪 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
    

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

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置