RFID数据读取实训——STM32/51单片机Day4 | RC522模块 | 串口通信 | 可模拟RFID (三)仿真

目录

1 任务指导

2 实验步骤

3 串口调试

4 USART配置

5 fputs函数重写

内  容:能够读取RFID卡S50的ID——编程实现串口数据收发

学  时:3学时

知识点:电路图设计、USART配置  

重点: USART配置

难点:USART配置

时间:2022年12月22日 13:30~16:20 

1 任务指导

使用MFRC522读卡器读取S50卡的ID号,并显示在12864液晶上。

2 实验步骤

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 读写流程 

3 串口调试

为了模拟RFID数据通讯添加串口输出数据电路,通过查询数据手册,确定PA9引脚对应有USART1_TX(发送)功能。在proteus中添加虚拟终端,将虚拟终端的RXD(接收)引脚接与单片机引脚PA9连接。电路设计如图4。

图4 串口输出数据电路设计 

4 USART配置

在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);
 
}

5 fputs函数重写

重写串口发送函数,代码如下:

int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t)ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) != 1);
 
return ch;
}

物联沃分享整理
物联沃-IOTWORD物联网 » RFID数据读取实训——STM32/51单片机Day4 | RC522模块 | 串口通信 | 可模拟RFID (三)仿真

发表评论