找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8300|回复: 13
收起左侧

RC522射频模块实现M1卡钱包功能STM32源码与资料分享

  [复制链接]
ID:258850 发表于 2018-5-17 16:31 | 显示全部楼层 |阅读模式
硬件:
1、MCU(该程序使用STM32F103开发板)
2、RFID RC522读写器(会送两张MI卡)
软件:
1、串口调试助手
2、KEIl5开发工具
参考资料:
1、MCU(该程序使用STM32F103开发板)
2、stm32中文参考手册(V10)
3、Mifare1 S50IC卡中文说明书

实验说明:本程序可在51等单片机上运行,只需SPI接口,电源,注意RFID的电源范围,一块开发板,看懂程序后容易移植

实验程序内容:程序在网上下载案例,只实现读卡功能(网上大部分的资源大多是这种情况),于是对程序修改后进行编写,主要增加了STORE文件,
还可进行拓展。

程序实现功能:
最主要的功能是进行管理员认证后执行相应操作
1、管理员权限卡(具有全部权限)
2、用户卡(只能获取本卡信息,用户卡消费,需先获取管理员权限),认证管理员卡后可进行等操作

实验步骤:
1、按key0键进行管理员认证
2、按key1键进行密码修改,密码内容没有做输入,暂时没做界面(需管理员认证,实际是无需管理员认证的,只是偷懒了以下)
3、按key2键进行(需管理员认证)

调试错误:
1、SPi的时钟极性和时钟相位没有设置正确,调试发现发送命令字后返回的结果不一致
2、RC522复位时间和启动时间间隔太短,导致读卡不灵敏
3、将扇区控制块的内容写错(格式错误,存储控制的数据和反码不一致,粗心导致),导致不能读写这个

钱包数据格式:
示例1:01 ff ff ff f7  0  0  0  01 ff ff ff 28 D7 28 D7           //数据存放在0x28
示例2:3  0  0  0  fc  ff ff ff  3  0  0  0  8 f7  8 f7         //数据存放在0x08
前4字节:金额
4-7    :反码
8-11   :备份金额
12-15  :地址 地址反码 地址 地址反码

管理员卡:扇区使用0x18-0x1B
1B:秘钥A:888888   控制字:f0 f0 f0 69  秘钥B:654321
18:块数据 FF BB E0 A8 C9 56 FE AC C4 D2 B6 7B 55 6B 3F 19
0f:秘钥A:123321   控制字:ff 07 80 69  秘钥B:010101
控制字说明:
块 0: C10 C20 C30  101        秘钥B认证后可读不可写
块 1: C11 C21 C31        101        秘钥B认证后可读不可写
块 2: C12 C22 C32        101        秘钥B认证后可读不可写
块 3: C13 C23 C33        101 秘钥A、B不可读写,验证秘钥B可改写控制字

用户卡:扇区使用0x0C-0x0F
0X0F:秘钥A:初始值:123456(用户可更改)  控制字:80 ff 87 69  秘钥B:960917
0X0C作为钱包存储
块 0: C10 C20 C30  110        秘钥A可读,可减,秘钥B:可读可写可增可减
块 1: C11 C21 C31        110        秘钥B认证后可读不可写
块 2: C12 C22 C32        110        秘钥B认证后可读不可写
块 3: C13 C23 C33        101 秘钥A、B不可读写,验证秘钥B可改写控制字

120315h594j0jlz60looio.png.thumb.jpg


