1977|1

565

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【GD32L233C-START评测】7、硬件SPI1驱动RC522 [复制链接]

相关文章:

【GD32L233C-START评测】1、优点与缺点都很明显的GD32L233C-START(开箱)

【GD32L233C-START评测】2、非阻塞方式点灯,blink,blink,blink……

【GD32L233C-START评测】3、pwm实现呼吸灯

【GD32L233C-START评测】4、串口不定长数据接收

【GD32L233C-START评测】5、Flash读写——使用内部Flash存储数据

【GD32L233C-START评测】6、硬件I2C驱动0.96吋OLED

 

1、关于GD32L233CCT6的SPI接口

可以看出 有两路spi,spi0和spi1,本节使用spi1。

 

2、开发板上SPI的引脚

 

3、spi1引脚复用

4、开发板与RC522模块连接

开发板                             rc522

PB12 <----------------------------->SDA(NSS)

PB13 <----------------------------->SCK

PB14 <----------------------------->MISO

PB15 <----------------------------->MOSI

PB0   <-----------------------------> RST

3.3V  <----------------------------->3V3

GND <----------------------------->GND

 

5、与SPI相关操作代码

void SpiIoInit(void)
{
	rcu_periph_clock_enable(RCU_GPIOB);
	
	gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0 );
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
	
	/* SPI1 GPIO configuration: NSS/PB12 */
	gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_12 );
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);
	
	/* SPI1 GPIO configuration: SCK/PB13, MISO/PB14, MOSI/PB15 */
    gpio_af_set(GPIOB, GPIO_AF_6, GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);
    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);
}


void SpiInit(void)
{
    spi_parameter_struct spi_init_struct;

	rcu_periph_clock_enable(RCU_SPI1);

    /* deinitilize SPI and the parameters */
    spi_i2s_deinit(SPI1);
    spi_struct_para_init(&spi_init_struct);

    /* SPI1 parameter configuration */
    spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
    spi_init_struct.device_mode          = SPI_MASTER;
    spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
    spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
    spi_init_struct.nss                  = SPI_NSS_SOFT;
    spi_init_struct.prescale             = SPI_PSC_8;
    spi_init_struct.endian               = SPI_ENDIAN_MSB;
    spi_init(SPI1, &spi_init_struct);
	
	spi_crc_polynomial_set(SPI1, 7);

	spi_enable(SPI1);
}


uint8_t  SPIWriteByte(uint8_t Byte)
{
	uint16_t ret=0;

	while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE)) {};   //等待发送区空	
    spi_i2s_data_transmit(SPI1, Byte);                         //发送一个byte  
	while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_RBNE)) {};  //等待接收完一个byte
    ret=spi_i2s_data_receive(SPI1);                            //返回收到的数据
	
	return (ret&0x0ff);
}

6、与RC522操作相关代码

void RC522Init(void)
{
	uint8_t ver=0;
	
	SpiIoInit();
	SpiInit();
	
	PcdReset();
	
	ver=ReadRawRC(VersionReg);
	
	if(ver==0x91||ver==0x92)
	{
		printf("rc522 exist\r\n");
	}
	else
	{
		printf("rc522 not exist\r\n");
	}
	
	PcdAntennaOff();
	DelayMs(2);  
	PcdAntennaOn();
	M500PcdConfigISOType( 'A' );

}


unsigned char CT[2];//卡类型
unsigned char SN[4]; //卡号

void RC522Polling(void)
{
	unsigned char status;	
	uint8_t j; 
	
	status = PcdRequest(PICC_REQALL,CT);/*尋卡*/
	if(status==MI_OK)//尋卡成功
	{
		status=MI_ERR;
		status = PcdAnticoll(SN);/*防冲撞*/
	}

	if(status==MI_OK)//防衝撞成功
	{
		status=MI_ERR;		
		
		printf("\r\nThe Card ID is:");
		for(j=0;j<4;j++)
		{
			printf("%02X",SN[j]);
		}
		printf("\r\n");
		status =PcdSelect(SN);
	}
}

 

7、实验现象

单片机复位后,循环读卡,测试中使用了两张卡

 

 

 

此帖出自GD32 MCU论坛
点赞 关注
个人签名stm32/LoRa物联网:304350312
 

回复
举报

565

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

篇幅太长,将完整代码以文件的形式附上: rc522.c (18.04 KB, 下载次数: 8)

rc522.h (5.03 KB, 下载次数: 7)

此帖出自GD32 MCU论坛
 
个人签名stm32/LoRa物联网:304350312
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表