STM32F401CCU6与MFRC522接线及读取示例
硬件准备
- stm32f401ccu6最小开发板
- rfid-rc522开发板
- usb2ttl转接, 可以用pl2303, ch340, CP2102, FT232
- Mifare 1K卡, UID长度4字节的版本
软件准备
- Keil uVision5
- 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以内(与读写器有关)
存储结构
- M1卡分为16个扇区, 每个扇区分为4块(块0、块1、块2、块3), 也可以将16个扇区的64个块按绝对地址编号为 0 - 63
- 第0扇区的块0用于存放厂商代码, 已经固化, 不可更改
- UID分为4byte, 7byte等版本
- 每个扇区的块0、块1、块2为数据块, 可用于存贮数据. 数据块可作两种应用
- 用作一般的数据保存,可以进行读、写操作
- 用作数据值,可以进行初始化值、加值、减值、读值操作
- 每个扇区的块3为控制块,包括了密码A(6 byte)、存取控制(4 byte)、密码B(6 byte)
- 每个扇区的密码和存取控制都是独立的, 可以根据实际需要设定各自的密码及存取控制.
- 存取控制为4个字节共32 位
- 扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的
- 在存取控制中每个块都有相应的三个控制位
- 三个控制位以正和反两种形式存在于存取控制字节中, 决定了该块的访问权限(如进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)
实物图及检测输出
接线图
输出格式
代码说明
- 在Keil MDK5中可以直接打开项目运行, 需要有STM32F401CCUx的依赖库
- 项目中使用USART1作为printf的输出
- 为了在stm32f401中可以使用, 将USART1设置为PB6和PB7, 如果要调整, 需要修改main.c的UARTmain_Init()方法
- SPI脚如果要调整, 需要修改rc522.c, PA5, PA6和PA7是datasheet中定义的SPI1
- 仅支持UID长度为4byte的M1卡
- 运行中会循环读取靠近的射频卡, 当读取成功时
- 读取前4个字节, 作异或(^)校验, 将结果与第5个字节比较, 不相同则返回错误
- 与预设的MyID作比较, 判断是否相同并展示
- 循环依次将64个区块读出并展示
下载
https://pan.baidu.com/s/1618xzotP3IG9aNII39CJ0g 提取码: 4c8c
参考
- rc522 https://thongrobot.wordpress.com/2017/07/22/stm32f407-rfid-project-full-code/
- f4串口 https://stm32f4-discovery.net/2014/04/library-04-connect-stm32f429-discovery-to-computer-with-usart/
- f4串口 https://blog.csdn.net/rcj183419/article/details/47758615
STM32F401CCU6与MFRC522接线及读取示例的更多相关文章
- Java 通过 BufferReader 实现 文件 写入读取 示例
package com.javatest.techzero.gui; import java.io.BufferedReader; import java.io.File; import java.i ...
- 特殊集合(stack、queue、hashtable的示例及练习)
特殊集合:stack,queue,hashtable stack:先进后出,一个一个的赋值一个一个的取值,按照顺序. .count 取集合内元素的个数 .push() ...
- Java将文件中的内容转换为sql语句(和并发定时读取文件)
数据文件内容data.txt {USER_TYPE=1,CREATE_USER=ZHANG,UPDATE_USER=li,OPER_NUM=D001,SRC=2,UPDATE_TIME=2018-11 ...
- 开源javacsv读取csv文件
一.下载地址:https://sourceforge.net/projects/javacsv/ 读取示例: public static void main(String[] args) { // 1 ...
- .Net Core配置文件读取整理
一 .配置文件说明 1.配置,主要是 指在程序中使用的一些特殊参数,并且大多数 仅在程序启动的之后指定不需要修改. 2.在以前.Net项目中配置文件主要指app.config或web.config,但 ...
- RxJava API使用示例
概述 RxJava API示例代码,可离线查看rxjava1.0大部分API的marble图,描述,示例代码,并支持示例代码实时输出及展示执行结果. 详细 代码下载:http://www.demoda ...
- Spring Boot 学习系列(07)—properties文件读取
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的properties读取方式 一般的,我们都可以自定义一个xxx.properties文件,然后在工程 ...
- Matlab 从入门到精通 Chapter11 文件读取I/O
11.1 工作空间数据读取 将工作空间的变量保存为文件,可以使用save命令. save('filename') 将文件保存在当前目录下,文件名为filename.mat save('filenam ...
- 深入理解 EF Core:EF Core 读取数据时发生了什么?
阅读本文大概需要 11 分钟. 原文:https://bit.ly/2UMiDLb 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能 ...
- matlab中imread 从图形文件读取图像
来源:https://ww2.mathworks.cn/help/matlab/ref/imread.html?searchHighlight=imread&s_tid=doc_srchtit ...
随机推荐
- 《OnJava》——11内部类
内部类 利用内部类,可以将逻辑上存在关联的类组织在一起,而且可以控制一个类在另一个类中的可见性. 内部类和组合不同,内部类是一种代码隐藏机制:将代码放在其他类的内部. 11.1 创建内部类 创建内部类 ...
- makefile文件详解
1. make 编译:将源代码文件翻译成处理器可执行的二进制文件的过程,这个过程的时间区间称为编译时 构建:指定多个编译过程的先后顺序 make命令是常用的构建工具,诞生于1977年,主要用于C/C+ ...
- 【ES系列】(一)简介与安装
首发博客地址 首发博客地址 系列文章地址 教学视频 为什么要学习 ES? 强大的全文搜索和检索功能:Elasticsearch 是一个开源的分布式搜索和分析引擎,使用倒排索引和分布式计算等技术,提供了 ...
- [转帖]shell编程:变量的数值计算实践(五)
https://www.cnblogs.com/luoahong/articles/9224495.html 算术运算符 变量的数值(整数)计算 1)(())用法:(此方法很常用)** 范例:sh ...
- [转帖]Region 性能调优
https://docs.pingcap.com/zh/tidb/v6.5/tune-region-performance 本文介绍了如何通过调整 Region 大小等方法对 Region 进行性能调 ...
- [转帖]程序运行崩溃(segfault)的排查方法
这篇博文记录的非常详细:https://blog.csdn.net/zhaohaijie600/article/details/45246569 我的笔记: 写的C++程序老是运行两三天就挂了,关键是 ...
- Jumper Server 堡垒机搭建过程
Jumper Server 堡垒机搭建过程 背景说明 公司组织考核, 要对一套系统进行安全设置.有一个项目是使用堡垒机进行登录 堡垒机有多种用途,可以实现日志审计和安全设置等. 买商业设备的话太困难了 ...
- js计算两个时间相差多少分钟
<script> var str = "2020-02-04" console.log(str) console.log(str.replace(/-/g, " ...
- 【VMware vSAN】使用命令行从vSAN集群中移除ESXi主机并加入到新的vSAN集群。
说明 本文只是陈述了一种方法,不必评判谁对谁错谁好谁坏,选择适合自己的即可. 环境 站点名称 vCenter版本 vSAN集群 集群主机 主机版本 磁盘组 vcsa67.lab.com vCenter ...
- k8s笔记——NodePort暴露nginx-controller实现https自动跳转自定义nodePort端口
安装nginx-controller并暴露nodePort helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx ...