找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9085|回复: 0
收起左侧

CC2530与pn532连接传输数据源程序

[复制链接]
ID:881610 发表于 2021-2-3 20:20 | 显示全部楼层 |阅读模式
1、引脚连接
PN532 VCC-----CC2530 5V

PN532 GND-----CC2530 GND

PN532 SCL(RX)-----CC2530 P1_6引脚(TX)(uart1模式)

PN532 SDA(TX)-----CC2530 P1_7引脚(RX)(uart1模式)

2、PN532模式切换

切换为HSU 0-0

引脚连接及HSU模式如下图(CC2530引脚自己连接)

f1c5655dfa4178a3e09013d27d49f93.jpg

3、数据传输

开启CC2530 UART0及UART1串口,UART0用usb连接电脑串口显示PN532回复数据,UART1传输CC2530至pn532的命令,目前主要是激活命令{0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xfd, 0xd4, 0x14, 0x01, 0x17, 0x00}和寻卡命令{0x00 ,0x00 ,0xFF ,0x04 ,0xFC ,0xD4 ,0x4A ,0x02 ,0x00 ,0xE0 ,0x00}

4、代码见附件
  1. #include <ioCC2530.h>
  2. #include <string.h>

  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;
  5. #define LED P1_0
  6. #define LCD_RX P1_7      /* s---TX/   --- RX P1_7--m*/
  7. #define LCD_TX  P1_6    /* s---RX    ----TX  P1_6--m*/

  8. uchar ack_frame[]={0x00,0x00,0xFF,0x00,0xFF,0x00};
  9. uchar send_command_1[] ={0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xfd, 0xd4, 0x14, 0x01, 0x17, 0x00};
  10. uchar send_command_2[] = {0x00 ,0x00 ,0xFF ,0x04 ,0xFC ,0xD4 ,0x4A ,0x02 ,0x00 ,0xE0 ,0x00};

  11. void InitUart(void){
  12.     P0SEL |= 0x0E;         
  13.     P2DIR &= ~0XC0;        
  14.     U0CSR |= 0x80;    // uart mode
  15. //   U0CSR |= 0x40;    // re interrupt enable
  16.     U0GCR |= 11;                                       
  17.     U0BAUD |= 216;         
  18.     UTX0IF = 0;         
  19. //   URX0IF = 0;
  20. }


  21. void uart(char Data)
  22. {
  23.         U0DBUF = Data;
  24.         while(UTX0IF == 0);
  25.         UTX0IF = 0;
  26. }
  27.       

  28. void UartSendString_PN(char *Data, int len)
  29. {
  30.     uint i;
  31.     for(i=0; i<len; i++)
  32.     {
  33.         U1DBUF = *Data++;
  34.         while(UTX1IF == 0);
  35.         UTX1IF = 0;
  36.     }
  37. }

  38. void UartSendString(char *Data, int len)
  39. {
  40.     uint i;
  41.    
  42.     for(i=0; i<len; i++)
  43.     {
  44.         U0DBUF = *Data++;
  45.         while(UTX0IF == 0);
  46.         UTX0IF = 0;
  47.     }
  48. }


  49. void delayMS(){
  50. for(uchar i =0 ;i<100;i++)
  51.   for(uchar j =0 ;j<50;j++);
  52. }


  53. void main()
  54. {
  55.       CLKCONCMD &= ~0x40;               //
  56.     while(CLKCONSTA & 0x40);          //
  57.     CLKCONCMD &= ~0x47;               //32MHZ  
  58.     PERCFG |= 0x02;              //
  59.     InitUart();
  60.        P1SEL |= 0xC0;    //1_7  1_6   WAISHE IO
  61.        P1DIR |=0X01;     //1_0 LED
  62.       U1BAUD |= 0xD8;        // baud_m 216
  63.       U1GCR |= 0x0B;        // Set baud_e 11   115200bps
  64.       U1CSR |= 0xC0;        // uart mode  ENABLE RE
  65.       U1UCR &=0xf3;       //stop bit --1bit   DISABLE Parity
  66.       U1GCR &= ~0x60;         //LSB
  67.       UTX1IF =0;   // UART1 TX interrupt signal reset
  68.       URX1IE = 1;       // UART1 TX interrupt enable
  69.       EA =1;
  70.       LED = 0;
  71.      UartSendString_PN(send_command_1,sizeof(send_command_1));
  72.       delayMS();
  73.       UartSendString_PN(send_command_2,sizeof(send_command_2));
  74.        delayMS();
  75. }

  76. uchar* chartohex(uchar v)
  77. {
  78.   uchar n[5];
  79.   n[0]=48;
  80.   n[1]=120;
  81.   uchar s1,s2;
  82.   if(((v>>4)+48)>57) s1= (v>>4)+71 ;
  83.   else   s1=(v>>4)+48;
  84.   if(((v&0x0f)+48)>57)  s2= (v&0x0f)+71;
  85.   else    s2=(v&0x0f)+48;   
  86.   n[2]=s1;
  87.   n[3]=s2;
  88.   n[4] = 44;
  89.     return n;
  90. }




  91. /****************************************************************************
  92. * 名    称: UART1_ISR(void) 串口中断处理函数
  93. * 描    述: 当串口1产生接收中断,将收到的数据发送到串口
  94. ****************************************************************************/
  95. #pragma vector = URX1_VECTOR
  96. __interrupt void UART1_ISR(void)
  97. {
  98.     uchar tmp = U1DBUF;
  99.   uart(tmp);
  100. //  UartSendString(chartohex(tmp),5);
  101.     URX1IF = 0;       // 清中断标志
  102. }


  103. /****************************************************************************
  104.   char iRxBuf = 0;
  105.   char RxBuf[];

  106. * 名    称: UART0_ISR(void) 串口中断处理函数
  107. * 描    述: 当串口0产生接收中断,将收到的数据保存在RxBuf中

  108. #pragma vector = URX0_VECTOR
  109. __interrupt void UART0_ISR(void)
  110. {
  111.     if(U0DBUF == 35)  // # signal send rxbuf to pn532
  112.     {
  113.       UartSendString_PN(RxBuf,iRxBuf+1);
  114.     }else
  115.     {
  116.       RxBuf[iRxBuf]=U0DBUF;
  117.       iRxBuf++;
  118.     }
  119. //  UartSendString(chartohex(tmp),5);
  120.     URX0IF = 0;       // interrupt signal reset
  121. }
  122. ****************************************************************************/
复制代码

以上代码下载:
uart_硬件(测试通过).zip (27.33 KB, 下载次数: 18)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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