RFID节点的编写
创始人
2025-05-31 07:06:47
0

新项目开始咯,其实就是华清项目的换皮,增强了对传感器的控制加了大量的32采集与控制节点,由于时间紧迫先按照节点发布文章。以后有时间会发一些框架和整体数据流向分析的文章。

一、RFID节点框架

我的想法是使用超高频RFID技术,在门口布置一个大型的RFID读写器,采集出入货物电子标签的信息,这个电子标签也可以只有ID,但这样就要在这个节点加一个数据库,32这么小的内存就不太够了,需要换成A9.因为我只会这两个型号的单片机所以哈哈。

在ZET6上使用串口连接一个cc2530.使用SPI来和RC522通信.超高频的RFID读写器太贵了好几千真的没钱了。所以使用RC522代替一下。主要这个范围太小只能拿ID卡来模拟咯。

蜂鸣器是为了整个系统报警用的。可以换成继电器控制那种特别响的大功率报警器。OLED用来显示信息。但是它太小了也就能显示个ID。所以我换了我以前买的一块触摸屏。100块(太痛了)。

二、具体的程序

首先需要使用来把字库传到我们的串行Flash

使用的是UNIGBK.bin字库烧入到SD卡然后写个SD卡驱动,当然不是我写的。直接就是调用哈哈。

