金牌会员
 
- 积分
- 1044
- 金钱
- 1044
- 注册时间
- 2018-5-21
- 在线时间
- 114 小时
|
10金钱
stm32f103战舰开发板和RC522寻卡和防冲撞返回的一直是0x02
#include "Myspi.h"
#include "stm32f10x.h"
void myspiInit(){
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //SCK
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //MOSI
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //MISO
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //SDA
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //RST
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
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_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
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);
//SPI2_ReadWriteByte(0xff);
}
void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler)
{
assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
SPI2->CR1&=0XFFC7;
SPI2->CR1|=SPI_BaudRatePrescaler;
SPI_Cmd(SPI2,ENABLE);
}
u8 SPI2_ReadWriteByte(u8 TxData)
{
u8 retry=0;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET)
{
retry++;
if(retry>200)return 0;
}
SPI_I2S_SendData(SPI2, TxData);
retry=0;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET)
{ retry++;
if(retry>200)return 0;
}
return SPI_I2S_ReceiveData(SPI2);
}
u8 SPIWriteByte(u8 Byte)
{
while((SPI2->SR&0X02)==0); //μè′y·¢ËíÇø¿Õ
SPI2->DR=Byte; //·¢Ëíò»¸öbyte
while((SPI2->SR&0X01)==0); //μè′y½óêÕíêò»¸öbyte
return SPI2->DR; //·μ»ØêÕμ½μÄêy¾Y
}
//#include "led.h"
#include "delay.h"
//#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "string.h"
#include "Myspi.h"
#include "rc522.h"
u8 UID[4],Temp[4];
int main(void)
{
u8 status2, status1;
//Stm32_Clock_Init(9);//Ïμí3ê±ÖóéèÖÃ
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
LCD_Init();
InitRc522(); //3õê¼»ˉéäÆμ¿¨Ä£¿é
PcdReset(); //¸′λRC522
PcdAntennaOn(); //¿aÆôììÏß·¢éä
LCD_Clear(WHITE);
POINT_COLOR=BLACK;
LCD_ShowString(30,40,210,24,24,"RC522 INITIAL");
while(1)
{
status1=PcdRequest(0x52,Temp);////Ѱ¿¨,êä3öÎa¿¨ààDí----
if(status1==MI_OK)
status2 = PcdAnticoll(UID); //·à3å×2′|àí£¬êä3ö¿¨Æ¬DòáDoÅ£¬4×Ö½ú--μú0éèÇøμú0¿éǰ4¸ö×Ö½úêÇUID£¨DòáDoÅ£©
if(status2==MI_OK)
{
LCD_Clear(WHITE);
POINT_COLOR=RED;
LCD_ShowString(30,40,210,24,24,"SUCCESS");
delay_ms(5000);
}
LCD_Clear(WHITE);
POINT_COLOR=BLACK;
LCD_ShowString(30,40,210,24,24,"RC522 INITIAL");
delay_ms(5000);
}
}
求原因分析和解决方法
|
-
最佳答案
查看完整内容[请看2#楼]
程序可以实现读卡了,原因可能是因为我将卡一直发在RC522上面出的问题,后来将卡放在上面过几秒就拿走问题就解决了
|