2352|2

295

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【GD32L233C-START 评测】-六、SPI驱动RC522刷卡 [复制链接]

刚好要做个刷卡的测试,就利用GD开始了

RC522是买的网上通用的那种廉价的,RST接到PB0,SDA接PB12,SCK接PB13,MISO接PB14,MOSI接PB15.

  GD32的MCU手册中可以查到,使用spi需要重映射为AF6

于是,发现一个大坑

PB12这里一直出问题,后来查了其他测友的文章,只映射PB13-PB15,就OK了,不知道其他测友有没有遇到类似的问题。

#define SPI_CS_PORT			GPIOB
#define	SPI_CS_PIN			GPIO_PIN_12
#define RST_522_PORT		GPIOB
#define	RST_522_PIN			GPIO_PIN_0

#define	RCU_SPI_PORT		RCU_GPIOB

#define SPI_CS_HIGH     gpio_bit_set(SPI_CS_PORT, SPI_CS_PIN)
#define SPI_CS_LOW      gpio_bit_reset(SPI_CS_PORT, SPI_CS_PIN) 

#define RST_522_HIGH    gpio_bit_set(RST_522_PORT, RST_522_PIN) 
#define RST_522_LOW    	gpio_bit_reset(RST_522_PORT, RST_522_PIN)

宏定义之后的初始化代码如下

void SpiInit(void)
{
	spi_parameter_struct spi_init_struct;
	rcu_periph_clock_enable(RCU_SPI_PORT);
	rcu_periph_clock_enable(RCU_SPI1);
	
	gpio_mode_set(RST_522_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RST_522_PIN );
  gpio_output_options_set(RST_522_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RST_522_PIN);
	
	/* SPI1 GPIO configuration: NSS/PB12 */
	gpio_mode_set(SPI_CS_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, SPI_CS_PIN );
	gpio_output_options_set(SPI_CS_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, SPI_CS_PIN);

	/* 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);

	/* 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);
}

Rc522的代码是以前stm32的项目中翻过来的

uint8_t Scan_Card(void)
{
    uint8_t status, i, snr;
    static u8 Key[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
		//static u8 Tempbuf[16] ={0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C};;
    u8 CardID[5];

    status = MI_NOTAGERR;
    for(i = 0; i < 4; i++)//将存放卡号的数组清空
        CardID[i] = 0;
    status = PcdRequest(PICC_REQALL, CardID);//寻卡,CardID存放卡类型
    
		if(status == MI_OK)
		{
				status = PcdAnticoll(CardID);//防冲撞
				if(status == MI_OK)
				{
						//printf ( "\r\n防冲撞OK" );
						status = PcdSelect(CardID);//选定卡片--参数为卡的序列号
						if(status == MI_OK)
						{
								printf ( "\r\n选定卡片OK" );
//										snr = 8;
//                    status = PcdAuthState(PICC_AUTHENT1A, (snr * 4 - 1), Key, CardID);
//                    //验证密码
//                    if(status == MI_OK)
//                        printf ( "\r\n验证密码成功" );
//										else
//												printf ( "\r\n验证密码失败" );
//										
								//Display_CARD( CardID [ 0 ], CardID [ 1 ], CardID [ 2 ], CardID [ 3 ] );
								printf("\r\n Scan_Card No.:  %d-%d-%d-%d",CardID [ 0 ], CardID [ 1 ], CardID [ 2 ], CardID [ 3 ]);
								return MI_OK;
						}
				}
    }
    else
        status = MI_NOTAGERR;

		return status;
}

初始化后,在main主循环中调用Scan_Card就能看到效果了

   

此帖出自GD32 MCU论坛

最新回复

用spi需要重映射为AF6确实是一个坑,対编程不友好   详情 回复 发表于 2022-3-4 07:30
点赞 关注
 

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

用spi需要重映射为AF6确实是一个坑,対编程不友好

此帖出自GD32 MCU论坛

点评

是啊,最坑还是PB12需要单独处理  详情 回复 发表于 2022-3-6 13:19
 
 
 

回复

295

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
Jacktang 发表于 2022-3-4 07:30 用spi需要重映射为AF6确实是一个坑,対编程不友好

是啊,最坑还是PB12需要单独处理

此帖出自GD32 MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
四大品牌无线路由器产品推荐

来源:中关村在线 无线市场上最为人熟知的绝对是TP-Link、D-Link、网件、 Linksys四大品牌。如果您说买东西光看品牌是傻子,我 ...

芯片封装概述

芯片封装 一、DIP双列直插式封装  DIP(DualIn-line Package)是指采用双列直插形式封装的集成电路芯片,绝大多数中小规模 ...

IC设计工程师的高手进阶之路

随着中国IC设计产业渐入佳境,越来越多的工程师加入到这个新兴产业中。从一个初学者成长到主持大型设计的IC设计专家,这是每个IC ...

Helper2416-13——裸机第五弹——YL-boot——裸奔者的福音

YL-boot——裸奔者的福音 参与Helper2416开发板助学计划心得 闭关几天,终于初步完成了这YL-boot了。没有J-TAG不能单步调试还 ...

#8月改装#暴力改装普源DP832电源

本帖最后由 wangjiafu1985 于 2015-8-27 09:04 编辑 暴力改装普源DP832电源  免责声明:本贴发表之前经SOSO姐向普源提出授 ...

2020年1月份版主工作奖励

2020年1月获得版主奖励的名单如下: 用户名 发帖 回帖 加精 评分次数 删除主题/ ...

视频动画:直观的理解电磁波辐射

attach://480168.qlv480168 视频动画:直观的理解电磁波辐射 480168

Teensy 4.1 开发板

480436 Teensy 4.1,相比Teensy 4.0 有了不少改进。 引脚图 连接以太网 反面可以扩展存储器,左边是p ...

FPGA入门必备《Advanced FPGA Design》

国外FPGA设计经典教材《Advanced FPGA Design:Architecture, Implementation, and Optimization》,适合入门初学者学习。 ...

请教一个电源变压器后面电路问题

请教一个电源变压器后面电路问题 二极管和电阻前后调换一下位置,有什么影响? 862533

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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