历史上的今天
返回首页

历史上的今天

今天是:2025年02月15日(星期六)

2019年02月15日 | STM32(RFID)阶段二(读序列,修改金额)

2019-02-15 来源:eefocus

       前一段时间进行了USART2串口添加,接收协议改写的工作。这一次就可以利用之前的接收和发送代码来完成miniSTM32单片机与RFID读写器的通信,实现IC卡充值和扣费的操作。资料支持:串口通信数据的LCD显示,中断嵌套等等。


      字符串显示使用 sprintf() 函数,中断嵌套修改中断优先级。


        demo2功能:IC卡设置成自动返回卡号和块数据,读一次;IC卡一接触到读写器,就向读写器发送卡号和指定块数据。接收数据显示在TFTLCD上,在中断函数中,设置KEY1为加100操作,KEY0为减100操作;每一次修改数额,都将钱数刷新一次,并显示通信接收数据包。


上代码:


rfid.c


#include "rfid.h"

#include "usart.h"

#include "delay.h"

#include "lcd.h"

u16 money=0;


u8 card_id[8];


u8 Cmd_Read_money[8] = {0x01,0x08,0xA9,0x20,0x01,0x01,0x00,0x7F};   

//查询命令

u8 Cmd_ADD_money[11] = {0x01,0x0B,0xA8,0x20,0x01,0x01,0x64,0x00,0x00,0x00,0x19};

//加100命令

u8 Cmd_SUB_money[11] = {0x01,0x0B,0xA7,0x20,0x01,0x01,0x64,0x00,0x00,0x00,0x16};

//减100命令


void USART2_Send_Data(u8 *buf)//发送命令函数

{

    u8 i;

    u8 num=buf[1];

    u8 String[10];

    for(i=0;i

    { 

        USART2->DR=buf[i];

        USART_ClearFlag(USART2,USART_FLAG_TC); 

        while((USART2->SR&0X40)==0);//等待发送结束

    }

    delay_ms(100);


    money=USART_RX_BUF[5]+USART_RX_BUF[6]*256;

    //两个字节的16进制,转换成10进制

    LCD_ShowxNum(102,100,money,4,24,0);


    sprintf((char*)String,"%2X%2X%2X%2X%2X%2X%2X%2X%2X%2X",USART_RX_BUF[0],USART_RX_BUF[1],USART_RX_BUF[2],USART_RX_BUF[3],USART_RX_BUF[4],USART_RX_BUF[5],USART_RX_BUF[6],USART_RX_BUF[7],USART_RX_BUF[8],USART_RX_BUF[9]);

    //显示通信数据,sprintf转成字符串,再LCD_ShowString

    LCD_ShowString(30,180,200,12,12,String);

}


void Receive_One(void)//第一次接收显示卡号,余额

{

    if(count==1){

    sprintf((char*)card_id,"%2X%2X%2X%2X",USART_RX_BUF[7],USART_RX_BUF[8],USART_RX_BUF[9],USART_RX_BUF[10]);

    money=USART_RX_BUF[11]+USART_RX_BUF[12]*256;

    }

//  Read_money(Cmd_Read_money[8]);

//USART_RX_BUF[0]==4

}



exti.c


 void EXTI9_5_IRQHandler(void)

{           

    delay_ms(10);   //消抖             

    if(KEY0==0) {

        USART2_Send_Data(Cmd_SUB_money);//减操作

        LED1=!LED1;

    }

     EXTI_ClearITPendingBit(EXTI_Line5);    //清除LINE5上的中断标志位  

}



void EXTI15_10_IRQHandler(void)

{

  delay_ms(10);    //消抖          

  if(KEY1==0)   {

      USART2_Send_Data(Cmd_ADD_money);//加操作

      LED1=!LED1;

    }

     EXTI_ClearITPendingBit(EXTI_Line15);  //清除LINE15线路挂起位

}


main.c


#include "led.h"

#include "delay.h"

#include "sys.h"

#include "usart.h"

#include "lcd.h"

#include "rfid.h"

#include "exti.h"



 int main(void)

 {      

    u8 times=0;

    delay_init();            //延时函数初始化  

    //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2,已写在usart.c里。

    uart_init(9600);     //串口初始化为9600

    LED_Init();          //初始化与LED连接的硬件接口 

    LCD_Init();


    EXTIX_Init();


    LCD_Clear(WHITE);

    POINT_COLOR=RED;

    LCD_ShowString(30,40,200,24,24,"Mini STM32 ^_^");   

    LCD_ShowString(30,70,120,24,24,"CardID:");  

    LCD_ShowString(30,100,200,24,24,"money:");

    LCD_ShowString(30,130,200,24,24,"count:");


    while(1)

    {

        Receive_One();      


        LCD_ShowString(115,75,120,16,16,card_id);

        LCD_ShowxNum(102,100,money,4,24,0);

        LCD_ShowxNum(102,130,count,2,24,0);

        times++;             

        if(times%300==0)

        {   LED0=!LED0;//闪烁LED,提示系统正在运行.

            times=0;

        }

        delay_ms(10);       

    }    

}


    这只是部分核心代码,在实际文件里,USART接收中断抢占优先级设为0x02,按键中断优先级为0x01(优先级高),这样按键中断执行不会被串口接收数据影响,不然程序会出问题,我也是尝试了多次才解决这个问题。那么到这里我们已经完成RFID钱包的大部分功能,还要加上数字键盘,实现任意输入数字充值扣费。


推荐阅读

史海拾趣

DL Instruments LLC公司的发展小趣事

DL Instruments继承了Ithaco Corporation在精密仪器制造方面的技术积累,并在此基础上不断创新。公司推出了多种高性能的前置放大器产品,如低噪声电流前置放大器1211型、电流前置放大器1212型等。这些产品以其高阻抗差分或单端输入、共模抑制性能以及能在交流或直流耦合模式下运行的特点,赢得了市场的广泛认可。

EA Elektro-Automatik公司的发展小趣事

随着产品的不断优化和市场的不断扩大,EA Elektro-Automatik开始将目光投向国际市场。公司积极寻求与全球知名企业的合作机会,建立长期且稳定的战略合作关系。通过参与各类国际展会和交流活动,EA Elektro-Automatik的产品和技术得到了更广泛的推广和应用。如今,EA Elektro-Automatik的产品已经出口到全球多个国家和地区,为当地的市场和客户提供了优质的解决方案。

Dean Technology公司的发展小趣事

Dean Technology公司起源于上世纪80年代,当时电子行业正经历着飞速的发展。创始人凭借其深厚的电子技术背景和敏锐的市场洞察力,决定进入高压二极管领域。他带领研发团队不断攻克技术难题,成功推出了一系列性能稳定、品质可靠的高压二极管产品,奠定了公司在行业中的技术领先地位。

Advanced Semiconductor, Inc.公司的发展小趣事

为了进一步扩大市场份额,ASI积极寻求与全球各大电子企业的合作。通过与这些企业的战略合作,ASI不仅获得了更多的订单和市场份额,还进一步提升了自身的技术水平和创新能力。同时,ASI也积极参与国际半导体行业的交流和合作,与全球同行共同推动半导体技术的发展。

Crowd Supply公司的发展小趣事

Crowd Supply的创立源于几位麻省理工大学的毕业生对于硬件创新的热情与追求。他们意识到,许多优秀的硬件项目因缺乏资金和市场渠道而无法实现商业化。于是,他们决定创建一个平台,专门服务于这些创新项目,帮助它们从原型设计走向市场。这就是Crowd Supply的初心,也是其使命所在——将原创、有用、受人尊敬的硬件带入生活。

Amplitronix LLC公司的发展小趣事

随着公司的规模不断扩大,Amplitronix LLC开始重视内部管理和企业文化的塑造。他们引进了一系列先进的管理理念和方法,优化了公司的组织结构和管理流程。同时,公司也注重员工的培训和发展,为员工提供了广阔的职业发展空间和良好的福利待遇。这些措施不仅提升了员工的工作积极性和满意度,也为公司的长远发展奠定了坚实的基础。

问答坊 | AI 解惑

汶川地震灾害启示录1---应急通信装备至关重要

地震发生后,震区内音信全无。庞大的社会应急联动系统没有了信息来源,这是致命的断链。    怎么把里面的信息传出来呢?通信。但是有线通信,包括光缆链路在内全部断掉。手机等无线通信也瘫痪了。     地震后常规电源基本被破 ...…

查看全部问答>

如何编辑自己的帖子

如何编辑自己的帖子 1)找到自己已发表的帖子,在帖子右下角有“编辑”字样,如图所示: 2)点击“编辑”,即进入帖子编辑界面,可对自己发表的帖子进行补充修改,如图所示 …

