久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5150|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

自學(xué)單片機(jī)+MFRC522射頻識(shí)別卡讀寫

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
1、工作之余,對(duì)射頻識(shí)別卡讀寫比較好奇,就那個(gè)寶買了一款簡(jiǎn)易讀寫器,利用手邊的STM32F072板子寫一下;
2、經(jīng)過幾天努力調(diào)通了,分享一下;
3、篇幅有限,分享幾個(gè)代碼截屏;


int main(void)
{
  PORT_Init();
  KEY_Init();//OK
  TIM2_Init();//OK
  UART1_Config();//PA9-TX,PA10-RX,AF1
  MFRC522_Init();
  IWDG_Config();//OK
  if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) {RCC_ClearFlag();}//位 24 RMVF: 清除復(fù)位標(biāo)志
  printf( "-----STM32F072 Mifare RC522 RFID Card reader 13.56 MHz-----\r");

  while (1)
  {        
    IWDG_ReloadCounter();//喂狗
    #if 1
    //-----------尋天線區(qū)內(nèi)未進(jìn)入休眠狀態(tài)的卡,返回卡片類型 2字節(jié) [1][0]-------------
    if((OperationCard >= READCARD_2)&&(bIDFlag==0))
    {
        bIDFlag =1;
        printf("---------------尋找IC卡-------------\n\r");
        if (!MFRC522_Request(PICC_REQIDL,& RevBufstr[0]))
        {
            if(RevBufstr[1]==0x00 && RevBufstr[0]==0x04){printf("---------------IC卡S50-------------\n\r");}//0004
            else if(RevBufstr[1]==0x00 && RevBufstr[0]==0x02){printf("---------------IC卡S70-------------\n\r");}//0002
            else                                           { printf("---------------XXX-------------\n\r");}

            //----------防沖撞,返回卡的序列號(hào) 4字節(jié)  [5][4][3][2]---------------
            if (!MFRC522_Anticoll(&RevBufstr[2]))
            {
                IWDG_ReloadCounter();//喂狗
                printf("---------------防沖撞-----------\n\r");
                //序列號(hào)轉(zhuǎn)換為ASCII碼
                for(CardNum=0;CardNum<4;CardNum++)
                {
                    string[2*CardNum] = ASCII_NUM[(RevBufstr[CardNum+2]>>4)&0x0f];
                    string[2*CardNum+1] = ASCII_NUM[RevBufstr[CardNum+2]&0x0f];
                }
                printf("---------------Card ID:%s--------------\n\r",string);
                //printf("---------------Card ID:%d--------------\n\r",string);// 已經(jīng)轉(zhuǎn)換成ASIC碼,需要%s字符格式!
                IWDG_ReloadCounter();//喂狗
                //--------------------選卡-------------------
                //讀寫模塊將傳送SEL ,NVB及全部40 位的UID CLn,后面加CRC_A校驗(yàn),與這40位UID CLn匹配的RFID卡以其SAK 響應(yīng)
                if (! MFRC522_SelectTag(&RevBufstr[2]))
                {
                    printf("---------------選卡成功--------------\n\r");
                    IWDG_ReloadCounter();//喂狗

                 if(OperationCard == READCARD_2)//----------------寫卡-------------------
                 {
                    //------驗(yàn)證秘鑰keyA--------
                   if (! MFRC522_Auth(PICC_AUTHENT1A,7,NewKeyA,&RevBufstr[2]))
                   {
                       printf("--------------寫卡-----驗(yàn)證秘鑰keyA 成功--\n\r");
                       //-----讀數(shù)據(jù)塊5-----
                       if(!MFRC522_Write(5,&Write_Consume_Data[0]))
                       {
                           printf("---------------寫卡:%s----------\n\r",&Write_Consume_Data[0]);
                           MFRC522_Halt();
                       }
                   }
                 } else if(OperationCard==READCARD_3)//讀卡
                 {
                   IWDG_ReloadCounter();//喂狗
                    //------驗(yàn)證秘鑰keyA--------
                    if (! MFRC522_Auth(PICC_AUTHENT1A,7,NewKeyA,&RevBufstr[2]))
                    {
                        printf("------讀卡-----驗(yàn)證秘鑰keyA 成功------\n\r");
                        //-----讀數(shù)據(jù)塊5-----
                        if(!MFRC522_Read(5,&Read_Data[0]))
                        {
                            IWDG_ReloadCounter();//喂狗
                            //memcpy( (uint8 *)&money, Read_Data, 4 );
                            /*
                            for(CardNum=0;CardNum<4;CardNum++)
                            {
                                string[2*CardNum] = ASCII_NUM[(Read_Data[CardNum]>>4)&0x0f];
                                string[2*CardNum+1] = ASCII_NUM[Read_Data[CardNum]&0x0f];
                            }*/
                            printf("------------讀卡:%s---------\n\r",&Read_Data[0]);
                            MFRC522_Halt();
                        }
                    }
                 }
                    #if 0
                    if(OperationCard == REGCARD_1)//----------------注冊(cè)-------------------
                    {
                        //------驗(yàn)證秘鑰keyA--------
                        //#if 0
                        if (! MFRC522_Auth(PICC_AUTHENT1A,7,LastKeyA,&RevBufstr[2]))//
                        {
                            printf(" --------------注冊(cè)------驗(yàn)證秘鑰keyA 成功------------------ \n\r");
                            IWDG_ReloadCounter();//喂狗
                            //塊7,第1扇區(qū)尾塊;-------寫入新keyA;----------
                            if(!MFRC522_Write(7,&NewKey[0]))
                            {
                                IWDG_ReloadCounter();//喂狗
                                printf(" --------注冊(cè)----第1扇區(qū)尾塊塊7 寫入新keyA------------ \n\r");
                                if(!MFRC522_Write(4,&Write_Consume_Data[0]))
                                {
                                    printf(" ------注冊(cè)------寫入新Write_Consume_Data 成功------------ \n\r");
                                    IWDG_ReloadCounter();//喂狗
                                    MFRC522_Halt();
                                }
                            }
                        }
                        //#endif
                    }           
                    #endif
                }
            }
        }
    }
    #endif
    if(b5msFlag)
    {
        b5msFlag = 1;
        Timer5ms();
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == Bit_RESET)
        {
            Delay_ms(100);//OK
            if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == Bit_RESET)//按鍵觸發(fā)DMA傳輸至UART1外設(shè)
            {
                if(bKeyFlag == 0)
                {
                    bKeyFlag = 1;
                    bIDFlag = 0;
                    OperationCard ++;
                    if(OperationCard>3){OperationCard=0;}
                    printf("--------------OperationCard:%d--------------\n\r",OperationCard);
                    MFRC522_Init();
                }
            }
        }else { bKeyFlag = 0;}
    }
    if(b500msFlag)
    {
        b500msFlag = 0;
        bLedFlag^=1;
        if(bLedFlag) LED_ON();
        else       LED_OFF();
    }
  }
}


