硬件准备

  1. stm32f401ccu6最小开发板
  2. rfid-rc522开发板
  3. usb2ttl转接, 可以用pl2303, ch340, CP2102, FT232
  4. Mifare 1K卡, UID长度4字节的版本

软件准备

  1. Keil uVision5
  2. putty, xshell等可以连接com口的终端

MFRC522 13.56MHZ射频卡读卡器

SPI接线

SPI是Serial Peripheral Interface的缩写, 是一种同步的短距离串口通信接口规范, 由摩托罗拉与80年代开发, 主要用于嵌入式系统, 特别是SD卡和LCD显示. SPI设备由一主(master)多从(slave)组成, 通过SS(slave select)或者CS(chip select)选择通信. 通信需要的接口一般为4个:

  • SCLK: Serial Clock (output from master)
  • MOSI: Master Out Slave In (data output from master)
  • MISO: Master In Slave Out (data output from slave)
  • SS: Slave Select (often active low, output from master)

stm32f401ccu6与rfid-rc522和usb2ttl的接线

MFRC522 <====> STM32F401, 在rc522.c中设置, PA5, PA6和PA7是datasheet中定义的SPI1

SS(SDA)    ->    PA2
SCK -> PA5
MOSI -> PA7
MISO -> PA6
IRQ
GND -> GND
RST -> PA3
3.3V -> 3.3V

PL2303/CH340 <====> STM32F401, 在main.c的UARTmain_Init()方法中设置, PB6和PB7是datasheet中定义的USART1

TX         ->    PB7 (RX)
RX -> PB6 (TX)
GND -> GND

M1卡(Mifare 1K Card)

主要指标

  • 容量为8K位EEPROM, 8192 bits(1K bytes)
  • 分为16 个扇区,每个扇区为4 块,每块16 个字节,以块为存取单位
  • 每个扇区有独立的一组密码及访问控制
  • 每张卡有唯一序列号,为32 位
  • 具有防冲突机制,支持多卡操作
  • 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路
  • 数据保存期10年,可改写10万次,读无限次
  • 工作温度:-20℃ ~ 50℃(温度为90%), PET 材料封装的M1卡温度可达100℃。
  • 工作频 :13.56MHZ
  • 通信速 :106Kbps
  • 读写距离:10cm以内(与读写器有关)

存储结构

  1. M1卡分为16个扇区, 每个扇区分为4块(块0、块1、块2、块3), 也可以将16个扇区的64个块按绝对地址编号为 0 - 63
  2. 第0扇区的块0用于存放厂商代码, 已经固化, 不可更改
  3. UID分为4byte, 7byte等版本
  4. 每个扇区的块0、块1、块2为数据块, 可用于存贮数据. 数据块可作两种应用
  5. 用作一般的数据保存,可以进行读、写操作
  6. 用作数据值,可以进行初始化值、加值、减值、读值操作
  7. 每个扇区的块3为控制块,包括了密码A(6 byte)、存取控制(4 byte)、密码B(6 byte)
  8. 每个扇区的密码和存取控制都是独立的, 可以根据实际需要设定各自的密码及存取控制.
  9. 存取控制为4个字节共32 位
  10. 扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的
  11. 在存取控制中每个块都有相应的三个控制位
  12. 三个控制位以正和反两种形式存在于存取控制字节中, 决定了该块的访问权限(如进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)

实物图及检测输出

接线图





输出格式

代码说明

  1. 在Keil MDK5中可以直接打开项目运行, 需要有STM32F401CCUx的依赖库
  2. 项目中使用USART1作为printf的输出
  3. 为了在stm32f401中可以使用, 将USART1设置为PB6和PB7, 如果要调整, 需要修改main.c的UARTmain_Init()方法
  4. SPI脚如果要调整, 需要修改rc522.c, PA5, PA6和PA7是datasheet中定义的SPI1
  5. 仅支持UID长度为4byte的M1卡
  6. 运行中会循环读取靠近的射频卡, 当读取成功时
    1. 读取前4个字节, 作异或(^)校验, 将结果与第5个字节比较, 不相同则返回错误
    2. 与预设的MyID作比较, 判断是否相同并展示
    3. 循环依次将64个区块读出并展示

下载

https://pan.baidu.com/s/1618xzotP3IG9aNII39CJ0g 提取码: 4c8c

参考

