OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4401|回复: 6

RC522和STM32F1通信硬件SPI读写函数DC寄存器一直为0

[复制链接]

21

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
金钱
425
注册时间
2019-5-12
在线时间
168 小时
发表于 2020-10-22 21:12:32 | 显示全部楼层 |阅读模式
1金钱


  1. /*
  2. * 函数名:readRawRC
  3. * 描述  :读RC522寄存器
  4. * 输入  :ucAddress,寄存器地址
  5. * 返回  : 寄存器的当前值
  6. * 调用  :内部调用
  7. */
  8. static u8 readRawRC ( u8 ucAddress )
  9. {
  10.         u8 ucAddr, ucReturn;
  11.        
  12.         ucAddr = ( ( ucAddress << 1 ) & 0x7E ) | 0x80;
  13.        
  14.         RC522_CS_ENABLE;
  15.        
  16.         Spi1.ReadWriteByte(ucAddr);///spiRc522SendByte ( ucAddr );//
  17.        
  18.         ucReturn = Spi1.ReadWriteByte(0);///spiRc522ReadByte();///
  19.        
  20.         RC522_CS_DISABLE;
  21.        
  22.         return ucReturn;
  23.        
  24. }

  25. /*
  26. * 函数名:WriteRawRC
  27. * 描述  :写RC522寄存器
  28. * 输入  :ucAddress,寄存器地址
  29. *         ucValue,写入寄存器的值
  30. * 返回  : 无
  31. * 调用  :内部调用
  32. */
  33. static void writeRawRC ( u8 ucAddress, u8 ucValue )
  34. {  
  35.         u8 ucAddr;
  36.                
  37.         ucAddr = ( ucAddress << 1 ) & 0x7E;
  38.        
  39.         RC522_CS_ENABLE;
  40.        
  41.         Spi1.ReadWriteByte(ucAddr);///spiRc522SendByte ( ucAddr );//
  42.        
  43.         Spi1.ReadWriteByte(ucValue);//spiRc522SendByte ( ucValue );
  44.        
  45.         RC522_CS_DISABLE;       

  46. }
复制代码
毋庸置疑,参考的网上的例程,但是为什么读RC的函数return 返回的是0?还有我用模拟时序的方式RC522软件复位会在while ( readRawRC ( CommandReg ) & 0x10 ); 卡死;但是硬件SPI则解决了这个问题

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2154

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4947
金钱
4947
注册时间
2015-1-10
在线时间
620 小时
发表于 2020-10-23 09:32:29 | 显示全部楼层
用示波器看看你的模拟SPI时序,涉及硬件信号的用示波器看看总能找到问题,硬件SPI能解决的模拟解决不了那只能是时序问题了
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-10-23 16:10:14 | 显示全部楼层
看看时序对不对
回复

使用道具 举报

21

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
金钱
425
注册时间
2019-5-12
在线时间
168 小时
 楼主| 发表于 2020-11-5 23:16:58 | 显示全部楼层

时序是对的
RC522时序.png
回复

使用道具 举报

21

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
金钱
425
注册时间
2019-5-12
在线时间
168 小时
 楼主| 发表于 2020-11-5 23:18:22 | 显示全部楼层
本帖最后由 hejun96 于 2020-11-6 10:09 编辑

在while那里断点卡死估计是RC522有虚焊,重新焊下RC522断点就可以下去了,这个时序图我是用模拟SPI通信做的
回复

使用道具 举报

21

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
金钱
425
注册时间
2019-5-12
在线时间
168 小时
 楼主| 发表于 2020-11-9 10:19:39 | 显示全部楼层
本帖最后由 hejun96 于 2020-11-10 10:53 编辑

GD32F103C8T6内部晶体倍频做主频和RC522 用SPI1通信可行的吗,目前引脚用了PA15,PB3,PB4,PB5这组,同时我禁用了JTAG,开启了SPI1重映射,C8T6这个封装都是支持的;如果我现在要把ID卡号打印在TFTLCD上面又要如何将十六进制数组转换成字符串显示呢?
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2019-7-14
在线时间
19 小时
发表于 2020-11-27 22:32:18 | 显示全部楼层
我也是遇到了这个问题,好几天了也没解决,楼主是怎么解决问题的?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 02:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表