带触摸屏的ARM开发板驱动基于AS3992芯片的RFM-x系._第1页
带触摸屏的ARM开发板驱动基于AS3992芯片的RFM-x系._第2页
带触摸屏的ARM开发板驱动基于AS3992芯片的RFM-x系._第3页
带触摸屏的ARM开发板驱动基于AS3992芯片的RFM-x系._第4页
带触摸屏的ARM开发板驱动基于AS3992芯片的RFM-x系._第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、带触摸屏的 ARM 开发板驱动基于 AS3992芯片的 RFM-x 系列 RFID 读写模块凡夫RFM-x 模块是高集成度的 RFID读写模块,软件功能强大 ,有关 EPC协议的电子 标签的所有操作以及标签防碰撞算法都已封包在软件中了 ,用户应用层软件无需深 入了解 RFM-x 模块与电子标签之间的具体通信协议 ,驱动模块的软件很简单 ,只要掌 握几个基本指令 ,就能开发出应用层软件。我设计的这个演示程序运行在 STM32F107平台上 ,ARM 主程序是一个图形菜 单界面,其中有一个 RFID 图标。点击“RFID”图标,进入 RFID 扫描界面,点击“开始”开,始扫描并显示标签点选其中一个

2、标签号 ,反显,再次点击 ,可以进入写标签界面进入写标签界面 ,输入新标签号 ,点“确定”就 OK 了还有一个 RFID 设置的界面后附 ARM 开发板直接驱动 RFM-x 模块的相关程序和函数节选。在 STM32F107开发板上调试运行通过。演示程序已经支持 4.3 LC触D摸屏、 8GMicroSD 卡、EEPROM、 2M 的 Flash SST25VF016B,支持两个串口、一个 SPI,还有按键、 LED,有实时时钟等 ,软件功能有文本浏览、图片浏览、画板 ,以及 RFID 读写。需要 完整程序的可以联系我 ,QQ:542968281。= 5.3.1 头文件/*COMMANDS */

3、#define OUT_INVENTORY_ID 0x31#define IN_INVENTORY_ID 0x32#define OUT_SELECT_TAG_ID 0x33#define IN_SELECT_TAG_ID 0x34#define OUT_WRITE_TO_TAG_ID 0x35#define IN_WRITE_TO_TAG_ID 0x36#define OUT_READ_FROM_TAG_ID 0x37#define IN_READ_FROM_TAG_ID 0x38#define OUT_WRITE_REG_ID 0x1A#define IN_WRITE_REG_ID 0x1

4、B#define OUT_READ_REG_ID 0x1C#define IN_READ_REG_ID 0x1D#define OUT_INVENTORY_IDSize 0x02#define IN_INVENTORY_IDSize 0x3f#define OUT_WRITE_TO_TAG_IDSize 0x3f#define IN_WRITE_TO_TAG_IDSize 0x03#define OUT_READ_FROM_TAG_IDSize 0x07#define IN_READ_FROM_TAG_IDSize 0x3f#define OUT_WRITE_REG_IDSize 0x05#d

5、efine IN_WRITE_REG_IDSize 0x02#define OUT_READ_REG_IDSize 0x02#define IN_READ_REG_IDSize 0x055.3.2 节选主程序中盘点标签的例程/发 inventory Tag 命令if(RFID_START&0xC0=0xC0LED3=1;USART1_TX_BUF0=OUT_INVENTORY_ID;USART1_TX_BUF1=OUT_INVENTORY_IDSize+1;USART1_TX_BUF2=0x01;USART1_SEND(USART1_TX_BUF;USART1_RX_STA=0; / 意外掉包