STM32F401CCU6与MFRC522接线及读取示例的更多相关文章

  1. Java 通过 BufferReader 实现 文件 写入读取 示例

    package com.javatest.techzero.gui; import java.io.BufferedReader; import java.io.File; import java.i ...

  2. 特殊集合(stack、queue、hashtable的示例及练习)

    特殊集合:stack,queue,hashtable stack:先进后出,一个一个的赋值一个一个的取值,按照顺序. .count           取集合内元素的个数 .push()        ...

  3. Java将文件中的内容转换为sql语句(和并发定时读取文件)

    数据文件内容data.txt {USER_TYPE=1,CREATE_USER=ZHANG,UPDATE_USER=li,OPER_NUM=D001,SRC=2,UPDATE_TIME=2018-11 ...

  4. 开源javacsv读取csv文件

    一.下载地址:https://sourceforge.net/projects/javacsv/ 读取示例: public static void main(String[] args) { // 1 ...

  5. .Net Core配置文件读取整理

    一 .配置文件说明 1.配置,主要是 指在程序中使用的一些特殊参数,并且大多数 仅在程序启动的之后指定不需要修改. 2.在以前.Net项目中配置文件主要指app.config或web.config,但 ...

  6. RxJava API使用示例

    概述 RxJava API示例代码,可离线查看rxjava1.0大部分API的marble图,描述,示例代码,并支持示例代码实时输出及展示执行结果. 详细 代码下载:http://www.demoda ...

  7. Spring Boot 学习系列(07)—properties文件读取

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的properties读取方式 一般的,我们都可以自定义一个xxx.properties文件,然后在工程 ...

  8. Matlab 从入门到精通 Chapter11 文件读取I/O

    11.1 工作空间数据读取 将工作空间的变量保存为文件,可以使用save命令.  save('filename') 将文件保存在当前目录下,文件名为filename.mat save('filenam ...

  9. 深入理解 EF Core:EF Core 读取数据时发生了什么?

    阅读本文大概需要 11 分钟. 原文:https://bit.ly/2UMiDLb 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能 ...

  10. matlab中imread 从图形文件读取图像

    来源:https://ww2.mathworks.cn/help/matlab/ref/imread.html?searchHighlight=imread&s_tid=doc_srchtit ...

随机推荐

  1. 560.和为k的数组

    1.题目介绍 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 . 子数组是数组中元素的连续非空序列. 示例 1: 输入:nums = [1,1,1], ...

  2. 给Hexo博客文章加密

    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 原文地址 这是个啥 首先, 这是 Hexo 生态圈中 最好的 ...

  3. [转帖]Linux内存管理(一)——从硬件角度看内存管理

    从硬件角度看内存管理 ①.在操作系统还没有出来之前,程序都是被存放在卡片上,计算机读取一张卡片就运行一条指令.这种从外部存储介质上直接运行指令的方法效率很低 ②.单道编程的内存管理 所谓单道,就是整个 ...

  4. [转帖]国产数据库到底行不行?人大金仓KINGBASE数据库与主流开源数据库性能实测

    近年来,人大金仓的数据库产品受到了外界诸多的关注.做产品,免不了要接受用户的对比和选择,数据库因其行业的自身特点,还有很多开源的技术产品同台比拼,用户因此也会产生诸多疑问,国产数据库相比开源数据库到底 ...

  5. Mysql localhost 无法登录 root用户的处理过程

    问题说明: 前段时间同事修改密码, 但是发现修改了密码之后,外面可以连接root用户, 但是本地无法连接了. 怀疑是密码修改存在问题,需要重新进行处理 这里进行简单的描述. 问题现象 使用 mysql ...

  6. MySQL数据库精选(从入门使用到底层结构)

    基本使用MySQL 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库.表.字段) DML: 数据操作语言,用来对数据库表中的数据进行增删改 DQL: 数据查询语言,用来查询数据库中表 ...

  7. Go-操作redis/redigo

    目录 Go-操作redis 安装 连接 使用 设置key过期时间 批量获取mget.批量设置mset 列表操作 hash操作 Pipelining(管道) redis发布会订阅模式 事务操作 万能操作 ...

  8. Vue基础系列文章10---单文件组件

    1.单文件组件的结构 <template> <!--这里用于定义VUE组件的模块内容--> <dvi> <h1>这是 APP 根组件</h1> ...

  9. 几种方法验证unity是否为development build

    我在月初接入了uwa的性能测试SDK,需要提交一个development build的游戏安装包给uwa进行真人真机测试,本文说下如何判断安装包是否为development build. 直观上判断 ...

  10. 从零开始配置 vim(16)——启动界面配置

    不知道各位小伙伴用过 spacevim 或者 LunarVim 又或者 doomvim 或者其他的什么 vim 配置框架,我们发现他们的启动界面都做的比较好看,而我们默认进入的启动界面则显得比较素了. ...