单片机源程序如下:
  1. #include "output.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "rc522.h"
  5. #include "lcd.h"                         //显示模块
  6. #include "key.h"             //
  7. #include "usart.h"
  8. #include "string.h"
  9. #include "led.h"
  10. #include "store.h"
  11. /*******************************
  12. *连线说明:
  13. *1--SS  <----->PF0
  14. *2--SCK <----->PB13
  15. *3--MOSI<----->PB15
  16. *4--MISO<----->PB14
  17. *5--悬空
  18. *6--GND <----->GND
  19. *7--RST <----->PF1
  20. *8--VCC <----->VCC
  21. ************************************/
  22. int main(void)
  23. {               
  24.         unsigned char status;
  25.         u8 key=0;
  26.         u8 i=0;
  27.         u8 RETRY=0x10; //最多十次验证管理员用户卡
  28.         u8 flag=1;
  29.         Stm32_Clock_Init(9);
  30.         MY_NVIC_PriorityGroupConfig(2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  31.          delay_init(72);                     //延时函数初始化        
  32.          OUTPUT_Init();                         //输出模块初始化
  33.         uart_init(72,115200);
  34.         LCD_Init();
  35.         KEY_Init();
  36.         LED_Init();
  37.         InitRc522();                                //初始化射频卡模块
  38.         POINT_COLOR=RED;
  39.         LCD_ShowString(40,80,240,24,24,(u8*)"open the ");
  40.         LCD_ShowString(20,110,240,24,24,(u8*)"serial assistant.");
  41.         LCD_ShowString(0,140,240,16,16,(u8*)"KEY0:administrator operation");
  42.         LCD_ShowString(0,160,240,16,16,(u8*)"KEY1:change password");
  43.         LCD_ShowString(0,180,240,16,16,(u8*)"KEY2:rechargeable card");
  44.         printf("***************************操作说明***************************************\r\n");
  45.         printf("先按key0进入管理员验证,需先初始化管理员卡,用户卡,再按key1或key2进行用户卡操作\r\n");
  46.           printf("**************************************************************************\r\n");
  47.         while(1)
  48.         {
  49.                 key=KEY_Scan(0);
  50.                 if(key==1)
  51.                 {
  52.                         RETRY=0x10;
  53.                         do
  54.                         {
  55.                                 status=store(addrAdmin,KEYB_1B,0);  //管理员认证   
  56.                                 if(status==MI_OK){
  57.                                         break;
  58.                                 }
  59.                                 RETRY--;
  60.                         }while(RETRY!=0);
  61.                         if(RETRY!=0&&IsManager==1){ //验证管理身份成功
  62.                                 while(flag)
  63.                                 {
  64.                                         key=KEY_Scan(0);
  65.                                         if(key==3)  //金额可在STORE.c文件中修改
  66.                                         {
  67.                                                 status=userRecharge(addrUserDat,USERKEYINITB,Recharge,0);  //金额
  68.                                                 if(status==MI_OK)
  69.                                                 {
  70.                                                         printf(":%d :%d 现:%d\r\n",prevMoney,Recharge,laterMoney);
  71.                                                 }
  72.                                         }
  73.                                         if(key==2)  //改密
  74.                                         {
  75.                                                 status=changeUserPwd(addrUserDat,addrUserCon,USERKEYINITB,(u8*)"123456",(u8*)"123321",0);
  76.                                                 if(status==MI_OK)
  77.                                                 {
  78.                                                         printf("密码修改成功\r\n");
  79.                                                 }
  80.                                         }
  81.                                 }
  82.                         }
  83.                         else{
  84.                                 printf("请检查你放置的管理员卡是否正确\r\n");


  85. ……………………

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

所有资料51hei提供下载:
RFID射频.rar (168.91 KB, 下载次数: 240)

评分

参与人数 2黑币 +55 收起 理由
feilonglong + 5
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:335252 发表于 2018-9-16 20:56 | 显示全部楼层
点赞!
RFID文档资料.rar
第二个压缩文档,打不开
回复

使用道具 举报

ID:388341 发表于 2018-10-16 20:34 | 显示全部楼层
要是SPI接口的吧
回复

使用道具 举报

ID:407498 发表于 2018-10-25 15:13 | 显示全部楼层
谢了,很需要这种资料
回复

使用道具 举报

ID:104982 发表于 2018-11-7 08:41 | 显示全部楼层
请问管理员卡如何初始化呢?
回复

使用道具 举报

ID:365360 发表于 2018-12-27 11:02 | 显示全部楼层
非常需要这个!
回复

使用道具 举报

ID:67443 发表于 2019-6-16 15:19 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

ID:561907 发表于 2019-6-17 17:08 | 显示全部楼层
收藏了,以备下载学习。
回复

使用道具 举报

ID:614825 发表于 2019-9-23 10:16 | 显示全部楼层
积分有点多啊,过几天下载吧
回复

使用道具 举报

ID:511461 发表于 2019-10-19 16:49 | 显示全部楼层
如何进行管理员的初始化
回复

使用道具 举报

ID:323384 发表于 2019-10-19 19:06 | 显示全部楼层
谢谢分享,对我非常有用,谢谢您!
回复

使用道具 举报

ID:718503 发表于 2020-3-29 23:51 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:730070 发表于 2020-6-13 08:23 | 显示全部楼层
学习了,不知道有没有protues仿真图或原理图
回复

使用道具 举报

ID:190564 发表于 2021-3-27 09:17 | 显示全部楼层
是不是没有初始化数据格式,扣和充函数不能通信
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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