6、时清零timer=0;RFID_START&=0x80; /清除循环计数 bit5:0,清bit6为usart1忙状态 elseif(RFID_START&0xC0=0x80timer+;if(timer65534RFID_START+; / 意外掉包时循环计数bit5:0, 溢出进位到 bit6,inventory 可以再次发送 timer=0;#ifdef debugprintf(nRFID_START:%xn,RFID_START;#endif5.3.3 Select标签的函数/Select Tag/sel-Select Tag的 Tag_Buffer 指针void Select_tag

7、(u8 selu8 i,j;u32 temp;USART1_TX_BUF0=OUT_SELECT_TAG_ID;USART1_TX_BUF2=0x0C;USART1_TX_BUF1=USART1_TX_BUF2+3; for(i=3;i0;i-temp=Tag_Buffer3*sel-i;for(j=0;jj;/USART1_TX_BUF3+j&=0x00;USART1_TX_BUF3+j+4*(3-i=temp8*(3-j;#ifdef debugprintf(nSelect Tag:%xn,USART1_TX_BUF3+j+4*(3-i; #endif USART1_SEND(USART1

8、_TX_BUF;5.3.4 Write 标签的函数/Write Tag/data-Write Tag 的数据void Write_tag(u32 *datau8 i,j;USART1_TX_BUF0=OUT_WRITE_TO_TAG_ID;USART1_TX_BUF2=0x01;/EPCUSART1_TX_BUF3=0x02;/EPC addressUSART1_TX_BUF4=0x00;/Pass WordUSART1_TX_BUF5=0x00;/Pass WordUSART1_TX_BUF6=0x00;/Pass WordUSART1_TX_BUF7=0x00;/Pass WordUSAR

9、T1_TX_BUF8=0x06;/EPC Word lengthUSART1_TX_BUF1=2*USART1_TX_BUF8+9;/EPC Word length for(i=0;i3;i+for(j=0;j8*(3-j;#ifdef debugprintf(nWrite Tag:%xn,USART1_TX_BUF9+j+4*i; #endifUSART1_SEND(USART1_TX_BUF;5.3.5 调整模块的输出功率和灵敏度的函数void Save_RFID_Set(u8 PA_val,u8 Sensi_valu8 len,temp=0;u8 data0,data1,data2;/*

10、 保存功率设置 */读 Modulator Control Register23:0 USART1_TX_BUF0=OUT_READ_REG_ID;USART1_TX_BUF1=OUT_READ_REG_IDSize+1;USART1_TX_BUF2=0x15; USART1_SEND(USART1_TX_BUF; while(!(USART1_RX_STA&0x8000delay_ms(5;temp+;if (temp20break;if(USART1_RX_STA&0x8000len=USART1_RX_STA&0x0FFF;len+; /得到此次接收到的数据长度#ifdef debugp

11、rintf(nlen=%xn,len;#endifif(len=6&(USART1_RX_BUF5=0x00data0=USART1_RX_BUF2;data1=USART1_RX_BUF3;data2=USART1_RX_BUF4;elseLCD_Fill(0,260,240,280,LGRAY;/ 填充灰色Show_Str(10,260,获取功率失败 !,16,0x01; /叠加模式 ,非自动换行 USART1_RX_STA=0;elseLCD_Fill(0,260,240,280,LGRAY;/ 填充灰色Show_Str(10,260,获取功率超时 !,16,0x01; /叠加模式 ,非

12、自动换行 /改变功率data0 = (data0&0xE0|PA_table27-PA_val;/写 Modulator Control Register23:0USART1_TX_BUF0=OUT_WRITE_REG_ID;USART1_TX_BUF1=OUT_WRITE_REG_IDSize+1;USART1_TX_BUF2=0x15;USART1_TX_BUF3=data0;USART1_TX_BUF4=data1;USART1_TX_BUF5=data2;USART1_SEND(USART1_TX_BUF; while(!(USART1_RX_STA&0x8000delay_ms(5;

13、temp+;if (temp20break; if(USART1_RX_STA&0x8000len=USART1_RX_STA&0x0FFF;len+; /得到此次接收到的数据长度#ifdef debugprintf(nlen=%xn,len;#endifif(len=3&(USART1_RX_BUF2=0x00;elseLCD_Fill(0,260,240,280,LGRAY;/ 填充灰色Show_Str(10,260,设置功率失败 !,16,0x01; /叠加模式 ,非自动换行 USART1_RX_STA=0;elseLCD_Fill(0,260,240,280,LGRAY;/ 填充灰色S

14、how_Str(10,260,设置功率超时 !,16,0x01; /叠加模式 ,非自动换行 /* 保存灵敏度设置 */读 Register0x0A7:0data0 = Read_RFIDModule(0x0A;/改变灵敏度data0 = (data0&0x04|Sensitivity_tableSensi_val1;/写 Register0x0A7:0Write_RFIDModule(0x0A,data0;/读 Register0x057:0data0 = Read_RFIDModule(0x05;/改变灵敏度data0 = (data0&0x7F|Sensitivity_tableSensi

15、_val0;/写 Register0x057:0 Write_RFIDModule(0x05,data0;/* 保存 Q值设置 */LCD_Fill(0,260,240,280,LGRAY;/ 填充灰色Show_Str(10,260,初始化完成 !,16,0x01; /叠加模式 ,非自动换行5.3.6 读模块寄存器的函数u8 Read_RFIDModule(u8 addru8 len,temp=0;u8 data0;USART1_TX_BUF0=OUT_READ_REG_ID;USART1_TX_BUF1=OUT_READ_REG_IDSize+1;USART1_TX_BUF2=addr; U

16、SART1_SEND(USART1_TX_BUF;while(!(USART1_RX_STA&0x8000delay_ms(5;temp+;if (temp20break; if(USART1_RX_STA&0x8000 len=USART1_RX_STA&0x0FFF; len+; / 得 到此次接收到的数据长度 if(len=6&(USART1_RX_BUF5=0x00 data0=USART1_RX_BUF2; USART1_RX_STA=0; return data0; else LCD_Fill(0,260,240,280,LGRAY;Show_Str(10,260, 获取失败! ,

17、16,0x01;USART1_RX_STA=0;return 0xff; / 叠加模式 ,非自动换行 else LCD_Fill(0,260,240,280,LGRAY;Show_Str(10,260, 获取超时! ,16,0x01;return 0xff; /叠加模式 ,非自动换行 5.3.7 写模块寄存器的函数 void Write_RFIDModule(u8 addr,u8 data u8 len,temp=0; USART1_TX_BUF0=OUT_WRITE_REG_ID;USART1_TX_BUF1=OUT_WRITE_REG_IDSize-1; USART1_TX_BUF2=ad

18、dr; USART1_TX_BUF3=data; USART1_SEND(USART1_TX_BUF; while(!(USART1_RX_STA&0x8000 delay_ms(5; temp+;if (temp20break; if(USART1_RX_STA&0x8000 len=USART1_RX_STA&0x0FFF; len+; / 得到此次接收到的数据长度 if(len=3&(USART1_RX_BUF2=0x00; else LCD_Fill(0,260,240,280,LGRAY;Show_Str(10,260, 设置失败! ,16,0x01; / 叠加模 式,非自动换行 U

19、SART1_RX_STA=0; else LCD_Fill(0,260,240,280,LGRAY;Show_Str(10,260, 设置超时! ,16,0x01; / 叠加模 式, 非自动换行 5.3.8 串口接收中断服务函数 /串口 1 中断服务程序 u8 USART1_RX_BUF3060; / 接收状态 /bit15 ,接收完成标志 /bit14,接收到 0x0d /bit110,接收到的有效字节数目,最多 3060,0xBF4 u16 USART1_RX_STA=0; / 接收状态标记 /接收缓冲 ,最大 3060 个字节. void USART1_IRQHandler(void u8 res; if(USART1-SR&(1DR;USART1_RX_BUFUSART1_RX_STA&0x0FFF=res; switch(USART1_RX_BUF0 case IN_CHECK_ON_LINE_ID: / 返回两字节包处理 if(USART1_RX_STA&0x0FFF=1 /USART1_RX_STA|=0x8000; 接收完成标志 USART1_RX_STA=0; return; break; case IN_FIRM_HARDW_ID: case IN_READ_REG_ID: case IN_WRITE_REG_ID: c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论