===============================下面為利用串口助手打印出來結(jié)果===============================

MFRC522_Init
---------------尋找IC-------------
命令:發(fā)送并接收數(shù)據(jù)
數(shù)據(jù)寫進(jìn)RC522 FIFO緩沖區(qū)
讀取RC522中斷標(biāo)志位,等待RC522接收到IC卡返回的數(shù)據(jù)
讀取FIFO緩沖區(qū)的數(shù)據(jù)
ICS50
---------------防沖撞-----------
命令:發(fā)送并接收數(shù)據(jù)
數(shù)據(jù)寫進(jìn)RC522 FIFO緩沖區(qū)
讀取RC522中斷標(biāo)志位,等待RC522接收到IC卡返回的數(shù)據(jù)
讀取FIFO緩沖區(qū)的數(shù)據(jù)
Card ID:89214F8D
---------------選卡--------------
命令:發(fā)送并接收數(shù)據(jù)
數(shù)據(jù)寫進(jìn)RC522 FIFO緩沖區(qū)
讀取RC522中斷標(biāo)志位,等待RC522接收到IC卡返回的數(shù)據(jù)
讀取FIFO緩沖區(qū)的數(shù)據(jù)
---------------驗(yàn)證秘鑰keyA------------------
命令:驗(yàn)證秘鑰
數(shù)據(jù)寫進(jìn)RC522 FIFO緩沖區(qū)
讀取RC522中斷標(biāo)志位,等待RC522接收到IC卡返回的數(shù)據(jù)

RC522_1.jpg (4.67 MB, 下載次數(shù): 50)

RC522_1.jpg

連接圖.jpg (6.81 MB, 下載次數(shù): 57)

連接圖.jpg

燒寫器.jpg (6.2 MB, 下載次數(shù): 46)

燒寫器.jpg

RC522電路原理圖.pdf

41.8 KB, 下載次數(shù): 34, 下載積分: 黑幣 -5

RC522 學(xué)習(xí)筆記 190801.docx

1.19 MB, 下載次數(shù): 48, 下載積分: 黑幣 -5

MFRC522 IC中文說明書.pdf

804.44 KB, 下載次數(shù): 38, 下載積分: 黑幣 -5

Mifare1 S50IC卡中文說明書.pdf

136.12 KB, 下載次數(shù): 28, 下載積分: 黑幣 -5

RC522讀卡打印過程.docx

15.19 KB, 下載次數(shù): 26, 下載積分: 黑幣 -5

讀卡器介紹.pdf

1.86 MB, 下載次數(shù): 27, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:493109 發(fā)表于 2020-2-29 23:17 | 只看該作者
我用52單片機(jī)試過成功讀取IC的卡號(hào),可惜試了好多次都沒成功讀出其它扇區(qū)的數(shù)區(qū),包括扇區(qū)密碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:562798 發(fā)表于 2021-2-1 23:13 | 只看該作者
270497470 發(fā)表于 2020-2-29 23:17
我用52單片機(jī)試過成功讀取IC的卡號(hào),可惜試了好多次都沒成功讀出其它扇區(qū)的數(shù)區(qū),包括扇區(qū)密碼

密碼沒有特殊手段讀不出來的!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本三级在线网站 | 久久这里有精品 | 国产精品99久久久久久久vr | 一区二区三区亚洲精品国 | 久久久91精品国产一区二区精品 | 人人九九精 | 久久国产精品72免费观看 | 99久久99| 亚洲精品一区二区网址 | 日韩av网址在线观看 | 国产精品一区二区在线 | 亚洲一级淫片 | 免费黄色在线观看 | 亚洲精品视频一区 | 国产高清自拍视频在线观看 | 国产成人综合在线 | 免费视频久久 | 一级毛片免费完整视频 | 超碰人人人 | www.久久99 | 超碰国产在线 | 国产精品久久久久久av公交车 | 天堂一区二区三区 | 国产精品久久久久久久久久了 | 91精品国产综合久久小仙女图片 | 欧美狠狠操 | 国产精品久久久久不卡 | 亚洲综合色视频在线观看 | 国产成人精品午夜视频免费 | 天天爽天天操 | 91免费小视频 | 中文天堂在线观看 | 久久99久久99久久 | 亚洲精彩视频在线观看 | 欧美大片一区二区 | 国产福利在线播放麻豆 | 国产一区精品在线 | japanhd成人| 色悠悠久 | 91看片免费 | 久久视频免费看 |