/********************************************************************************* 文件名程: main.c * 作    者: 硬石嵌入式开发团队* 版    本: V1.0* 编写日期: 2015-10-04* 功    能: 中文字库烧写******************************************************************************* 说明:* 本例程配套硬石stm32开发板YS-F1Pro使用。* * 淘宝:* 论坛:http://www.ing10bbs.com* 版权归硬石嵌入式开发团队所有,请勿商用。*******************************************************************************/  //使用之前:
//1.保证已经把字库文件拷贝到SD卡内并插入到开发板上,
//五个文件:stxinhei16.xbf,kaiti24.xbf,UNIGBK.BIN,GBK_HZ1616.FON和GBK_HZ2424.FON
//2.使用该工程写字库文件需要一定时间请耐心等候保存字库写入成功
//3.使用该工程建议使用串口调试助手工具查看字库写入进度。/* 包含头文件 ----------------------------------------------------------------*/
#include "stm32f10x.h"
#include "bsp/led/bsp_led.h"
#include "bsp/key/bsp_key.h"
#include "bsp/beep/bsp_beep.h"
#include "bsp/usart/bsp_debug_usart.h"
#include "bsp/spi_flash/bsp_spi_flash.h"
#include "ff.h"/* 私有类型定义 --------------------------------------------------------------*/
/* 私有宏定义 ----------------------------------------------------------------*/
#define GBK_HZ1616                  (1)   //1:使能烧写GBK_HZ1616.FON字库文件(裸机中文显示专用);0:不烧写
#define GBK_HZ2424                  (1)   //1:使能烧写GBK_HZ2424.FON字库文件(裸机中文显示专用);0:不烧写
#define FATFS_UNIGBK                (1)   //1:使能烧写UNIGBK.BIN字库文件(FatFS文件系统专用);0:不烧写
#define XBF_STXIHEI16               (1)   //1:使能烧写stxihei16.xbf字库文件(STemWin专用);0:不烧写
#define XBF_KAITI24                 (1)   //1:使能烧写kaiti24.xbf字库文件(STemWin专用);0:不烧写#define GBK_HZ1616_ADDR       (10*4096)   // GBK_HZ1616.FON字库文件存放在串行Flash的地址
#define GBK_HZ2424_ADDR       (75*4096)   // GBK_HZ2424.FON字库文件存放在串行Flash的地址
#define FATFS_UNIGBK_ADDR    (332*4096)   // UNIGBK.BIN字库文件存放在串行Flash的地址
#define XBF_STXIHEI16_ADDR   (380*4096)   // stxihei16.xbf字库文件存放在串行Flash的地址
#define XBF_KAITI24_ADDR     (750*4096)   // kaiti24.xbf字库文件存放在串行Flash的地址#define GBK_HZ1616_SIZE            (64)   // GBK_HZ1616.FON字库文件占用扇区数(每个扇区为4096个字节)
#define GBK_HZ2424_SIZE           (144)   // GBK_HZ2424.FON字库文件占用扇区数(每个扇区为4096个字节)
#define FATFS_UNIGBK_SIZE          (43)   // UNIGBK.BIN字库文件存放占用扇区数(每个扇区为4096个字节)
#define XBF_STXIHEI16_SIZE        (348)   // stxihei16.xbf字库文件存占用扇区数(每个扇区为4096个字节)
#define XBF_KAITI24_SIZE          (628)   // kaiti24.xbf字库文件存占用扇区数(每个扇区为4096个字节)/* 获取缓冲区的长度 */
/* 私有变量 ------------------------------------------------------------------*/
FATFS fs;													/* FatFs文件系统对象 */
FIL file;													/* 文件对象 */
FRESULT f_res;                    /* 文件操作结果 */
UINT fnum;            					  /* 文件成功读写数量 *//* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
static void printf_fatfs_error(FRESULT fresult);
/* 函数体 --------------------------------------------------------------------*//*** 函数功能: 主函数.* 输入参数: 无* 返 回 值: 无* 说    明: 无*/
int main(void)
{   uint32_t write_addr=0,j=0;uint8_t tempbuf[256]={0};/* 初始化LED灯 */LED_GPIO_Init();/* 初始化独立按键 */ KEY_GPIO_Init();/* 初始化蜂鸣器 */BEEP_GPIO_Init();/* 调试串口初始化配置,115200-N-8-1.使能串口发送和接受 */DEBUG_USART_Init();    printf("****** 这是一个烧写中文字库到串行Flash空间内实验 ******\n");printf("》》按下开发板KEY1按键开始烧写\n");while(KEY1_StateRead()==KEY_UP);//等待按键被按下/* 初始化串行Flash */SPI_FLASH_Init();//挂载文件系统f_res = f_mount(&fs,"0:",1);  printf_fatfs_error(f_res);//如果文件系统挂载失败就停机if(f_res != FR_OK){while(1);}/**************************  GBK_HZ1616.FON字库文件  *****************************************/		
#if GBK_HZ1616f_res = f_open(&file,"0:GBK_HZ1616.FON",FA_OPEN_EXISTING | FA_READ);printf("f_open GBK_HZ1616.FON res=%d\n",f_res);if(f_res==FR_OK){// 擦除空间write_addr=GBK_HZ1616_ADDR;for(j=0;j

这是硬石给的官方模板。写的真的太好了,我就直接拿来用了。烧入完编写我们的RFID程序。因为文件很多下面我只分享主文件。等项目完工我会整个上传到git仓库到时候评论区放链接。

 /* 包含头文件 ----------------------------------------------------------------*/
#include "stm32f10x.h"
#include "stdlib.h"
#include "bsp/usart/bsp_debug_usart.h"
#include "bsp/lcd/bsp_lcd.h"
#include "bsp/RC522/rc522_function.h"
#include "bsp/RC522/rc522_config.h"
#include "bsp/systick/bsp_SysTick.h"
#include "bsp/beep/bsp_beep.h"
//#include "bsp/usart/bsp_usart2.h"/* 私有类型定义 --------------------------------------------------------------*/
/* 私有宏定义 ----------------------------------------------------------------*/
/* 私有变量 ------------------------------------------------------------------*/
unsigned char RFID[16];	
unsigned char card_1[4]={176,42,57,82};
uint8_t KEY[6]={0xff,0xff,0xff,0xff,0xff,0xff};
uint8_t Rxflag=0;
uint8_t ucTemp;
uint8_t ucaRxBuf[256];
uint16_t usRxCount;/* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
void IC_test ( void );
int test(void);/* 函数体 --------------------------------------------------------------------*/
/*****************************   重要说明     *********************************  使用本例程之前,需要运行“YSF1-051. 烧写中文字库到串行Flash”例程******************************************************************************//*** 函数功能: 主函数.* 输入参数: 无* 返 回 值: 无* 说    明: 无*/
int main(void)
{   uint32_t lcdid;/* 初始化3.5寸TFT液晶模组,一般优先于调试串口初始化 */lcdid=BSP_LCD_Init();   /* 调试串口初始化配置,115200-N-8-1.使能串口发送和接受 */DEBUG_USART_Init();BEEP_GPIO_Init();SysTick_Init();  RC522_Init ();	/* 调用格式化输出函数打印输出数据 */printf("LCD ID=0x%08X\n",lcdid);  /* 开背光 */LCD_BK_ON();PcdReset();M500PcdConfigISOType ( 'A' );//设置工作方式while ( 1 ){printf("\nRFID start\n");Delay_ms(1000);IC_test ();//IC卡检测	//scanf("%s",ucaRxBuf);if(test() == 1){printf("%s\r\n",ucaRxBuf);LCD_DispString_EN(0,20,ucaRxBuf,BLACK, YELLOW,FONT_24);}printf("\nRFID stop\n");}
}/** * 接收串口的数据,分析并处理 * 可以将此段代码封装为一个函数,在主程序其它流程调用
*/
int test()
{if(Rxflag){if (usRxCount < sizeof(ucaRxBuf)){ucaRxBuf[usRxCount++] = ucTemp;}else{usRxCount = 0;}/* 遇到换行字符,认为接收到一个命令 */if (ucTemp == '+')	/* 换行字符 */{usRxCount = 0;return 1;}Rxflag=0;}return 0;
}/*** 函数功能: 门禁测试函数* 输入参数: 无* 返 回 值: 无* 说    明: 无*/
void IC_test ( void )
{char cStr [ 30 ];//unsigned char s=0x08;unsigned char ucArray_ID [ 4 ];  //先后存放IC卡的类型和UID(IC卡序列号)uint8_t ucStatusReturn;          //返回状态//uint8_t *len;//uint8_t *buf;//while ( 1 ){ /*寻卡*/if ( ( ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID ) ) != MI_OK )                                   /*若失败再次寻卡*/ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID );		   if ( ucStatusReturn == MI_OK  ){/*防冲撞(当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作)*/if ( PcdAnticoll ( ucArray_ID ) == MI_OK )  {sprintf ( cStr, "The Card ID is: %02X%02X%02X%02X", ucArray_ID [ 0 ], ucArray_ID [ 1 ], ucArray_ID [ 2 ], ucArray_ID [ 3 ] );							printf ( "%s\r\n",cStr ); LCD_DispString_EN(0,0,cStr,BLACK, YELLOW,FONT_24);//USART_printf(USART2," \r\n %s \r\n",cStr);/*选卡*/ucStatusReturn=PcdSelect(ucArray_ID) ;       }        }//scanf("%s",buf);//printf("%c",USART_ReceiveData(USARTx));//LCD_DispString_EN(0,20,get_rebuff(len),BLACK, YELLOW,FONT_24);}
}
/******************************************************************************/
/*                 STM32F10x Peripherals Interrupt Handlers                   */
/*  Add here the Interrupt Handler for the used peripheral(s) (PPP), for the  */
/*  available peripheral interrupt handler's name please refer to the startup */
/*  file (startup_stm32f10x_xx.s).                                            */
/******************************************************************************/
void USART1_IRQHANDLER(void)
{printf("/n11111/n");if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){ 	Rxflag=1;		ucTemp = USART_ReceiveData(USART1);} }/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/

目前还只能读RFID通过zigbee发送,无法处理zigbee接收到的信息神奇。

应该是程序没写好等我后面一起发 

三、GPIO分配表

cc2530:
    PA2/USART2_TXD                              串口2发送
    PA3/USART2_RXD                              串口2接收
RC522:
    PB12/TIM1_BKIN                              CS
    PB13/TIM1_CH1N                              SCK
    PB14/TIM1_CH2N                              MOSI
    PB15/TIM1_CH3N                              MISO
    PC0/ADC123_IN10/OV_D0                       restart
TFT:
    省略,这块不懂原理我就直接用了
    PE2/TP_NIRQ                                 电阻触摸屏中断
    PE3/TP_SCK                                  电阻触摸屏时钟线
    PE4/TP_MOSI                                 电阻触摸屏数据线
    PE5/TP_MISO                                 电阻触摸屏数据线
    PE6/TP_CS                                   电阻触摸屏片选
  经典A9,A10串口一

蜂鸣器:
    PD7/BEEP                                    蜂鸣器

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...