赞
踩
目录
内 容:能够读取RFID卡S50的ID——编程实现串口数据收发
学 时:3学时
知识点:电路图设计、USART配置
重点: USART配置
难点:USART配置
时间:2022年12月22日 13:30~16:20
使用MFRC522读卡器读取S50卡的ID号,并显示在12864液晶上。
MFRC522读卡器和开发板的硬件接线,如图1-2所示,上图为电路图,下图为实物图。
图1-1 MFRC522硬件电路
图1-2 MFRC522读卡器电路图和实物图
读卡器和开发板进行连接,连接方式如图1-3所示。
图1- 3 读卡器与开发板连接方式
MFRC522是高度集成的非接触式(13.56MHz)读卡芯片。此发送模块利用调制和解调的原理,并将它们完全集成到各种非接触式通信方法和协议中。
MFRC522的发送模块支持ISO 14443A/MIFARE协议。
MFRC522的内部发送器部分可以驱动读卡器天线与ISO 14443A/MIFARE卡和应答机的通信,无需其他的电路。接收器部分提供一个功能强大和高效的解调和译码电路,用来处理兼用ISO 1443A/MIFARE的卡和应答机的信号。数字电路部分处理完整的ISO1443A/MIFARE帧和错误检测。MFRC522支持MFARE更高速的非接触式通信,双向数据传输速率高达424Kbit/s。可以实现各种不同主机接口的功能:
(1)SPI接口
(2)串行UART接口
(3)I2C接口
不同类型的接口连接方法如图1-4所示。
图1-4 不同类型接口的连接方法
开发板有专门的SPI接口,用于外接MFRC522。所以,本实验采用的是SPI接口,如图1-1所示。关于MFRC522的详细资料可以参考MFRC522中文手册。
软件实现步骤。下图1-5是读写流程。
图1-5 读写流程
为了模拟RFID数据通讯添加串口输出数据电路,通过查询数据手册,确定PA9引脚对应有USART1_TX(发送)功能。在proteus中添加虚拟终端,将虚拟终端的RXD(接收)引脚接与单片机引脚PA9连接。电路设计如图4。
图4 串口输出数据电路设计
在main.c中编写USART的配置函数,调用库函数配置USART相关参数,在配置参数之前,需要调用时钟使能函数对GPIOA、AFIO、USART的端口时钟进行使能。GPIO_InitTypeDef及USART_InitTypeDef结构体包含了GPIO和USART所需配置的参数,因此参数配置主要是调用GPIO_InitTypeDef及USART_InitTypeDef对其内部的元素进行配置。代码如下:
- void usart_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- USART_InitTypeDef USART_InitStruct;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE);
-
- // PA9 -> Tx
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- // USART
- USART_InitStruct.USART_BaudRate = 9600;
- USART_InitStruct.USART_WordLength = USART_WordLength_8b;
- USART_InitStruct.USART_Parity = USART_Parity_No;
- USART_InitStruct.USART_StopBits = USART_StopBits_1;
- USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStruct.USART_Mode = USART_Mode_Tx;
- USART_Init(USART1, &USART_InitStruct);
-
- USART_Cmd(USART1, ENABLE);
-
- }

重写串口发送函数,代码如下:
- int fputc(int ch, FILE *f)
- {
- USART_SendData(USART1, (uint8_t)ch);
- while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) != 1);
-
- return ch;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。