Example application for the STMicroelectronics X-NUCLEO-NFC05A1

Dependencies:   RFAL ST25R3911 BSP05

X-NUCLEO-NFC05A1 NFC Card Reader Expansion Board Firmware Package

Introduction

This firmware package includes Components Device Drivers, Board Support Package and example applications for STMicroelectronics X-NUCLEO-NFC05A1 NFC Card Reader Expansion Board based on the ST25R3911B.

Example Application

This program gives the user the possibility to read the URI information written on the expansion board. The LEDs will blink for few seconds to indicate that the board is initializing. As soon as it finishes, the device is ready to communicate with external NFC devices. LED6 will blink until an NFC device is close to it and ready to read the URI value.

Tested Platforms

This firmware has been tested on STM32 NUCLEO-F401RE

Committer:
DiegoOstuni
Date:
Thu Nov 14 14:57:00 2019 +0000
Revision:
3:9a152c93d7a2
Parent:
1:86504e1ac6b1
Example application for the STMicroelectronics X-NUCLEO-NFC05A1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DiegoOstuni 1:86504e1ac6b1 1 /**
DiegoOstuni 1:86504e1ac6b1 2 ******************************************************************************
DiegoOstuni 1:86504e1ac6b1 3 * File Name : main.c
DiegoOstuni 1:86504e1ac6b1 4 * Description : Main program body
DiegoOstuni 1:86504e1ac6b1 5 ******************************************************************************
DiegoOstuni 1:86504e1ac6b1 6 *
DiegoOstuni 1:86504e1ac6b1 7 * COPYRIGHT(c) 2017 STMicroelectronics
DiegoOstuni 1:86504e1ac6b1 8 *
DiegoOstuni 1:86504e1ac6b1 9 * Redistribution and use in source and binary forms, with or without modification,
DiegoOstuni 1:86504e1ac6b1 10 * are permitted provided that the following conditions are met:
DiegoOstuni 1:86504e1ac6b1 11 * 1. Redistributions of source code must retain the above copyright notice,
DiegoOstuni 1:86504e1ac6b1 12 * this list of conditions and the following disclaimer.
DiegoOstuni 1:86504e1ac6b1 13 * 2. Redistributions in binary form must reproduce the above copyright notice,
DiegoOstuni 1:86504e1ac6b1 14 * this list of conditions and the following disclaimer in the documentation
DiegoOstuni 1:86504e1ac6b1 15 * and/or other materials provided with the distribution.
DiegoOstuni 1:86504e1ac6b1 16 * 3. Neither the name of STMicroelectronics nor the names of its contributors
DiegoOstuni 1:86504e1ac6b1 17 * may be used to endorse or promote products derived from this software
DiegoOstuni 1:86504e1ac6b1 18 * without specific prior written permission.
DiegoOstuni 1:86504e1ac6b1 19 *
DiegoOstuni 1:86504e1ac6b1 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
DiegoOstuni 1:86504e1ac6b1 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
DiegoOstuni 1:86504e1ac6b1 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DiegoOstuni 1:86504e1ac6b1 23 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
DiegoOstuni 1:86504e1ac6b1 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DiegoOstuni 1:86504e1ac6b1 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
DiegoOstuni 1:86504e1ac6b1 26 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
DiegoOstuni 1:86504e1ac6b1 27 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
DiegoOstuni 1:86504e1ac6b1 28 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
DiegoOstuni 1:86504e1ac6b1 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
DiegoOstuni 1:86504e1ac6b1 30 *
DiegoOstuni 1:86504e1ac6b1 31 ******************************************************************************
DiegoOstuni 1:86504e1ac6b1 32 */
DiegoOstuni 1:86504e1ac6b1 33
DiegoOstuni 1:86504e1ac6b1 34 /*! \file
DiegoOstuni 1:86504e1ac6b1 35 *
DiegoOstuni 1:86504e1ac6b1 36 * \author
DiegoOstuni 1:86504e1ac6b1 37 *
DiegoOstuni 1:86504e1ac6b1 38 * \brief Main program body.
DiegoOstuni 1:86504e1ac6b1 39 *
DiegoOstuni 1:86504e1ac6b1 40 */
DiegoOstuni 1:86504e1ac6b1 41
DiegoOstuni 1:86504e1ac6b1 42
DiegoOstuni 1:86504e1ac6b1 43
DiegoOstuni 1:86504e1ac6b1 44 /* USER CODE BEGIN Includes */
DiegoOstuni 1:86504e1ac6b1 45 #include "mbed.h"
DiegoOstuni 1:86504e1ac6b1 46 #include "logger.h"
DiegoOstuni 1:86504e1ac6b1 47 #include "st_errno.h"
DiegoOstuni 1:86504e1ac6b1 48 #include "rfal_rf.h"
DiegoOstuni 1:86504e1ac6b1 49 #include "rfal_AnalogConfig.h"
DiegoOstuni 1:86504e1ac6b1 50 #include "ST25R3911.h"
DiegoOstuni 1:86504e1ac6b1 51 #include "x_nucleo_nfc05.h"
DiegoOstuni 1:86504e1ac6b1 52 #include "x_nucleo_nfc05a1.h"
DiegoOstuni 1:86504e1ac6b1 53 #include "st25r3911_interrupt.h"
DiegoOstuni 1:86504e1ac6b1 54
DiegoOstuni 1:86504e1ac6b1 55 #include <stdint.h>
DiegoOstuni 1:86504e1ac6b1 56
DiegoOstuni 1:86504e1ac6b1 57
DiegoOstuni 1:86504e1ac6b1 58 /* USER CODE END Includes */
DiegoOstuni 1:86504e1ac6b1 59
DiegoOstuni 1:86504e1ac6b1 60
DiegoOstuni 1:86504e1ac6b1 61
DiegoOstuni 1:86504e1ac6b1 62 #ifndef MYBOOLEAN_H
DiegoOstuni 1:86504e1ac6b1 63 #define MYBOOLEAN_H
DiegoOstuni 1:86504e1ac6b1 64
DiegoOstuni 1:86504e1ac6b1 65 #define false 0
DiegoOstuni 1:86504e1ac6b1 66 #define true 1
DiegoOstuni 1:86504e1ac6b1 67 #define bool int
DiegoOstuni 1:86504e1ac6b1 68
DiegoOstuni 1:86504e1ac6b1 69 #endif
DiegoOstuni 1:86504e1ac6b1 70
DiegoOstuni 1:86504e1ac6b1 71
DiegoOstuni 1:86504e1ac6b1 72
DiegoOstuni 1:86504e1ac6b1 73
DiegoOstuni 1:86504e1ac6b1 74 SPI_HandleTypeDef hspi1;
DiegoOstuni 1:86504e1ac6b1 75 SPI_InitTypeDef Init;
DiegoOstuni 1:86504e1ac6b1 76 ST25R3911 mST25;
DiegoOstuni 1:86504e1ac6b1 77
DiegoOstuni 1:86504e1ac6b1 78 SPI mspiChannel(SPI_MOSI, SPI_MISO, SPI_SCK);
DiegoOstuni 1:86504e1ac6b1 79 DigitalOut gpio_cs(SPI_CS);
DiegoOstuni 1:86504e1ac6b1 80
DiegoOstuni 1:86504e1ac6b1 81 DigitalIn uButton(BUTTON1);
DiegoOstuni 1:86504e1ac6b1 82 DigitalOut fieldLED_01(A1); //LED_F_PIN
DiegoOstuni 1:86504e1ac6b1 83 DigitalOut fieldLED_02(A2); //LED_B_PIN
DiegoOstuni 1:86504e1ac6b1 84 DigitalOut fieldLED_03(A3); //LED_A_PIN
DiegoOstuni 1:86504e1ac6b1 85 DigitalOut fieldLED_04(D5); //LED_V_PIN
DiegoOstuni 1:86504e1ac6b1 86 DigitalOut fieldLED_05(D4); //LED_AP2P_PIN
DiegoOstuni 1:86504e1ac6b1 87 DigitalOut fieldLED_06(D7); //LED_FIELD_PIN
DiegoOstuni 1:86504e1ac6b1 88
DiegoOstuni 1:86504e1ac6b1 89 X_Nucleo_NFC05 mNFC05(&mspiChannel, &fieldLED_01);
DiegoOstuni 1:86504e1ac6b1 90
DiegoOstuni 1:86504e1ac6b1 91
DiegoOstuni 1:86504e1ac6b1 92 InterruptIn IRQ(SYS_WKUP);
DiegoOstuni 1:86504e1ac6b1 93
DiegoOstuni 1:86504e1ac6b1 94 volatile bool wakeupFlag = 0;
DiegoOstuni 1:86504e1ac6b1 95
DiegoOstuni 1:86504e1ac6b1 96 void st25Handler( void )
DiegoOstuni 1:86504e1ac6b1 97 {
DiegoOstuni 1:86504e1ac6b1 98
DiegoOstuni 1:86504e1ac6b1 99 //st25r3911Isr( &mspiChannel, &mST25, &gpio_cs, &IRQ );
DiegoOstuni 1:86504e1ac6b1 100 }
DiegoOstuni 1:86504e1ac6b1 101
DiegoOstuni 1:86504e1ac6b1 102
DiegoOstuni 1:86504e1ac6b1 103
DiegoOstuni 1:86504e1ac6b1 104 int main(void)
DiegoOstuni 1:86504e1ac6b1 105 {
DiegoOstuni 1:86504e1ac6b1 106
DiegoOstuni 1:86504e1ac6b1 107 /* Setting format and frequency for SPI communication */
DiegoOstuni 1:86504e1ac6b1 108 gpio_cs = 1;
DiegoOstuni 1:86504e1ac6b1 109 mspiChannel.format(8, 1);
DiegoOstuni 1:86504e1ac6b1 110 mspiChannel.frequency(4000000);
DiegoOstuni 1:86504e1ac6b1 111
DiegoOstuni 1:86504e1ac6b1 112 /* Set IRQ handler */
DiegoOstuni 1:86504e1ac6b1 113 IRQ.rise(&st25Handler);
DiegoOstuni 1:86504e1ac6b1 114
DiegoOstuni 1:86504e1ac6b1 115 /* Set default Config for rfal */
DiegoOstuni 1:86504e1ac6b1 116 rfalAnalogConfigInitialize();
DiegoOstuni 1:86504e1ac6b1 117
DiegoOstuni 1:86504e1ac6b1 118 if( rfalInitialize(&mspiChannel, &mST25, &gpio_cs, &IRQ, &fieldLED_01, &fieldLED_02, &fieldLED_03, &fieldLED_04, &fieldLED_05, &fieldLED_06 ) != ERR_NONE )
DiegoOstuni 1:86504e1ac6b1 119 {
DiegoOstuni 1:86504e1ac6b1 120
DiegoOstuni 1:86504e1ac6b1 121 /* If here, there is an error in rfal Initialization */
DiegoOstuni 1:86504e1ac6b1 122 while(1)
DiegoOstuni 1:86504e1ac6b1 123 {
DiegoOstuni 1:86504e1ac6b1 124 /* Blink the LED to communicate an error */
DiegoOstuni 1:86504e1ac6b1 125 fieldLED_01.write(1);
DiegoOstuni 1:86504e1ac6b1 126 fieldLED_02.write(1);
DiegoOstuni 1:86504e1ac6b1 127 fieldLED_03.write(1);
DiegoOstuni 1:86504e1ac6b1 128 fieldLED_04.write(1);
DiegoOstuni 1:86504e1ac6b1 129 fieldLED_05.write(1);
DiegoOstuni 1:86504e1ac6b1 130 fieldLED_06.write(1);
DiegoOstuni 1:86504e1ac6b1 131 wait_ms(200);
DiegoOstuni 1:86504e1ac6b1 132 fieldLED_01.write(0);
DiegoOstuni 1:86504e1ac6b1 133 fieldLED_02.write(0);
DiegoOstuni 1:86504e1ac6b1 134 fieldLED_03.write(0);
DiegoOstuni 1:86504e1ac6b1 135 fieldLED_04.write(0);
DiegoOstuni 1:86504e1ac6b1 136 fieldLED_05.write(0);
DiegoOstuni 1:86504e1ac6b1 137 fieldLED_06.write(0);
DiegoOstuni 1:86504e1ac6b1 138 wait_ms(300);
DiegoOstuni 1:86504e1ac6b1 139 }
DiegoOstuni 1:86504e1ac6b1 140 }
DiegoOstuni 1:86504e1ac6b1 141 else
DiegoOstuni 1:86504e1ac6b1 142 {
DiegoOstuni 1:86504e1ac6b1 143 /* Initialization succeeded */
DiegoOstuni 1:86504e1ac6b1 144 for(int i = 0; i < 6; i++)
DiegoOstuni 1:86504e1ac6b1 145 {
DiegoOstuni 1:86504e1ac6b1 146 fieldLED_01.write(1);
DiegoOstuni 1:86504e1ac6b1 147 fieldLED_02.write(1);
DiegoOstuni 1:86504e1ac6b1 148 fieldLED_03.write(1);
DiegoOstuni 1:86504e1ac6b1 149 fieldLED_04.write(1);
DiegoOstuni 1:86504e1ac6b1 150 fieldLED_05.write(1);
DiegoOstuni 1:86504e1ac6b1 151 fieldLED_06.write(1);
DiegoOstuni 1:86504e1ac6b1 152 wait_ms(200);
DiegoOstuni 1:86504e1ac6b1 153 fieldLED_01.write(0);
DiegoOstuni 1:86504e1ac6b1 154 fieldLED_02.write(0);
DiegoOstuni 1:86504e1ac6b1 155 fieldLED_03.write(0);
DiegoOstuni 1:86504e1ac6b1 156 fieldLED_04.write(0);
DiegoOstuni 1:86504e1ac6b1 157 fieldLED_05.write(0);
DiegoOstuni 1:86504e1ac6b1 158 fieldLED_06.write(0);
DiegoOstuni 1:86504e1ac6b1 159 wait_ms(300);
DiegoOstuni 1:86504e1ac6b1 160
DiegoOstuni 1:86504e1ac6b1 161 }
DiegoOstuni 1:86504e1ac6b1 162
DiegoOstuni 1:86504e1ac6b1 163 }
DiegoOstuni 1:86504e1ac6b1 164
DiegoOstuni 1:86504e1ac6b1 165
DiegoOstuni 1:86504e1ac6b1 166 while(1)
DiegoOstuni 1:86504e1ac6b1 167 {
DiegoOstuni 1:86504e1ac6b1 168
DiegoOstuni 1:86504e1ac6b1 169
DiegoOstuni 1:86504e1ac6b1 170 /* Run RFAL Worker */
DiegoOstuni 1:86504e1ac6b1 171 rfalWorker(&mspiChannel, &mST25, &gpio_cs, &IRQ, &fieldLED_01, &fieldLED_02, &fieldLED_03, &fieldLED_04, &fieldLED_05, &fieldLED_06 );
DiegoOstuni 1:86504e1ac6b1 172
DiegoOstuni 1:86504e1ac6b1 173 /* Run Demo Application */
DiegoOstuni 1:86504e1ac6b1 174 demoCycle(&mspiChannel, &mST25, &uButton, &gpio_cs, &IRQ, &fieldLED_01, &fieldLED_02, &fieldLED_03, &fieldLED_04, &fieldLED_05, &fieldLED_06 );
DiegoOstuni 1:86504e1ac6b1 175 }
DiegoOstuni 1:86504e1ac6b1 176
DiegoOstuni 1:86504e1ac6b1 177 }
DiegoOstuni 1:86504e1ac6b1 178
DiegoOstuni 1:86504e1ac6b1 179 /**
DiegoOstuni 1:86504e1ac6b1 180 * @}
DiegoOstuni 1:86504e1ac6b1 181 */
DiegoOstuni 1:86504e1ac6b1 182
DiegoOstuni 1:86504e1ac6b1 183 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/