關於stm32 RC522 加值地址問題

想請問使用PICC_INCREMENT時進入PcdValue(PICC_INCREMENT, uAddr, Add_Money) ,(ucComMF522Buf[0] & 0x0F) != 0x0A)一直無法順利通過

是否使用的地址錯誤

void RC522_Handel(void);
unsigned char   g_uUartTxIdx = 0;
unsigned char   g_uUartTxFlag = 0;
unsigned char   g_uUartTxTab[30] = {0};


unsigned char   g_uUartRxIdx = 0;
unsigned char   g_uUartRxFlag = 0;
unsigned char   g_uUartRxTab[30] = {0};
void SysMainTask(void);
unsigned char  SumCheck(unsigned char  len,unsigned char  *buf);
void UART2_TxTask(void);
void BEE(void);
char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue);
unsigned char Add_Money[4] = {0,0,0,0}; ;
INT8U card_transaction(INT8U uAddr,INT8U *key,INT8U *data,u32 money,char action);
unsigned char RFID[16];//={0x03, 0x00  , 0x00  , 0x00  , 0xfc  , 0xff , 0xff , 0xff  , 0x03  , 0x00  , 0x00  , 0x00  , 0x08 , 0xf7  , 0x08 , 0xf7};			//¦s©ñRFID 
unsigned char commend[16]={0x01,0x09,0x01,0x01,0x01,0x01,0xff,0x07,0x80,0x29,0xff,0xff,0xff,0xff,0xff,0xff};

