#include "stm32f10x.h"
#include "stm32f10x_spi.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "delay.h"
#include "mfrc522.h"
#include "stdio.h"
#define SPI_CE_LOW() GPIO_ResetBits(GPIOA,GPIO_Pin_4)
#define SPI_CE_HIGH() GPIO_SetBits(GPIOA,GPIO_Pin_4)
void SPI1_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
}
uint8_t SPI1_SendByte(uint8_t byte)
{
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, byte);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) ==
RESET); return SPI_I2S_ReceiveData(SPI1); }
void MFRC522_Reset(void) { SPI_CE_LOW(); SPI1_SendByte(0x1B); SPI_CE_HIGH(); }
uint8_t MFRC522_ReadRegister(uint8_t addr) { SPI_CE_LOW(); uint8_t data; SPI1_SendByte(0x80 | addr); data = SPI1_SendByte(0x00); SPI_CE_HIGH(); return data; }
void MFRC522_WriteRegister(uint8_t addr, uint8_t val) { SPI_CE_LOW(); SPI1_SendByte(0x7F & addr); SPI1_SendByte(val); SPI_CE_HIGH(); }
void MFRC522_ReadRegisters(uint8_t addr, uint8_t count, uint8_t *values) { SPI_CE_LOW(); SPI1_SendByte(0x80 | addr); for(uint8_t i=0;i
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
STM32
+關注
關注
2270文章
10895瀏覽量
355722 -
代碼
+關注
關注
30文章
4779瀏覽量
68521 -
RC522
+關注
關注
7文章
56瀏覽量
23976
發(fā)布評論請先 登錄
相關推薦
RC522尋卡問題
我采用的是stm8s105k4單片機,最近操作RC522,模塊是淘寶買的。電源沒接錯(USB-STLINK上的3.3v,還有3.3v是接到最小系統(tǒng)板子上的),io也與單片機連接正確。在程序上,讀寫
發(fā)表于 08-18 20:18
SPI時序讀寫RFID-RC522的方法
.Cubemax配置四.核心代碼延時函數(shù)寫RC522寄存器讀RC522寄存器復位RC522使用代碼1.復位2.尋卡并得到其序列號總結(jié)前言用R
發(fā)表于 02-08 06:13
從0開始設計_基于STM32F1的RC522讀寫卡
從0開始設計_基于STM32F1的RC522讀寫卡1.介紹看網(wǎng)上很多RC522的教程都是基于讀卡ID的,這個對于很多應用來說其實沒有什么用,最近剛好有個項目需要讀寫卡,而
發(fā)表于 04-22 17:02
SI522如何兼容:RC522 FM17520 CV520 資料
si522優(yōu)勢點:相比于rc522 si522完全替換,不需要做任何更改,同時接收模式下功耗低10ma左右,si522為16MA。相比于rc522
發(fā)表于 02-24 14:37
使用51單片機設計的RFID RC522智能錢包程序免費下載
基于51單片機的RFID RC522智能錢包,這個程序主要演示的是RFID RC522智能錢包中的設置及扣款功能,相信會扣款那么充值也就改一個數(shù)字的事,具體的功能要自己根據(jù)實際情況進行編寫,下面是
發(fā)表于 08-28 17:29
?65次下載
RFID模塊RC522的程序和電路圖等詳細資料合集免費下載
本文檔的主要內(nèi)容詳細介紹的是RFID模塊RC522的程序和電路圖等詳細資料合集免費下載,里面有相關的STM32,51單片機,Na1000的源程序,RC522 mini 尺寸圖,
發(fā)表于 03-10 08:00
?123次下載
RC522 RFID 射頻模塊原廠代碼免費下載
這是關于RC522飛利浦的原廠代碼,由于其他內(nèi)容較大,所以只能分開來上傳,需要的小伙伴可以發(fā)的其他資料,包含RC522 RFID 射頻模塊的硬件電路部分和相關參考資料,以及天線計算工具。
發(fā)表于 11-03 11:49
?95次下載
STM32 Cubemax(十三) ——SPI時序讀寫RFID-RC522
.Cubemax配置四.核心代碼延時函數(shù)寫RC522寄存器讀RC522寄存器復位RC522使用代碼1.復位2.尋卡并得到其序列號總結(jié)前言用R
發(fā)表于 12-04 20:36
?55次下載
基于MF RC522的RFID讀寫器的設計
本設計采用 STM32F103ZET6 為微控制器,結(jié)合 MIAFER 1 卡、MF RC522
模塊、LCD 等部分設計并實現(xiàn)了基于 MF RC522 的 RFID 讀寫器的設計。其主要
功能
發(fā)表于 03-06 10:57
?8次下載
Air780EP之RC522開發(fā)板,你了解嗎?
?本文講解合宙Air780EP開發(fā)板RC522實例。 本文檔適用于Air780EP開發(fā)板; 關聯(lián)文檔和使用工具; rc522 - rc522 非接觸式讀寫卡驅(qū)動 - LuatOS 文檔
評論