摘要:利用STM32作为微控制器,使用RC522模块检测S50卡,实现电子钱包功能。

知识点铺垫:

一、IC卡标准协议

1、非接触式IC卡标准协议:ISO 14443 typeA/typeB协议(根据加密方式区分)
2、typeA:一般用于私用,会员卡消费卡等
   typeB:加密特性好,用于公用,例如身份证
3、扩展:15693--与上者的区别在于耦合方式不同,前者为近场耦合,后者为远场耦合,距离更远。

二、IC卡的分类:

三、程序分析

1、初始化相关引脚:涉及SPI通信相关、模块io等

2、初始化RC522:

/*================== 初始化RC522 ===================*/
void RC522_Init(void)
{PcdReset();                     /*读写模块复位初始化*/PcdAntennaOff();                /*关闭天线*/PcdAntennaOn();                 /*开启天线*/M500PcdConfigISOType( 'A' );    /*设置为ISO 14443A 模式*/
}

3、PcdReset();  //再次复位

4、对卡操作:寻卡--->防冲突--->选卡--->操作卡(固定程序,有时间再仔细分析)

重点分析对卡进行充值扣费操作:

/*=======================================================================* 功           能:已注册卡片充值* PICC_AUTHENT1A :验证A密钥的 * Card_Number_Buf:存储卡号的缓存区* New_Key        :新密码* Write_First_Data:要写入块的清零数据* Read_Data      :从块中读出数据的缓存* 返     回    值:1 或 MI_OK【注:MI_OK = 0】;*                  验证密码、写密码、写数据任一环节出错则返回1*                  验证密码、写密码、写数据所以环节都正确在返回MI_OK
=========================================================================*/
u8 Add_Money_Card(void)
{
//  u8 i;u8 status ;u16 money;Card_Mode = CONSUME;      // 注册完成之后,切换到消费功能status = PcdAuthState(PICC_AUTHENT1A, 7, New_Key, Card_Number_Buf);          // 验证卡片密码if (status != MI_OK)   {   return 1;   }                                    // 验证密码失败,可能卡没有被注册/******** 读出 block 4(扇区2 的 block0) 16字节数据到Read_Data中 **********/status=PcdRead(4, Read_Data);if (status != MI_OK)   {   return 1;   }     // 读出数据/***** 将前两个字节合并成一个金额数值money ******/money  = (u16) (Read_Data[1] << 8);money |= Read_Data[0];// printf("充值前%d   \n",money);   /********* 金额数值加10 *********/money = money + 10;/********** 将增加后的金额数值拆分成两个字节 *********/Read_Data[0] = (u8)(money);Read_Data[1] = (u8)(money >> 8);//  printf("充值后%d   \n",money);   /*向block 4(扇区2 的 block0) 中写入充值后的数据Read_Data*/status = PcdWrite(4, Read_Data);if (status != MI_OK) {   return 1;   }    // 写入数据失败printf("充值10元   \n");   return MI_OK;}

/*假设钱包余额为10元*/

money  = (u16) (Read_Data[1] << 8);  //0x00==0000 0000 0000 0000
    money |= Read_Data[0];                     //money==0000 0000 0001 0000
    /********* 金额数值加10 *********/
    money = money + 10;                       //money=0000 0000 0010 0000
    /********** 将增加后的金额数值拆分成两个字节 *********/
    Read_Data[0] = (u8)(money);          //Data[0]=0010 0000
    Read_Data[1] = (u8)(money >> 8); //Data[1]= 0000 0000

/*向block 4(扇区2 的 block0) 中写入充值后的数据Read_Data*/
    status = PcdWrite(4, Read_Data);    //扇区0中是block0,block1,block2,block3

余额变为20元。

---------------------------------------------------------------------------------------------------------------------------------

其他知识点补充:
* RFID有非常多的频段,常用的门禁卡一般是13.56Mhz;频率越高一般检测的距离更远。像ETC这种,处于超高频,可以远距离检测。
 NFC被称为近场通信,只有一个频段13.56MHZ,读卡器和标签于一体,集成度更高,主要用于支付领域。

* SPI: 四个引脚:MOSI:主设备输出,从设备输入;
          MOSO:主设备输入,从设备输出;
          SCK:时钟
          NSS:片选信号引脚,用于主设备选择特定的从设备通信。

* 耦合电路:两个或者两个以上电路构成一个网络时,若其中某一个电路中电流或者电压发生变  化,能影响到其他电路也发生类似的变化。
  耦合的作用是把某一电路的能量输送或转换到其他的电路中去。

--------------------------------------

RC522读卡器不同厂家引脚连接上有所不同。

区别在于RST引脚要连接3.3V,之前的模块是连接了GPIOC7。
RQ引脚理论要悬空,程序里面也没有使用,连接无妨。

当STM32遇上RFID相关推荐

  1. linux一致stm32,当STM32遇上Linux操作系统,一下子碰撞出STM32MP1

    MCU领域,STM32就是一个奇迹.从2007年推出第一颗STM32F103起,STM32就迈开步伐不断向前,在12年的时间里,不仅打造一个MCU超级平台,还构建了一个庞大的生态系统."ST ...

  2. 基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522

    目录 1. 实验硬件及原理图 1.1 RFID硬件 1.2 硬件原理图 2. 单片机与RFID硬件模块分析 3. 利用STM32CubeMX创建MDK工程 3.1 STM32CubeMX工程创建 3. ...

  3. 基于STM32单片机的RFID门禁显示系统

    基于STM32单片机的RFID门禁显示系统 本设计由STM32F103C8T6单片机最小系统+RFID-RC522模块+继电器模块+蜂鸣器电路+LCD1602液晶显示电路+按键电路+电源电路组成 1. ...

  4. 推荐系统遇上深度学习,9篇阿里推荐论文汇总!

    作者 | 石晓文 转载自小小挖掘机(ID: wAIsjwj) 业界常用的推荐系统主要分为两个阶段,召回阶段和精排阶段,当然有时候在最后还会接一些打散或者探索的规则,这点咱们就不考虑了. 前面九篇文章中 ...

  5. 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?

    5G已经来临,科技产品向5G升级已是大势所趋,这更是检验实力的探索之路. 2月24日,华为在巴塞罗那在线发布了一系列新品,其中,华为面向全球推出的5G高端旗舰平板,同时也是全球首款公开发布的5G平板华 ...

  6. 404未找到是什么意思_为什么老遇上404 not found?你懂的

    文章转载自公众号:一只学霸(bajie203) 昨天晚上 大毛火急火燎地打开了电脑 戴上了耳机 不到两分钟 -- 我们往前一凑 登等 果然是大家最害怕的一幕出现了 学霸在网上冲浪多年 留下的都是美好的 ...

  7. 《当用户体验设计遇上敏捷》一3.5 小结

    本节书摘来自异步社区<当用户体验设计遇上敏捷>一书中的第3章,第3.5节,作者[英]Lindsay Ratcliffe , Marc McNeill,更多章节内容可以访问云栖社区" ...

  8. 当网络安全遇上大数据分析(9)

    2012年3月份,Gartner发表过一篇报告--Information Security Is Becoming a Big Data Analytics Problem .里面主要就讲到了针对大规 ...

  9. html实体编码遇上js代码

    单双引号 在js代码中 在js中单.双引号引起来的是字符串,如果我们要在字符串中使用单.双引号,需要反斜杠进行转义 let str='user\'s name'; // or let str=&quo ...

最新文章

  1. 软件架构乱弹——问题域及其解决方法
  2. 安装JAVA8要登录_JDK8的安装及环境配置
  3. 《STL源码剖析常见面试问题》
  4. CentOS 6.6 nginx PHP 配置
  5. CPU内部看门狗,外部看门狗以及软件看门狗
  6. php完全中文手册下载,PHP4完全中文手册下载-PHP4完全中文手册 免费版
  7. C++ Perf性能调优+火焰图调优
  8. #11.11 个人排位赛round2_A.Diana and Liana(CodeForces 1121D)
  9. 汇编语言_一些寄存器与寻址方式
  10. VS 创建C# winfrom 语音播报(文字朗读),无需下载插件
  11. 部署DNS从服务失败,nslookup访问www.linuxprobe.com失败
  12. java教程菜鸟要飞_php7新特性 - 菜鸟要飞啊的IT小窝 - OSCHINA - 中文开源技术交流社区...
  13. Mybatis-Plus引入后出错的原因
  14. Flickr8k和Flickr8kCN 数据下载
  15. linux nginx的 yum安装
  16. 五一单片机之LCD1602
  17. V-Rep虚拟机器人实验平台在Ubuntu18.04LTS安装与使用笔记
  18. 【财经期刊FM-Radio|2021年03月29日】
  19. 3D月光宝盒游戏机模拟器方案源码项目解析(1)
  20. mysql经常挂掉_mysql 数据库经常报错挂掉

热门文章

  1. 电 桥 运 放 计 算
  2. Simultaneous modeling of car-following and lane-changing behaviors using deep learning
  3. 二战浙大失利+调剂科大教训帖
  4. Pandas个人最强笔记
  5. 贝叶斯方法的思想基础
  6. php access编程实例,PHP连接操作access数据库实例,access实例_PHP教程
  7. Javascript之js文件延时加载
  8. 彩虹登录聚合系统网站源码
  9. Cadence Allegro PCB中如何导出BOM
  10. windows命令行技巧dos命令ren的用法小记