找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3204|回复: 1
收起左侧

STM32+RC632(SPI)源代码

[复制链接]
ID:66416 发表于 2018-10-23 00:35 | 显示全部楼层 |阅读模式
STM32+RC632(SPI)源代码,这个是在CSDN论坛下载的程序,但是不知道怎样才能寻卡ID,读写(已烧写进硬件平台中),例如:输入不同的串口命令,可以串口助手中显示卡号。
寻求搞过的人给出意见,谢谢!

IRQ  =>  PA2
NSS  =>  PA4
CE   =>  PA0
SPI1_SCK  =>  PA5
SPI1_MISO =>  PA6
SPI1_MOSI =>  PA7

单片机源程序如下:
  1. #include "includes.h"
  2. #include "rc632.h"
  3. #include "iso14443a.h"
  4. #include "iso15693.h"



  5. #define PDA_HEAD            0xA5
  6. #define PDA_COMT_SET        0x57
  7. #define PDA_COMT_REQ        0x52
  8. #define PDA_COMT_AUTO        0x41

  9. #define PACK_HEAD        0
  10. #define PACK_LENG        1
  11. #define PACK_NUMB        2
  12. #define PACK_COMT        3
  13. #define PACK_COMM        4
  14. #define PACK_ACKN        5
  15. #define PACK_DALE        6
  16. #define PACK_DATA        7


  17. unsigned char iso14443a_cardtype[2];
  18. unsigned char iso14443a_cardsnr[4];
  19. unsigned char iso15693_cardsnr[8];
  20. unsigned char iso14443a_buffer[6];
  21. unsigned char iso14443a_Zhe[30];

  22. unsigned char uart_indx, recv_flag;
  23. unsigned char uart_sbuf[50];
  24. unsigned char uart_rbuf[50];

  25. unsigned char PDA_product_ver[] = "EmbedSky PDA MCU-RFID ver0.1";


  26. void PDA_package(unsigned char num, unsigned char com_type,
  27.                  unsigned char com, unsigned char ack,
  28.                  unsigned char len, unsigned char *dat, unsigned char *buf);

  29. unsigned short crc16_table(unsigned char *pcrc, unsigned short cnt);

  30. void uart_putd(unsigned char *d);
  31.                  
  32. void uart_clr(void);
  33.                  
  34. void uart_puts(unsigned char *s);
  35.                  

  36. typedef enum{
  37.    Card_Null,
  38.    Card_AutoType,
  39.    Card_ScanTag,
  40.    Card_ScanCard,
  41.    Card_InitOver,
  42.    Card_ReadOver,
  43.    Card_Recharge,
  44.    Card_Buckle,
  45.    Card_ReadData,
  46.    Card_WriteData,
  47. }Card_Oper;

  48. Card_Oper CARD_OPER = Card_Null,CARD_FLAG = Card_Null;

  49. /* Private defines -----------------------------------------------------------*/
  50. /* Private function prototypes -----------------------------------------------*/
  51. /* Private functions ---------------------------------------------------------*/
  52. uint16_t  led_count = 0;



  53. int main(void)
  54. {
  55.         unsigned char size, len, sta;
  56.         unsigned char coded[12];
  57.         unsigned char dat_buf[16], buf[70];
  58.         unsigned int crc;
  59.         unsigned char par, rst_dat[18];
  60.         unsigned char cos_fwi, cos_cidnad, cos_len;
  61.         unsigned char cos_dat[40];
  62.     unsigned char Key_New[6] = {0x11,0x88,0x12,0x16,0x6D,0x89};
  63.     int i;
  64.         unsigned char iso14443a_cardsnr2[20]={0};
  65.         uint8_t count = 0;
  66.         SystemInit();
  67.         delay_init(72);                   
  68.         //延时函数初始化          
  69.         //        bsp_InitUart(COM1,115200);
  70.         //调试用的串口1
  71.         HardWare_Init();
  72.         //        Checki_Sys();
  73.         //检查系统频率       
  74.         bsp_NVIC_Configuration();
  75.         rc_init();
  76.         sta = PCD_reset();
  77.        
  78.         delay_ms(200);
  79.         //  PCD_AntennaOFF();
  80.        
  81.                 PCD_AntennaON();
  82.         //        delay_ms(5);
  83.         PCD_cfg_iso_type('A');


  84.         delay_ms(5);
  85.                

  86. while(1)
  87. {

  88. // 寻卡
  89. // 0x52:ALL  寻找感应区内所有符合14443A标准的卡
  90. // 0x26:IDLE 寻找感应区内未进入休眠状态的卡
  91. // 0x4400 mifare_ultralight
  92. // 0x0400 mifare_one s50
  93. // 0x0200 mifare_one s70
  94. // 0x0800 mifare_pro
  95. // 0x0403 mifare_proX
  96. // 0x4403 mifare_desfire
  97.                 //PCD_request(0x26, unsigned char *p_tagtype)
  98.                
  99.        
  100.         delay_ms(5);
  101. //        memcpy(iso14443a_cardsnr2,0,8);       
  102.         for(i=0;i<8;i++)
  103.           iso14443a_cardsnr2[i]=0;
  104.            //sta = PDA_15693_snr(iso14443a_cardsnr2);
  105.            sta = PCD_request(0x52, iso14443a_cardtype);
  106.         sta = PCD_anticoll(iso14443a_cardsnr2);
  107. //        sta = PDA_15693_snr(iso15693_cardsnr);
  108. //CARD_OPER = Card_Null;
  109. //PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  110. //uart_rbuf[PACK_COMM], 0x00,
  111. //        4, iso14443a_cardsnr, uart_sbuf);
  112.            for(count = 0; count<10; count++)
  113.     {
  114.                          // BUZZER_ONCE();
  115.                           delay_ms(10);
  116.         }
  117.                 sta = PCD_request(0x26, iso14443a_cardtype);
  118.         sta = PCD_anticoll(iso14443a_cardsnr);
  119.              for(count = 0; count<10; count++)
  120.     {
  121.                          // BUZZER_ONCE();
  122.                           delay_ms(20);
  123.         }
  124. }
  125.                
  126.         while(1)
  127.         {
  128.         // 自动寻卡,有新命令则停止寻卡操作
  129.         // 协议为ISO14443A,执行一次读卡类型和读卡号操作                       
  130.                 if(CARD_OPER != Card_Null && recv_flag == 0)
  131.                 {                       
  132.                                 CARD_FLAG = CARD_OPER;
  133.                                 sta = MI_OK;
  134.                                 PCD_AntennaOFF();
  135.                                 delay_ms(3);
  136.                                 PCD_cfg_iso_type('A');
  137.                                 delay_ms(3);
  138.                                 sta = PCD_request(0x52, iso14443a_cardtype);
  139.                                 if (MI_OK == sta)
  140.                                 {
  141.                                                 sta = PCD_anticoll(iso14443a_cardsnr);

  142.                                                 if(sta == MI_OK)
  143.                                                 {
  144.                                                                 //uart_puts(" 1.CardType ");       
  145.                                                                 if(CARD_OPER == Card_AutoType) //协议为ISO14443A
  146.                                                                 {
  147.                                                                                 CARD_OPER = Card_Null;
  148.                                                                                 memcpy(&buf[0], iso14443a_cardtype, 2);
  149.                                                                                 memcpy(&buf[2], iso14443a_cardsnr, 4);
  150.                                                                                 PDA_package(0x00, PDA_COMT_AUTO, 'a', 0x00, 6, buf, uart_sbuf);
  151.                                                                                
  152.                                                                                 PCD_AntennaOFF();                                                                                               
  153.                                                                                 uart_putd(uart_sbuf);   
  154.                                                                                 delay_ms(2);
  155.                                                                 }
  156.                                                                 else if(CARD_OPER == Card_ScanCard)//MF卡
  157.                                                                 {
  158.                                                                                 CARD_OPER = Card_Null;
  159.                                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  160.                                                                                                                                                                 uart_rbuf[PACK_COMM], 0x00,
  161.                                                                                                                                                                 4, iso14443a_cardsnr, uart_sbuf);
  162.                                                                                
  163.                                                                                 PCD_AntennaOFF();                                                                                               
  164.                                                                                 uart_putd(uart_sbuf);   
  165.                                                                                 delay_ms(2);
  166.                                                                 }
  167.                                                                 else
  168.                                                                 {               
  169.                                                                                 sta = PCD_select(iso14443a_cardsnr, &size);
  170.                                                                                 if(MI_OK == sta)
  171.                                                                                 {
  172.                                                                                         //uart_puts(" 2.CardSelect ");                               
  173.                                                                                         getCardKey(iso14443a_cardsnr,&uart_rbuf[PACK_DATA+2],Key_New);
  174.                                                                                         change_code_key(Key_New, coded);                  
  175.                                                                                         sta = PCD_auth_key(coded);
  176.                                                                                          
  177.                                                                                         if(MI_OK == sta)
  178.                                                                                         {
  179.                                                                                                         //uart_puts(" 3.CardFillKey ");       
  180.                                                                                                         sta = PCD_auth_state(uart_rbuf[PACK_DATA], uart_rbuf[PACK_DATA+1],
  181.                                                                                                                                                                                                                  iso14443a_cardsnr);
  182.                                                                                                         if(MI_OK == sta)
  183.                                                                                                         {  
  184.                                                                                                                         //uart_puts(" 4.CardAuthKey ");       
  185.                                                                                                                        
  186.                                                                                                                         if(CARD_OPER == Card_WriteData)
  187.                                                                                                                         {   
  188.                                                                                                                                         if(MI_OK == PCD_write(uart_rbuf[PACK_DATA+1], &uart_rbuf[PACK_DATA+8]))
  189.                                                                                                                                         {       
  190.                                                                                                                                                  //uart_puts("  5.WriteData  ");
  191.                                                                                                                                                  
  192.                                                                                                                                                  memcpy(dat_buf,&uart_rbuf[PACK_DATA+8],16);                                          
  193.                                                                                                                                                  CARD_OPER = Card_Null;
  194.                                                                                                                                                  PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  195.                                                                                                                                                                                                         uart_rbuf[PACK_COMM], 0x00,
  196.                                                                                                                                                                                                         16, dat_buf, uart_sbuf);
  197.                                                                                                                                         }                                 
  198.                                                                                                                         }
  199.                                                                                                                         else if(CARD_OPER == Card_ReadData)
  200.                                                                                                                         {                                            
  201.                                                                                                                                         if(MI_OK == PCD_read(uart_rbuf[PACK_DATA+1], dat_buf))
  202.                                                                                                                                         {
  203.                                                                                                                                                         //uart_puts("  5.ReadData  ");
  204.                                                                                                                                                        
  205.                                                                                                                                                         CARD_OPER = Card_Null;   
  206.                                                                                                                                                         PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  207.                                                                                                                                                                                                         uart_rbuf[PACK_COMM], sta,
  208.                                                                                                                                                                                                         16, dat_buf, uart_sbuf);
  209.                                                                                                                                         }
  210.                                                                                                                         }
  211.                                                                                                                         else if(CARD_OPER == Card_InitOver)
  212.                                                                                                                         {                  
  213.                                                                                                                                         if(MI_OK == PCD_val_init(uart_rbuf[PACK_DATA+1], &uart_rbuf[PACK_DATA+8]))
  214.                                                                                                                                         {
  215.                                                                                                                                                  //uart_puts("  5.InitOver  ");
  216.                                                                                                                                                  
  217.                                                                                                                                                  CARD_OPER = Card_Null;   
  218.                                                                                                                                                  PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  219.                                                                                                                                                                                          uart_rbuf[PACK_COMM], sta, 4, &uart_rbuf[PACK_DATA+8], uart_sbuf);                             
  220.                                                                                                                                         }                                          
  221.                                                                                                                         }
  222.                                                                                                                         else if(CARD_OPER == Card_Recharge)
  223.                                                                                                                         {                                                
  224.                                                                                                                                         if(MI_OK == PCD_value(PICC_INCREMENT, uart_rbuf[PACK_DATA+1], &uart_rbuf[PACK_DATA+8]))
  225.                                                                                                                                         {         
  226.                                                                                                                                                         //uart_puts("  5.Recharge  ");
  227.                                                                                                                                                         sta = PCD_read(uart_rbuf[PACK_DATA+1], dat_buf);
  228.                                                                                                                                                        
  229.                                                                                                                                                         if(MI_OK == sta)
  230.                                                                                                                                                         {                                                     
  231.                                                                                                                                                                          CARD_OPER = Card_Null;   
  232.                                                                                                                                                                          PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  233.                                                                                                                                                                                                                          uart_rbuf[PACK_COMM], sta,4, dat_buf, uart_sbuf);  
  234.                                                                                                                                                         }
  235.                                                                                                                                         }                                            
  236.                                                                                                                         }
  237.                                                                                                                         else if(CARD_OPER == Card_Buckle)//??
  238.                                                                                                                         {
  239.                                                                                                                                         if(MI_OK == PCD_value(PICC_DECREMENT, uart_rbuf[PACK_DATA+1], &uart_rbuf[PACK_DATA+8]))
  240.                                                                                                                                         {   
  241.                                                                                                                                                         //uart_puts("  5.Buckle  ");
  242.                                                                                                                                                         sta = PCD_read(uart_rbuf[PACK_DATA+1], dat_buf);
  243.                                                                                                                                                        
  244.                                                                                                                                                         if(MI_OK == sta)
  245.                                                                                                                                                         {
  246.                                                                                                                                                                          CARD_OPER = Card_Null;   
  247.                                                                                                                                                                          PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  248.                                                                                                                                                                                                                          uart_rbuf[PACK_COMM], sta,4, dat_buf, uart_sbuf);  
  249.                                                                                                                                                         }                                                                                                      
  250.                                                                                                                                         }
  251.                                                                                                                         }
  252.                                                                                                                         else if(CARD_OPER == Card_ReadOver)//????
  253.                                                                                                                         {
  254.                                                                                                                                         sta = PCD_read(uart_rbuf[PACK_DATA+1], dat_buf);
  255.                                                                                                                                        
  256.                                                                                                                                         if(MI_OK == sta)
  257.                                                                                                                                         {
  258.                                                                                                                                                  //uart_puts("  5.ReadOver  ");
  259.                                                                                                                                                  
  260.                                                                                                                                                  CARD_OPER = Card_Null;   
  261.                                                                                                                                                  PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  262.                                                                                                                                                  uart_rbuf[PACK_COMM], sta,4, dat_buf, uart_sbuf);   
  263.                                                                                                                                         }
  264.                                                                                                                                                                                                                  
  265.                                                                                                                         }                                                                         
  266.                                                                                                         }//验证密钥 if_end
  267.                                                                                          }//填充密钥if_end                          
  268.                                                                          }//选择卡片if_end  
  269.                                                   }//else end
  270.                 }
  271.             if(CARD_OPER == Card_Null)
  272.                 {   
  273.                                 uart_putd(uart_sbuf);       
  274.                                 PCD_AntennaOFF();
  275.                           BUZZER_ON();
  276.                                 delay_ms(100);
  277.                           BUZZER_OFF();
  278.                        
  279.                                 CARD_OPER = CARD_FLAG;
  280.                 }                   
  281.         }
  282.         }

  283.                 if (recv_flag)  
  284.         {                       
  285.                   crc = uart_rbuf[uart_rbuf[PACK_LENG]]<<8 | uart_rbuf[uart_rbuf[PACK_LENG]+1];
  286.                   if (crc == crc16_table(uart_rbuf, uart_rbuf[PACK_LENG]))
  287.                                 {
  288.                                                 CARD_OPER = Card_Null;
  289.                                           recv_flag = 0;
  290.         }
  291.         else
  292.         {
  293.                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  294.                                                                         uart_rbuf[PACK_COMM], 0xFF,
  295.                                                                         2, (unsigned char*)&crc, uart_sbuf);
  296.                                                 uart_putd(uart_sbuf);
  297.                                                
  298.                                                 uart_clr();
  299.                                                 recv_flag = 0;
  300.                                                 uart_indx = 0;
  301.                          
  302.                        continue;
  303.               }

  304.               if (uart_rbuf[PACK_COMT] == PDA_COMT_SET)
  305.         {
  306.                          sta = 0;

  307.                                                 if(uart_rbuf[PACK_COMM] >= 'A' && uart_rbuf[PACK_COMM] <= 'Z')
  308.                                                 {                                 
  309.                                                                          if(uart_rbuf[PACK_COMM] == 'O')        
  310.                                                                          {
  311.                                                                                                 CARD_OPER = Card_InitOver;                                                                                          
  312.                                                                          }
  313.                                                                          else if(uart_rbuf[PACK_COMM] == 'C')       
  314.                                                                          {
  315.                                                                                                 CARD_OPER = Card_Recharge;
  316.                                                                          }
  317.                                                                          else if(uart_rbuf[PACK_COMM] == 'B')       
  318.                                                                          {
  319.                                                                                                 CARD_OPER = Card_Buckle;
  320.                                                                          }
  321.                                                                          else if(uart_rbuf[PACK_COMM] == 'W')
  322.                                                                          {
  323.                                                                                                 CARD_OPER = Card_WriteData;
  324.                                                                          }
  325.                                                                          else
  326.                                                                          {
  327.                                                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  328.                                                                                                 uart_rbuf[PACK_COMM], 0x11, 0, 0, uart_sbuf);
  329.                                                                          }                             
  330.                                                 }
  331.                                                 else
  332.                                                 {
  333.                                                                 switch (uart_rbuf[PACK_COMM])
  334.                                                                 {
  335.                                                                         case 'd':       
  336.                                                                                                         CARD_OPER = Card_AutoType;
  337.                                                                                                         break;
  338.                                                                         case 'l':       
  339.                                                                                                         //PDA_LED_switch(uart_rbuf[PACK_DATA]);
  340.                                                                                                         break;
  341.                                                                         case 'b':       
  342.                                                                                                         //PDA_BEEP_soud(uart_rbuf[PACK_DATA], uart_rbuf[PACK_DATA+1]);
  343.                                                                                                         break;
  344.                                                                         case 'u':       
  345.                                                                                                         //PDA_UART_baud(uart_rbuf[PACK_DATA]);
  346.                                                                                                         break;
  347.                                                                         case 'a':       
  348.                                                                                                         //PDA_ANT_switch(uart_rbuf[PACK_DATA]);
  349.                                                                                                         break;
  350.                                                                         case 'i':       
  351.                                                                                                         PCD_AntennaOFF();
  352.                                                                                                         delay_ms(10);
  353.                                                                                                         sta = PCD_cfg_iso_type(uart_rbuf[PACK_DATA]);
  354.                                                                                                         break;
  355.                                                                         case 'h':       
  356.                                                                                                         sta = PCD_halt();
  357.                                                                                                         break;
  358.                                                                         case 'w':       
  359.                                                                                                         sta = PCD_write(uart_rbuf[PACK_DATA], &uart_rbuf[PACK_DATA+1]);
  360.                                                                                                         break;

  361.                                                                         case 'f':       
  362.                                                                                       change_code_key(&uart_rbuf[PACK_DATA], coded);
  363.                                                                                       sta = PCD_auth_key(coded);
  364.                                                                                        break;  
  365.                                                                                                        
  366.                       case 'k':                                                    
  367.                                                                                                         sta = PCD_auth_state(uart_rbuf[PACK_DATA], uart_rbuf[PACK_DATA+1],
  368.                                                                                                                                                                                          &uart_rbuf[PACK_DATA+2]);
  369.                                                                                                         break;
  370.                                                                         case 's':                                                    
  371.                                                                                                         sta = PCD_select(&uart_rbuf[PACK_DATA], &size);
  372.                                                                                                         break;
  373.                                                                         case 'v':       
  374.                                                                                                         sta = PCD_val_init(uart_rbuf[PACK_DATA], &uart_rbuf[PACK_DATA+1]);
  375.                                                                                                         break;
  376.                                                                         case '+':       
  377.                                                                                                         sta = PCD_value(PICC_INCREMENT, uart_rbuf[PACK_DATA], &uart_rbuf[PACK_DATA+1]);
  378.                                                                                                         break;
  379.                                                                         case '-':       
  380.                                                                                                         sta = PCD_value(PICC_DECREMENT, uart_rbuf[PACK_DATA], &uart_rbuf[PACK_DATA+1]);
  381.                                                                                                         break;
  382.                                                                         default:
  383.                                                                                                         sta = 0x11;
  384.                                                                                                         break;
  385.                                                                 }
  386.                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  387.                 uart_rbuf[PACK_COMM], sta, 0, 0, uart_sbuf);
  388.                                                 }
  389.                }
  390.                                 else if (uart_rbuf[PACK_COMT] == PDA_COMT_REQ)
  391.                                 {
  392.                                                 if(uart_rbuf[PACK_COMM] == 'S')
  393.                                                 {                                       
  394.                                   CARD_OPER = Card_ScanCard;
  395.             }
  396.                                                 else if(uart_rbuf[PACK_COMM] == 'T') //返回卡号
  397.                                                 {      
  398.                                                     CARD_OPER = Card_ScanTag;   
  399.                                                 }
  400.                                                 else if(uart_rbuf[PACK_COMM] == 'G' || uart_rbuf[PACK_COMM] == 'R')
  401.                                                 {
  402.                                                                  if(uart_rbuf[PACK_COMM] == 'G') //读余额
  403.                                                                  {
  404.                                                                                         CARD_OPER = Card_ReadOver;  
  405.                                                                  }
  406.                                                                  else if(uart_rbuf[PACK_COMM] == 'R') //读块数据
  407.                                                                  {                                             
  408.                                                                                         CARD_OPER = Card_ReadData;         
  409.                                                                  }                                                                           
  410.                                                 }                     
  411.                                                 else if (uart_rbuf[PACK_COMM] == 'p')
  412.                                                 {               
  413.                                                                 len = sizeof(PDA_product_ver);
  414.                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  415.                                                                 uart_rbuf[PACK_COMM], 0x00,len, PDA_product_ver, uart_sbuf);                                             
  416.                         }
  417.                                                 else if (uart_rbuf[PACK_COMM] == 'c')
  418.                                                 {       
  419.                                                                 sta = PCD_request(0x52, iso14443a_cardtype);
  420.                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  421.                                                                 uart_rbuf[PACK_COMM], sta,2, iso14443a_cardtype, uart_sbuf);
  422.                         }
  423.                                                 else if (uart_rbuf[PACK_COMM] == 'n')
  424.                                                 {       
  425.                                                                 sta = PCD_anticoll(iso14443a_cardsnr);
  426.                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  427.                                                                 uart_rbuf[PACK_COMM], sta,4, iso14443a_cardsnr, uart_sbuf);
  428.                         }
  429.                                                 else if (uart_rbuf[PACK_COMM] == 'r')
  430.                                                 {
  431.                                                                 sta = PCD_read(uart_rbuf[PACK_DATA], dat_buf);
  432.                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  433.                                                                                         uart_rbuf[PACK_COMM], sta,
  434.                                                                                         16, dat_buf, uart_sbuf);
  435.                         }
  436.             else if (uart_rbuf[PACK_COMM] == 't')
  437.             {        // 15693??
  438.                                                                 sta = PDA_15693_snr(iso15693_cardsnr);
  439.                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  440.                                                                                         uart_rbuf[PACK_COMM], sta,
  441.                                                                                         8, iso15693_cardsnr, uart_sbuf);
  442.                                                                 for (i=0; i<8; i++)
  443.                                         iso15693_cardsnr[i] = 0x00;
  444.                         }
  445.             else if (uart_rbuf[PACK_COMM] == '=')
  446.             {        // ????
  447.                                                                 sta = PCD_read(uart_rbuf[PACK_DATA], dat_buf);
  448.                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  449.                                                                 uart_rbuf[PACK_COMM], sta, 4, dat_buf, uart_sbuf);
  450.                         }
  451.             else if (uart_rbuf[PACK_COMM] == 'o')
  452.             {        // COS??
  453.                                                                 par = (4<<4) & 0xF0;
  454.                                                                 sta = PCD_mfpro_rst(par, &len, &rst_dat[2]);
  455.                                                                 rst_dat[0] = par;
  456.                                                                 rst_dat[1] = len;
  457.                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  458.                                                                 uart_rbuf[PACK_COMM], sta, 0x12, rst_dat, uart_sbuf);
  459.                                     
  460.                                                                 cos_fwi = rst_dat[3];
  461.                                                                 cos_cidnad = 0;
  462.                                                                 for (i=0; i<18; i++)
  463.                                                                         rst_dat[i] = 0x00;
  464.                         }
  465.                                                 else if (uart_rbuf[PACK_COMM] == 'm')
  466.                                                 {        // ??COS??
  467.                                                                 cos_len = uart_rbuf[PACK_DALE];
  468.                                                                 memcpy(cos_dat, &uart_rbuf[PACK_DATA], cos_len);
  469.                                                                 sta = PCD_mfpro_comm(cos_cidnad, cos_fwi, &cos_len, cos_dat);
  470.                                                                
  471.                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  472.                                                                                         uart_rbuf[PACK_COMM], sta, cos_len, cos_dat, uart_sbuf);
  473.                         }
  474.                                                 else
  475.                                                 {        // ????????
  476.                                                                 PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  477.                                                                 uart_rbuf[PACK_COMM], 0x11, 0, 0, uart_sbuf);
  478.                         }
  479.             }
  480.                         else
  481.                         {
  482.                       PDA_package(uart_rbuf[PACK_NUMB], uart_rbuf[PACK_COMT],
  483.                             uart_rbuf[PACK_COMM], 0x10, 0, 0, uart_sbuf);
  484.             }
  485.                                
  486.                         if(CARD_OPER == Card_Null) //???????,????
  487.                         {
  488.          uart_putd(uart_sbuf);                          
  489.                for (i=0; i<16; i++)
  490.                                       dat_buf[i] = 0x00;                                            
  491.          uart_clr();      
  492.         }
  493.                         recv_flag = 0;
  494.                         uart_indx = 0;            
  495.         }
  496.         }
  497. }



  498. unsigned short crc16_tab[256] = {
  499.         0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
  500.         0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
  501.         0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
  502.         0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
  503.         0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
  504.         0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
  505.         0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
  506.         0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
  507.         0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
  508.         0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
  509.         0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
  510.         0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
  511.         0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
  512.         0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
  513.         0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
  514.         0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
  515.         0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
  516.         0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
  517.         0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
  518.         0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
  519.         0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
  520.         0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
  521.         0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
  522.         0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
  523.         0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
  524.         0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
  525.         0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
  526.         0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
  527.         0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
  528.         0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
  529.         0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
  530.         0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
  531. };


  532. unsigned short crc16_table(unsigned char *pcrc, unsigned short cnt)
  533. {
  534.         unsigned short crc16 = 0;
  535.         unsigned char crc_reg;
  536.         for ( ; cnt>0; cnt--)
  537.         {
  538.                 crc_reg = (unsigned char) (crc16>>8);
  539.                 crc16 <<= 8;
  540. ……………………

  541. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
STM32+RC632(SPI)源代码.rar (1.14 MB, 下载次数: 102)
回复

使用道具 举报

ID:206350 发表于 2021-9-2 15:46 | 显示全部楼层
刚刚接触RFID,谢谢分享,下载了学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表