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 (411.18 KB, 下載次數: 48)
下載附件
2021-2-3 20:14 上傳
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、代碼見附件 - #include <ioCC2530.h>
- #include <string.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- #define LED P1_0
- #define LCD_RX P1_7 /* s---TX/ --- RX P1_7--m*/
- #define LCD_TX P1_6 /* s---RX ----TX P1_6--m*/
- uchar ack_frame[]={0x00,0x00,0xFF,0x00,0xFF,0x00};
- 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};
- uchar send_command_2[] = {0x00 ,0x00 ,0xFF ,0x04 ,0xFC ,0xD4 ,0x4A ,0x02 ,0x00 ,0xE0 ,0x00};
- void InitUart(void){
- P0SEL |= 0x0E;
- P2DIR &= ~0XC0;
- U0CSR |= 0x80; // uart mode
- // U0CSR |= 0x40; // re interrupt enable
- U0GCR |= 11;
- U0BAUD |= 216;
- UTX0IF = 0;
- // URX0IF = 0;
- }
- void uart(char Data)
- {
- U0DBUF = Data;
- while(UTX0IF == 0);
- UTX0IF = 0;
- }
-
- void UartSendString_PN(char *Data, int len)
- {
- uint i;
- for(i=0; i<len; i++)
- {
- U1DBUF = *Data++;
- while(UTX1IF == 0);
- UTX1IF = 0;
- }
- }
- void UartSendString(char *Data, int len)
- {
- uint i;
-
- for(i=0; i<len; i++)
- {
- U0DBUF = *Data++;
- while(UTX0IF == 0);
- UTX0IF = 0;
- }
- }
- void delayMS(){
- for(uchar i =0 ;i<100;i++)
- for(uchar j =0 ;j<50;j++);
- }
- void main()
- {
- CLKCONCMD &= ~0x40; //
- while(CLKCONSTA & 0x40); //
- CLKCONCMD &= ~0x47; //32MHZ
- PERCFG |= 0x02; //
- InitUart();
- P1SEL |= 0xC0; //1_7 1_6 WAISHE IO
- P1DIR |=0X01; //1_0 LED
- U1BAUD |= 0xD8; // baud_m 216
- U1GCR |= 0x0B; // Set baud_e 11 115200bps
- U1CSR |= 0xC0; // uart mode ENABLE RE
- U1UCR &=0xf3; //stop bit --1bit DISABLE Parity
- U1GCR &= ~0x60; //LSB
- UTX1IF =0; // UART1 TX interrupt signal reset
- URX1IE = 1; // UART1 TX interrupt enable
- EA =1;
- LED = 0;
- UartSendString_PN(send_command_1,sizeof(send_command_1));
- delayMS();
- UartSendString_PN(send_command_2,sizeof(send_command_2));
- delayMS();
- }
- uchar* chartohex(uchar v)
- {
- uchar n[5];
- n[0]=48;
- n[1]=120;
- uchar s1,s2;
- if(((v>>4)+48)>57) s1= (v>>4)+71 ;
- else s1=(v>>4)+48;
- if(((v&0x0f)+48)>57) s2= (v&0x0f)+71;
- else s2=(v&0x0f)+48;
- n[2]=s1;
- n[3]=s2;
- n[4] = 44;
- return n;
- }
- /****************************************************************************
- * 名 稱: UART1_ISR(void) 串口中斷處理函數
- * 描 述: 當串口1產生接收中斷,將收到的數據發送到串口
- ****************************************************************************/
- #pragma vector = URX1_VECTOR
- __interrupt void UART1_ISR(void)
- {
- uchar tmp = U1DBUF;
- uart(tmp);
- // UartSendString(chartohex(tmp),5);
- URX1IF = 0; // 清中斷標志
- }
- /****************************************************************************
- char iRxBuf = 0;
- char RxBuf[];
- * 名 稱: UART0_ISR(void) 串口中斷處理函數
- * 描 述: 當串口0產生接收中斷,將收到的數據保存在RxBuf中
- #pragma vector = URX0_VECTOR
- __interrupt void UART0_ISR(void)
- {
- if(U0DBUF == 35) // # signal send rxbuf to pn532
- {
- UartSendString_PN(RxBuf,iRxBuf+1);
- }else
- {
- RxBuf[iRxBuf]=U0DBUF;
- iRxBuf++;
- }
- // UartSendString(chartohex(tmp),5);
- URX0IF = 0; // interrupt signal reset
- }
- ****************************************************************************/
復制代碼
以上代碼下載:
uart_硬件(測試通過).zip
(27.33 KB, 下載次數: 18)
2021-2-3 20:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|