STM32F401CCU6与MFRC522接线及读取示例

news/2024/10/17 0:20:29/

硬件准备

  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

参考

  • 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

http://www.ppmy.cn/news/381375.html

相关文章

【STM32f401学习之路-01】GPIO实战—点灯、检测按键

文章目录 GPIO实战点LED灯寄存器配置固件库函数配置 按键点灯 GPIO实战 GPIO 简介 每个通用 I/O 端口包括 4 个 32 位配置寄存器&#xff08; GPIOx_MODER、 GPIOx_OTYPER、 GPIOx_OSPEEDR 和 GPIOx_PUPDR&#xff09;、 2 个 32 位数据寄存器&#xff08;GPIOx_IDR 和 GPIOx_…

const用于C++引用(注意事项)

const用于C引用 存在的问题解决方法原理 存在的问题 左值是可以被引用的数据对象&#xff0c;可以通过地址访问它们&#xff0c;例如&#xff1a;变量、数组元素、结构体成员、引用和解引用的指针。 非左值包括字面常量&#xff08;用双引号包含的字符串除外&#xff09;和包含…

Java:使用bcrypt对密码加密和验证

文档 https://mvnrepository.com/artifact/org.mindrot/jbcrypthttp://www.mindrot.org/projects/jBCrypt/ 依赖 <dependency><groupId>org.mindrot</groupId><artifactId>jbcrypt</artifactId><version>0.4</version> </depe…

打造科学新高地|2023开放原子全球开源峰会科学智能分论坛圆满举行

6 月 11 日&#xff0c;以“AI 框架助力科学智能&#xff0c;打造科学新高地”为主题的 2023 开放原子全球开源峰会科学智能分论坛在北京圆满举行。北京航空航天大学计算机学院党委书记、教授李建欣参加并致辞&#xff1b;华为昇思 MindSpore 架构师倪宁曦、研究员徐旭升&#…

【算法专题】《程序员面试金典 - 学习计划 - 力扣(LeetCode)》学习大纲 学习笔记(持续更新中......)

程序员面试金典 - 学习计划 - 力扣&#xff08;LeetCode&#xff09; 〇、前言 1、本文目的 从整体上了解算法题型有哪些分类&#xff0c;以及具体的题型示例。本文为学习大纲&#xff0c;旨在作为学习指导开展学习&#xff0c;并将后期与本专题相关的个人学习笔记汇总到本文…

力扣刷题之贪心算法

视频链接地址&#xff1a;https://www.bilibili.com/video/BV1WK4y1R71x/?spm_id_from333.788&vd_sourcea8b9123058273b1fa0e1233c20ec2d2d **核心思想&#xff1a;**局部最优推出全局最优 贪心无套路

git创建本地分支并关联远程

git创建本地分支并关联远程 本地新建git分支 注&#xff1a;首先本地跟仓库都没有分支的前提下进行操作 本地创建新的分支并切换进新去 git checkout -b yyy创建远程分支&#xff0c;并且本地分支关联远程分支 git push --set-upstream origin yyy最后确认是否正确 git b…

查看笔记本电脑的配置

第一步&#xff1a;Window R&#xff0c;打开打开“运行”对话框。 第二步&#xff1a;输入命令&#xff1a;dxdiag 。点击”确定“按钮。 第三步&#xff1a;查看你想知道的信息。