求助啊!关于STM32驱动RC500读卡器问题

[复制链接]
 楼主| 国防大学 发表于 2013-7-20 17:32 | 显示全部楼层 |阅读模式
小弟最近在做从51上驱动RC500读卡器移植到STM32上的实验。
知道STM32是3.3V芯片,RC500是5V芯片.
硬件电路我是这样做的:
    使用RC500的独立读/写选通的复用地址总线的连接方式,使用STM32的5V兼容引脚加5V上拉电阻和RC500相连
    采用模拟总线的方式,底层相关驱动代码如下:
  1. /**       
  2.         *        @name                static void GPIO_Write1(u8 value)
  3.   * [url=home.php?mod=space&uid=247401]@brief[/url]  GPIOBÒý½Å¸ß8λÊä³öÊý¾Ý
  4.   * @param  value ÒªÊä³öµÄÊý¾Ý  
  5.   * @retval None
  6.   */
  7. void GPIOB_Write1(u8 value)  
  8. {
  9.         RC500_Adress_Data_GPIO_Config(GPIO_Mode_Out_OD);//ÅäÖÃΪ¿ªÂ©Êä³ö
  10.        
  11.         GPIO_SetBits(GPIOB, (value<<8) & 0xffff);
  12.         GPIO_ResetBits(GPIOB, (((~value)<<8) & 0xffff));
  13. }

  14. /**       
  15.         *        @name                static void GPIO_Write1(u8 value)
  16.   * @brief  ¶ÁÈ¡GPIOBÒý½Å¸ß8λÊý¾Ý
  17.   * @param  None
  18.   * @retval ·µ»Ø´ÓGPIOBÒý½Å¸ß8λ¶ÁÈ¡µÄÊý¾Ý
  19.   */
  20. u8 GPIOB_Read(void)
  21. {
  22.         u8 value = 0;
  23.         u16 temp = 0;
  24.        
  25.         GPIOB_Write1(0XFF);
  26.         Delay_1ms(1);
  27.        
  28.         RC500_Adress_Data_GPIO_Config(GPIO_Mode_IN_FLOATING);//ÅäÖÃΪ¸¡¿ÕÊäÈë
  29.         Delay_1ms(1);
  30.         temp = GPIO_ReadInputData(GPIOB);
  31.         temp =(temp>>8);
  32.         value = temp;
  33.         return value;
  34. }

  35. /**       
  36.         *        @name                static void WriteRawIO(u8 address,u8 value)
  37.   * @brief  ÍùÒ»¸öµØÖ·Ð´Ò»¸öÊý¾Ý
  38.   * @param  address µØÖ·
  39.         *                                        value   Êý¾Ý
  40.   * @retval None
  41.   */
  42. void WriteRawIO(u8 address,u8 value)
  43. {
  44.         RC500_ALE(0);
  45.         RC500_NCS(1);
  46.         RC500_NWR(1);
  47.         RC500_ALE(1);

  48.         GPIOB_Write1(address);//дµØÖ·

  49.         RC500_ALE(0);
  50.         RC500_NCS(0);
  51.         GPIOB_Write1(value);//дÊý¾Ý
  52.         RC500_NWR(0);
  53.         __nop();
  54.   RC500_NWR(1);
  55.         RC500_NCS(1);
  56. }

  57. /**       
  58.         *        @name                u8 ReadRawIO(u8 address)
  59.   * @brief  ´ÓÒ»¸öµØÖ·¶ÁÒ»¸öÊý¾Ý
  60.   * @param  address µØÖ·  
  61.   * @retval ·µ»Ø¶Á³öµÄÊý¾Ý
  62.   */
  63. u8 ReadRawIO(u8 address)
  64. {
  65.         u8 value;

  66.         RC500_ALE(0);
  67.         RC500_NCS(1);
  68.         RC500_NRD(1);
  69.         RC500_ALE(1);
  70.        
  71.   GPIOB_Write1(address);//дµØÖ·
  72.        
  73.         RC500_ALE(0);
  74.         RC500_NCS(0);
  75.        
  76.         __nop();
  77.         Delay_1ms(1);
  78.         RC500_NRD(0);
  79.         value = GPIOB_Read();//¶Á³öÊý¾Ý
  80.          
  81.         RC500_NRD(1);
  82.         RC500_NCS(1);

  83.         return value;
  84. }

  85. /**       
  86.         *        @name                void WriteIO(u8 address, u8 value)
  87.   * @brief  ÍùRC500Ò»¸öµØÖ·Ð´Ò»¸öÊý¾Ý
  88.   * @param  address µØÖ·  
  89.                                                 value                Êý¾Ý
  90.   * @retval None
  91.   */
  92. void WriteIO(u8 address, u8 value)
  93. {
  94.         WriteRawIO(0x00,GetRegPage(address));  
  95.         WriteRawIO(address,value);              
  96. }

  97. /**       
  98.         *        @name                u8 ReadRawIO(u8 address)
  99.   * @brief  ´ÓÒ»¸öµØÖ·¶ÁÒ»¸öÊý¾Ý
  100.   * @param  address µØÖ·  
  101.   * @retval ·µ»Ø¶Á³öµÄÊý¾Ý
  102.   */
  103. u8 ReadIO(u8 address)
  104. {
  105.    WriteRawIO(0x00,GetRegPage(address));
  106.    return ReadRawIO(address);                    
  107. }

  108. /**       
  109.         *        @name                char M500PcdReset(void)
  110.   * @brief  RC500¸´Î»
  111.   * @param  None
  112.   * @retval ¸´Î»³É¹¦Ôò·µ»Ø0
  113.   */
  114. u8 M500PcdReset(void)
  115. {
  116.         u8 status = MI_OK;
  117.         u16 timecnt=0;
  118.        
  119.         RC500_NCS(0);
  120.         RC500_RST(0);  
  121.         Delay_1ms(50);
  122.         RC500_RST(1);  
  123.         Delay_1ms(20);
  124.         RC500_RST(0);
  125.         RC500_NCS(0);       
  126.         Delay_1ms(10);
  127.        
  128.         timecnt=3000;

  129.         while ((ReadIO(RegCommand) & PCD_RESETPHASE) && timecnt--);//µÈ´ý³õʼ»¯²¢ÐнӿÚÀàÐͽ׶νáÊø

  130.        
  131.         if(!timecnt)
  132.         {
  133.                 status = MI_RESETERR; //¸´Î»´íÎó
  134.         }
  135.         if (status == MI_OK)
  136.         {
  137.                 WriteIO(RegPage,0x80);//½«0X80дÈëpage¼Ä´æÆ÷ÒÔ³õʼ»¯Î¢¿ØÖÆÆ÷½Ó¿Ú
  138.                 if (ReadIO(RegCommand) != 0x00)//¶ÁCommand¼Ä´æÆ÷£¬Èç¹ûֵΪ0Ôò½Ó¿Ú³õʼ»¯³É¹¦
  139.                 {      
  140.                        
  141.                         status = MI_INTERFACEERR;  //½Ó¿ÚÀàÐÍ´íÎó£¬Î¢¿ØÖÆÆ÷½Ó¿Ú³õʼ»¯²»³É¹¦
  142.                 }
  143.         }

  144.         return status;
  145. }