unsigned char CT[2];
unsigned char SN[4]; 
unsigned char lxl_bit=0;
unsigned char card1_bit=0;
unsigned char card2_bit=0;
unsigned char card3_bit=0;
unsigned char card4_bit=0;
unsigned char total=0;
unsigned char lxl[4]={196,58,104,217};
unsigned char card_1[4]={83,106,11,1};
unsigned char card_2[4]={208,121,31,57};
unsigned char card_3[4]={176,177,143,165};
unsigned char card_4[4]={5,158,10,136};
u8 KEY[6]={0xff,0xff,0xff,0xff,0xff,0xff};
u8 AUDIO_OPEN[6] = {0xAA, 0x07, 0x02, 0x00, 0x09, 0xBC};
unsigned char RFID1[16]={0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x07,0x80,0x29,0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char ssstatus;
unsigned char s=0x08;
int main(void)
{
	uint8_t output_test=0;
	uint32_t test_count=0;
//	int len;
// 	u8 ret;
//	u8 buf[16];
	char strbuf[128];
	u8 time_cnt=0;
//	float ftmp;
//	uint8_t ctmp[8];
//	int i;
	u8 test_count2=0; //,test_on=0;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	GPIO_Configuration();
	
	output_test=1; // LED light on
	
	/* DeInitialize STM32 Cryptographic Library */
	Crypto_DeInit();

	uart_set();
	
	RC522_uConfig();
	PcdReset();
	M500PcdConfigISOType('A'); 
	
	  /* Config SysTick */
  if (SysTick_Config(SystemCoreClock / 2000)) // frank,systick
  {
    /* Capture error */
    while (1);
  }
//	
//	udf_ELS61_Restart(); // 4G Reset
//	
//  RTC_Init();
	
	// 4463 test
//	RFInit();
//	RFRxMode();
	
	udf_printf("\rStart\n\r");
	//BEE();
	
//	BuzUpdateTask();
  /* Infinite loop */
  while (1)
  {
		
//		SysMainTask();
		if (test_count == 0)
		{
//			USART_SendData(USART1, 'Q');
//			while(!(USART1->STS & USART_FLAG_TXE));
		}
		


		
		test_count++;
		if (test_count >= 50000)
		{
			test_count=0;
			func2=1;
			
			test_count2++;
			RC522_Handel();
}
void RC522_Handel(void)
{
	int i;
	u32 card_number_D=0;
	char strbuf[32];
	unsigned char uStatus,uPcd_ID[4] ={0},uLen = 0,uData[16]= {0},exID[13] = {0},uCmd = 0;
	static enum {FALSE = 0, TRUE = !FALSE} uNewMark = FALSE;
	unsigned long ulPcdID = 0;
	unsigned char uData_title[6] = {0xAA,0xAA,0x01,0x30,0x17,0x01};
	unsigned char uData_All[29] = {0xAA,0xAA,0x01,0x30,0x17,0x08,
												 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
												 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
												 0xFF};
	char g_uUartRxTab[]={0xAA,0xAA,0x01 ,0x30 ,0x17 ,0x08 ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0x01 ,0x02 ,0x03 ,0x04 ,0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xa9};
	
                    if(uCmd == 0x30)//¥[­È
				{
					            card_transaction(s,&g_uUartRxTab[6],&g_uUartRxTab[12],100,PICC_INCREMENT);
				}
				
    

}
char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue)
{
    char status;
    unsigned int  unLen;
    unsigned char i,ucComMF522Buf[MAXRLEN]; 
    
    ucComMF522Buf[0] = dd_mode;
    ucComMF522Buf[1] = addr;
    CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
	
    if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
    {   
		status = MI_ERR;   
		}
    if(status !=MI_OK)
		{
			udf_printf("wtf");
		}			
    if (status == MI_OK)
    {
       // memcpy(ucComMF522Buf, pValue, 4);
        for (i=0; i<16; i++)
        {    ucComMF522Buf[i] = *(pValue+i);   }
        CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf[4]);
        unLen = 0;
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,6,ucComMF522Buf,&unLen);
        if (status != MI_ERR)
        {    status = MI_OK;    }
    }
    
    if (status == MI_OK)
    {
        ucComMF522Buf[0] = PICC_TRANSFER;
        ucComMF522Buf[1] = addr;
        CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]); 
   
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
 
        if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
        {   status = MI_ERR;   }
    }
    return status;
}
INT8U card_transaction(INT8U uAddr,INT8U *key,INT8U *data,u32 money,char action)
{
	INT8U uStatus = 0,uPcdID[4] = {0};
	char strbuf[32],temp[16];
	int i;
		Add_Money[2] = money; 

//	if(uAddr > 63 || uAddr == 0 || (uAddr % 3) == 0)   
//	{
//		udf_printf("Error Address\n\r");
//		return 0x03;    // µL®Äªº¶ô¦a§}
//	}
	
	if((uStatus = PcdRequest (PICC_REQALL, uPcdID)) != MI_OK)
	{
		do{
		uStatus = PcdRequest (PICC_REQALL, uPcdID);
		}while(uStatus != MI_OK && TIMEOUTADD <= 3);
	}
	
	if(uStatus == MI_OK)
	{
		if(MI_OK == PcdAnticoll(uPcdID))
		{
			if(MI_OK == PcdSelect(uPcdID))
			{
				if(MI_OK == PcdAuthState(PICC_AUTHENT1A,uAddr,key,uPcdID))     // ÃÜÂëÑé֤ͨ¹ý
				{
					if(MI_OK == PcdValue(PICC_INCREMENT, uAddr, Add_Money))
					{
								
						uStatus=MI_ERR;
            uStatus=PcdRead(s,RFID);
            Delay3(1);
            if(uStatus==MI_OK)
            {
							udf_printf("=============================\n\r");
                uStatus=MI_ERR;
                Delay3(2);
                for(i=0;i<16;i++)
                {
                    temp[i]=RFID[i];
                    sprintf(strbuf,"%d  ",temp[i]);
										udf_printf(strbuf);
								}
								udf_printf("\n\r");  
            }
						else 
							udf_printf ("\n\rADD success!\n\r");
						udf_printf("=============================\n\r");
						udf_printf("add ok\n\r");
						return 0x05; // Êý¾Ýд³É¹¦
					}
					else 
					{
						udf_printf("add fail\n\r");
						return 0x04; // ²Ù×÷Òì³£
					}
				}
				else
				{
					return 0x02;  // ÃÜÂëÆ¥Åä´íÎó
				}
			}
		}
	}
	return 0x01;    // ÎÞ¿¨¡¢ÎÞЧ¿¨¡¢¶Á¿¨³¬Ê±


}

 

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^