打印
[STM32F1]

RC522读M1卡的问题

[复制链接]
693|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangpe|  楼主 | 2021-12-8 22:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
按道理说,我在程序后面使卡进入休眠状态了,但是为什么会被重复读取呢?

使用特权

评论回复
沙发
jiahy| | 2021-12-8 22:22 | 只看该作者
楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
wangpe|  楼主 | 2021-12-8 22:24 | 只看该作者

使用特权

评论回复
地板
wyjie| | 2021-12-8 22:26 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
5
wangpe|  楼主 | 2021-12-8 22:30 | 只看该作者
int main(void)
{               
        unsigned char status;
        //u8 Data[16];
        //u8 i;
        //u8 k;//读写错误重试次数
        u8 m;

         delay_init();                     //延时函数初始化         
        NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
         OUTPUT_Init();                         //输出模块初始化
        uart_init(9600);                                
        LCD_Init();
        KEY_Init();
        InitRc522();                                //初始化射频卡模块
        //sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。
        LEDA=1;         
          while(1)
        {               
                        status = PcdRequest(PICC_REQALL,CT);/*尋卡*/
                        if(status==MI_OK)//尋卡成功
                        {
                         printf("PcdRequest_MI_OK\t\n");
                         status=MI_ERR;
                         status = PcdAnticoll(SN);/*防冲撞*/
                        }

                        if (status==MI_OK)//防衝撞成功
                        {
                                printf("PcdAnticoll_MI_OK\t\n");
                                status=MI_ERR;               
                                LEDA=1;
                                LEDB=1;
//                                ShowID(0,200,SN,BLUE,WHITE); //在液晶屏上显示卡的ID号
                                printf("ID:%02x %02x %02x %02x\t\n",SN[0],SN[1],SN[2],SN[3]);//发送卡号
                                if((SN[0]==card_1[0])&&(SN[1]==card_1[1])&&(SN[2]==card_1[2])&&(SN[3]==card_1[3]))
                                {
                                    printf("The User is:小明\t\n");
                                }
                                if((SN[0]==card_2[0])&&(SN[1]==card_2[1])&&(SN[2]==card_2[2])&&(SN[3]==card_2[3]))
                                {
                                    printf("The User is:小华\t\n");
                                }
                                
                                if((SN[0]==card_3[0])&&(SN[1]==card_3[1])&&(SN[2]==card_3[2])&&(SN[3]==card_3[3]))
                                {
                                        printf("The User is:小李\t\n");
                                }

                                if((SN[0]==card_4[0])&&(SN[1]==card_4[1])&&(SN[2]==card_4[2])&&(SN[3]==card_4[3]))
                                {
                                         printf("The User is:小王\t\n");
                                }
//                                total=card1_bit+card2_bit+card3_bit+card4_bit+lxl_bit;
//                                LCD_ShowString(0,16,200,16,16,"total:");
//                                LCD_ShowNum(46,16,total,2,16);

                               status =PcdSelect(SN);

                                if(status==MI_OK)
                                {
                                        printf("PcdSelect_MI_OK");
                                  status = PcdHalt();
                                }

                                        if(status==MI_OK)
                                {
                                        printf("PcdHalt_MI_OK");
                                }

}

使用特权

评论回复
6
xxrs| | 2021-12-8 22:33 | 只看该作者
程序在while(1)里面,,程序执行一遍之后循环到开头开始执行,而且没看到你程序里面进行清缓冲区的操作

使用特权

评论回复
7
pengf| | 2021-12-8 22:35 | 只看该作者
后面有一句使卡进入休眠状态的函数(红色标记部分),按道理说读取到一次卡后,下一次进入循环寻卡的时候是寻不到卡的啊,因为这时卡已经休眠了

使用特权

评论回复
8
yinxiangh| | 2021-12-8 22:37 | 只看该作者
#define PICC_REQIDL           0x26               //寻天线区内未进入休眠状态

#define PICC_REQALL           0x52               //寻天线区内全部卡

使用特权

评论回复
9
wyjie| | 2021-12-8 22:39 | 只看该作者
楼主怎么解决的?

使用特权

评论回复
10
stly| | 2021-12-8 22:40 | 只看该作者
寻卡的时候用PICC_REQIDL模式就可以了,status = PcdRequest(PICC_REQIDL,CardType);/*扫描卡*/

使用特权

评论回复
11
xxrs| | 2021-12-8 22:43 | 只看该作者
请问这问题解决了没?我也是这个问题

使用特权

评论回复
12
xxrs| | 2021-12-8 22:46 | 只看该作者
程序有问题

使用特权

评论回复
13
yszong| | 2021-12-8 22:48 | 只看该作者

没看见你进入睡眠的代码啊

使用特权

评论回复
14
chuxh| | 2021-12-8 22:52 | 只看该作者
哪行代码是睡眠的啊

使用特权

评论回复
15
dingy| | 2021-12-8 22:54 | 只看该作者
感觉你的代码有问题

使用特权

评论回复
16
pengf| | 2021-12-8 22:56 | 只看该作者
在哪里进入的睡眠啊

使用特权

评论回复
17
wangpe|  楼主 | 2021-12-8 22:58 | 只看该作者

好的,我明天去单位试一下,多谢各位大侠了哈        

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

938

主题

9837

帖子

2

粉丝