但是复位不成功,测试为接口类型初始化错误(MI_INTERFACEERR)。望哪位大侠能给看一下,谢谢!
 楼主| 国防大学 发表于 2013-7-20 17:35 | 显示全部楼层
自己先顶一下
对了,STM32的GPIOB 8-15连接RC500的AD0-AD15

PA11        NCS
PA12        NWR
PA13        NRD
PA14        ALE
PA15        RST

PA11        NCS
PA12        NWR
PA13        NRD
PA14        ALE
PA15        RST

PA11        NCS
PA12        NWR
PA13        NRD
PA14        ALE
PA15        RST
PA8        RC500IRQ
 楼主| 国防大学 发表于 2013-7-20 17:39 | 显示全部楼层
:dizzy:4.7a的MDK老是这样,汉字不兼容
hawksabre 发表于 2013-7-20 18:50 | 显示全部楼层
不是很了解   楼主  帮你顶一个  
 楼主| 国防大学 发表于 2013-7-21 09:32 | 显示全部楼层
谢谢四楼
问题是接口类型初始化错误
哪位大神帮帮忙啊
trumpxp 发表于 2013-7-21 09:34 | 显示全部楼层
好长的代码   楼主   帮你顶一个   看看别人的意见吧   顶一个
jsll86 发表于 2013-7-21 12:18 | 显示全部楼层
不晓得,帮顶了
 楼主| 国防大学 发表于 2013-7-23 17:53 | 显示全部楼层
要沉了吗??
xtay1215225 发表于 2013-9-10 11:13 | 显示全部楼层
我用rc522做的和stm32,现在能读写卡了,但还不是很完善。现在又重新修改rc522模块
fengsth 发表于 2014-5-5 22:13 | 显示全部楼层
楼主,我用RC632和stc90单片机做的读卡器,之间是并口通讯,用14443A协议(想用15693),目前在rc632初始化出错,求帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

54

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

8

主题

54

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部