OpenEdv-开源电子网

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

F103C8T6核心板使用模拟spi接RC522移植失败问题QAQ跪求解决方案!!!!

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-5-12
在线时间
2 小时
发表于 2018-5-12 01:21:49 | 显示全部楼层 |阅读模式
1金钱
RC522模块是可以用的,C8T6也是没有问题的,我是要做一个自主循迹小车,所以打算采用M1卡作为标签指示节点位置。
在战舰板子上,就是ZET6上是可以寻卡并且可以读出序列号,我的3个M1卡的序列号就是用战舰板子的串口打印出来的,因为手头没有ttl转串口转USB,所以c8t6串口用起来很麻烦。
RC522的工程移植到C8T6之后就不好使了。编译成功,但是下载到板子上不起作用,我用万用表测了对应几个脚的电平全都是0
以下是程序。引脚部分,引文c8t6引脚少,所以在战舰版上用的是F0.F1.F2.F3.F4,我在这里用的是A口和B口
RC522的操作函数完全没有改动,所这里就不贴了
IO口做模拟spi,IO口初始化,我这里改过速度,2mhz,10mhz,50mhz都试过,依然不行
#include "RC522.h"

#define MAXRLEN 18

void RC522_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);            //使能PA端口时钟
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_2;                          
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //IO口速度为50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);                             
        GPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_2);  //拉高
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);            //使能PB端口时钟
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_10;                          
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //IO口速度为50MHz
        GPIO_Init(GPIOB, &GPIO_InitStructure);                             
        GPIO_SetBits(GPIOB,GPIO_Pin_11|GPIO_Pin_10);  //拉高
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;          //上拉输入                          
        GPIO_Init(GPIOA, &GPIO_InitStructure);                             
}




这是头文件里对的引脚对应

#define MF522_NSS PBout(11)        //PB11         SDA
#define MF522_SCK PBout(10)        //PB10
#define MF522_SI PAout(3)        //PA3
#define MF522_SO PAin(2)        //PA2
#define MF522_RST PAout(10)        //PA10

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

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-5-12
在线时间
2 小时
 楼主| 发表于 2018-5-12 01:30:50 | 显示全部楼层
还试过拔掉RST引脚,也不好使  打算明天再试一下用spi的硬件接口,不做模拟试一下。主要是我不大会spi,看书上和论坛上,初始化都是一大串一大串的- -
这里贴一下main,万一是main出错,其实main在一开始跑的时候,是吧下面的验证密码和钱包扣去这些都删掉了的,发现不对之后,担心是最后的PcdHalt();的问题。就又把这些都放回去了,但是还是没反应,程序里的序列号D3E5581C是我使用的空白M1卡的序列号。
#include "stm32f10x.h"
#include <stdio.h>
#include "sys.h"
#include "delay.h"
#include "RC522.h"
#include "led.h"



void NVIC_Configuration(void);


/*******************************************************************************
* 函数名         : main
* 描述           : 主函数
* 输入           : 无
* 输出           : 无
* 返回           : 无
*******************************************************************************/
unsigned char data1[16] = {0x12,0x34,0x56,0x78,0xED,0xCB,0xA9,0x87,0x12,0x34,0x56,0x78,0x01,0xFE,0x01,0xFE};
//M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令
//4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反
unsigned char data2[4]  = {0,0,0,0x01};
unsigned char DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
unsigned char g_ucTempbuf[20];

int main(void)
{unsigned char status,i;
        unsigned int temp;
        delay_init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
       
       LED_Init();;
        RC522_Init();
        PcdReset();
        PcdAntennaOff();
        delay_ms(10);
        PcdAntennaOn();
        delay_ms(10);
        printf("Start \r\n");
       
                while ( 1 )
     {   
                 status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
         if (status != MI_OK)
         {   
                     PcdReset();
                     PcdAntennaOff();
                     PcdAntennaOn();
                          continue;
         }                     
                 printf("卡的类型:");
            for(i=0;i<2;i++)
                {
                        temp=g_ucTempbuf[i];
                        printf("%X",temp);
                       
                }       
         status = PcdAnticoll(g_ucTempbuf);//防冲撞
         if(status != MI_OK)
         {    continue;    }
                  
                ////////以下为超级终端打印出的内容////////////////////////
       
                printf("卡序列号:");        //超级终端显示,
                for(i=0;i<4;i++)
                {
                        temp=g_ucTempbuf[i];
                        printf("%X",temp);
                       
                }

   if(g_ucTempbuf[0]==0xD3&&g_ucTempbuf[1]==0xE5&&g_ucTempbuf[2]==0x58&&g_ucTempbuf[3]==0x1C)
                {
                        LED=0;       
                }
                else
                {       
                        LED=1;       

                }

                ///////////////////////////////////////////////////////////

             status = PcdSelect(g_ucTempbuf);//选定卡片
             if (status != MI_OK)
             {    continue;    }
             
             status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//验证卡片密码
             if (status != MI_OK)
             {    continue;    }
             
             status = PcdWrite(1, data1);//写块
         if (status != MI_OK)
         {    continue;    }

                while(1)
                {
                 status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
                 if (status != MI_OK)
                 {   
                        
                             PcdReset();
                             PcdAntennaOff();
                             PcdAntennaOn();
                                  continue;
                 }
                         status = PcdAnticoll(g_ucTempbuf);//防冲撞
                 if (status != MI_OK)
                 {    continue;    }

                        status = PcdSelect(g_ucTempbuf);//选定卡片
                 if (status != MI_OK)
                 {    continue;    }
                
                 status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//验证卡片密码
                 if (status != MI_OK)
                 {    continue;    }


                 status = PcdValue(PICC_DECREMENT,1,data2);//扣款
                 if (status != MI_OK)
                 {    continue;    }
                         
                 status = PcdBakValue(1, 2);//块备份
                 if (status != MI_OK)
                 {    continue;    }
                
                 status = PcdRead(2, g_ucTempbuf);//读块
                 if (status != MI_OK)
                 {    continue;    }
                printf("卡读块:");        //超级终端显示,
                 for(i=0;i<16;i++)
                        {
                                temp=g_ucTempbuf[i];
                                printf("%X",temp);
                               
                        }

                        printf("\n");                                                         
                        PcdHalt();
                }       
    }
       
}



回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-5-12
在线时间
2 小时
 楼主| 发表于 2018-5-12 01:32:48 | 显示全部楼层
跪求论坛的大佬们帮忙看一下,或者有什么建议。
或者有谁有可以在c8t6上面跑通的经验,源码都可以QAQ
救救孩子吧QAQ
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-5-12
在线时间
2 小时
 楼主| 发表于 2018-5-12 15:42:43 | 显示全部楼层
可怜巴巴QAQ自己顶起来
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-5-13 00:00:49 | 显示全部楼层
帮顶
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-5-12
在线时间
2 小时
 楼主| 发表于 2018-5-14 01:04:05 | 显示全部楼层
把最小核心板的内置降压模块烧掉了QAQ
暂时除掉这个模块
但是问题保留,希望以后有机会实现!
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-5-24
在线时间
0 小时
发表于 2018-5-24 21:38:14 | 显示全部楼层
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_2;                           
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  


#define MF522_SI PAout(3)        //PA3
#define MF522_SO PAin(2)        //PA2


应该有问题

回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2018-8-3
在线时间
7 小时
发表于 2018-8-7 14:39:58 | 显示全部楼层
你的问题解决了吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-13 03:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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