OpenEdv-开源电子网

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

精英板上RC522寻卡TFT屏会黑屏

[复制链接]

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2016-11-12 21:47:26 | 显示全部楼层 |阅读模式
10金钱
精英板上是用FSMC驱动TFT屏幕,我的RFID RC522模块是接在PB组IO口,用的SPI2,应该不会影响到啊,不知道为什么寻卡时(status = PcdRequest(PICC_REQALL,CT);) 会黑屏,我贴下寻卡时的部分代码[mw_shl_code=c,true]char PcdComMF522(u8   Command,
                 u8 *pIn ,
                 u8   InLenByte,
                 u8 *pOut ,
                 u8 *pOutLenBit)
{
    char   status = MI_ERR;
    u8   irqEn   = 0x00;
    u8   waitFor = 0x00;
    u8   lastBits;
    u8   n;
    u16   i;
    switch (Command)
    {
        case PCD_AUTHENT:
                        irqEn   = 0x12;
                        waitFor = 0x10;
                        break;
                case PCD_TRANSCEIVE:
                        irqEn   = 0x77;
                        waitFor = 0x30;
                        break;
                default:
                        break;
    }
   
    WriteRawRC(ComIEnReg,irqEn|0x80);
    ClearBitMask(ComIrqReg,0x80);        //清所有中断位
    WriteRawRC(CommandReg,PCD_IDLE);
    SetBitMask(FIFOLevelReg,0x80);                 //清FIFO缓存
   
    for (i=0; i<InLenByte; i++)
    {   WriteRawRC(FIFODataReg, pIn );    }
    WriteRawRC(CommandReg, Command);          
//            n = ReadRawRC(CommandReg);
   
    if (Command == PCD_TRANSCEIVE)
    {    SetBitMask(BitFramingReg,0x80);  }         //开始传送
                                                                                     
    //i = 600;//根据时钟频率调整,操作M1卡最大等待时间25ms
        i = 1000;
    do
    {
        n = ReadRawRC(ComIrqReg);
        i--;
    }
    while ((i!=0) && !(n&0x01) && !(n&waitFor));
    ClearBitMask(BitFramingReg,0x80);

    if (i!=0)
    {   
        if(!(ReadRawRC(ErrorReg)&0x1B))
        {
            status = MI_OK;
            if (n & irqEn & 0x01)
            {   status = MI_NOTAGERR;   }
            if (Command == PCD_TRANSCEIVE)
            {
                       n = ReadRawRC(FIFOLevelReg);
                      lastBits = ReadRawRC(ControlReg) & 0x07;
                if (lastBits)
                {   *pOutLenBit = (n-1)*8 + lastBits;   }
                else
                {   *pOutLenBit = n*8;   }
                if (n == 0)
                {   n = 1;    }
                if (n > MAXRLEN)
                {   n = MAXRLEN;   }
                for (i=0; i<n; i++)
                {   pOut = ReadRawRC(FIFODataReg);    }
            }
        }
        else
        {   status = MI_ERR;   }
        
    }
   

    SetBitMask(ControlReg,0x80);           // stop timer now
    WriteRawRC(CommandReg,PCD_IDLE);
    return status;
}[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

解决了,do{}while那里........
本人交流群:136045527,欢迎各位大佬和萌新
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
 楼主| 发表于 2016-11-12 21:47:27 | 显示全部楼层
解决了,do{}while那里........
本人交流群:136045527,欢迎各位大佬和萌新
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 05:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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