查看全部问答>

当今网络视频监控市场下IP产品推广活动

受目前网络环境和产品现有技术水平的限制,IP监控产品的应用受到网络带宽和数字编码/压缩技术这一对互为因果关系的因素制约;同时,相对模拟产品它具有组网方便,远程连接费用较低的特点。因此,IP监控产品的主要目标市场应是一高一低两大类。    ...…

查看全部问答>

wince启动到桌面后 USB 不产生中断,过2分钟后才有中断

各位大哥:     我的 WINCE6 在关闭电源一两个小时后,再上电启动到桌面,这时候 USB 鼠标是不能使用的     监测系统中断时发现没产生中断,当让系统在桌面过2分钟后,USB鼠标可以使用了,而且也产     生了中断 ...…

查看全部问答>

熟悉Linux,C/C++,嵌入式开发,有两年的工作经验,请问在北京能拿多少?

熟悉Linux,C/C++,嵌入式开发,有两年的工作经验,请问在北京能拿多少?…

查看全部问答>

IEEE802.11B协议标准

想花3个月时间仔细研究IEEE802.11B协议. 顺便在自己的Windows CE上写个IEEE802.11b驱动. 可是不知道哪里有非常完整的协议规格标准书? 如果有中文就就更好了.…

查看全部问答>

STM32核心板供电问题

兄弟我做了一个STM32F10XVB的核心小板,包含CPU、晶体、电容、复位,100个管脚用了4个2X13的接插件引出,有个疑问: 将5个VDD接到一块,使用一个脚引出供电?还是使用5个脚供电?5个脚存在回路问题吧?另外VSS呢,地的接法应该怎样? 我初步想 ...…

查看全部问答>

设定中断向量的问题

我用的是2407,由于现在是学习调试阶段,load programm比较频繁,所以我把板子设定为微处理器模式,程序放在外存中,而不进行烧flash。   我定义的cmd文件如下: MEMORY:   VECS:origin=0x8000,length=0x40   &nbs ...…

查看全部问答>

求帮助啊?

win7装了ISE13.1和modelsim6.5,怎么就不能用呢?求高手帮助…

查看全部问答>

msp430 JTAG 仿真器

我在網上找了個msp430 JTAG 仿真器的圖紙,按照圖紙的電路,焊接了個板子(IC:74HC244N)。   但是在用IRA的時候出現連接錯誤。大家看看這個圖錯誤還在怎麼了。   我前後焊了3個板子,都是這樣。  …

查看全部问答>