BLE_API wrapper library for STMicroelectronics' BlueNRG Bluetooth Low Energy expansion board shield (Component)
Dependents: Nucleo_Zumo_BLE_IDB04A1 contest_IOT5 contest_IOT6 contest_IOT_10 ... more
Fork of X_NUCLEO_IDB0XA1 by
Arduino Connector Compatibility Warning
X-NUCLEO-IDB04A1 and X-NUCLEO-IDB05A1 are Arduino compatible with an exception: instead of using pin D13
for the SPI clock, they use pin D3
.
The default configuration for this library is having the SPI clock on pin D3
.
To be fully Arduino compatible, X-NUCLEO-IDB04A1 and X-NUCLEO-IDB05A1 need a small HW patch.
For X-NUCLEO-IDB04A1 this patch consists in removing zero resistor R10
and instead soldering zero resistor R11
.
For X-NUCLEO-IDB05A1 this patch consists in removing zero resistor R4
and instead soldering zero resistor R6
.
In case you patch your board, then you also have to configure this library to use pin D13
to drive the SPI clock (see macro IDB0XA1_D13_PATCH
in file x_nucleo_idb0xa1_targets.h
).
If you use pin D13
for the SPI clock, please be aware that on STM32 Nucleo boards you may not drive the LED, otherwise you will get a conflict: the LED on STM32 Nucleo boards is connected to pin D13
.
Referring to the current list of tested platforms (see X-NUCLEO-IDB04A1 and X-NUCLEO-IDB05A1 pages), the patch is required by ST-Nucleo-F103RB; ST-Nucleo-F302R8; ST-Nucleo-F411RE; and ST-Nucleo-F446RE.
x-nucleo-idb0xa1/bluenrg-hci/ble_hal.h
- Committer:
- Andrea Palmieri
- Date:
- 2016-09-16
- Revision:
- 307:fa98703ece8e
- Parent:
- 291:79456beaef49
File content as of revision 307:fa98703ece8e:
/******************** (C) COPYRIGHT 2012 STMicroelectronics ******************** * File Name : hal.h * Author : AMS - HEA&RF BU * Version : V1.0.0 * Date : 19-July-2012 * Description : Header file which defines Hardware abstraction layer APIs * used by the BLE stack. It defines the set of functions * which needs to be ported to the target platform. ******************************************************************************** * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. *******************************************************************************/ #ifndef __HAL_H__ #define __HAL_H__ /****************************************************************************** * Includes *****************************************************************************/ #include <ble_hal_types.h> #include <ble_status.h> /****************************************************************************** * Macros *****************************************************************************/ /* Little Endian buffer to host endianess conversion */ #define LE_TO_HOST_16(ptr) (uint16_t) ( ((uint16_t) \ *((uint8_t *)ptr)) | \ ((uint16_t) \ *((uint8_t *)ptr + 1) << 8 ) ) #define LE_TO_HOST_32(ptr) (uint32_t) ( ((uint32_t) \ *((uint8_t *)ptr)) | \ ((uint32_t) \ *((uint8_t *)ptr + 1) << 8) | \ ((uint32_t) \ *((uint8_t *)ptr + 2) << 16) | \ ((uint32_t) \ *((uint8_t *)ptr + 3) << 24) ) /* Big Endian buffer to host endianess conversion */ #define BE_TO_HOST_16(ptr) (uint16_t) ( ((uint16_t) \ *((uint8_t *)ptr)) << 8 | \ ((uint16_t) \ *((uint8_t *)ptr + 1) ) ) /* Store Value into a buffer in Little Endian Format */ #define HOST_TO_LE_16(buf, val) ( ((buf)[0] = (uint8_t) (val) ) , \ ((buf)[1] = (uint8_t) (val>>8) ) ) #define HOST_TO_LE_32(buf, val) ( ((buf)[0] = (uint8_t) (val) ) , \ ((buf)[1] = (uint8_t) (val>>8) ) , \ ((buf)[2] = (uint8_t) (val>>16) ) , \ ((buf)[3] = (uint8_t) (val>>24) ) ) /* Store Value into a buffer in Big Endian Format */ #define HOST_TO_BE_16(buf, val) ( ((buf)[1] = (uint8_t) (val) ) , \ ((buf)[0] = (uint8_t) (val>>8) ) ) #define DISABLE_INTERRUPTS() __disable_interrupt() #define ENABLE_INTERRUPTS() __enable_interrupt() #define SAVE_PRIMASK() uint32_t uwPRIMASK_Bit = __get_PRIMASK() #define ATOMIC_SECTION_BEGIN() uint32_t uwPRIMASK_Bit = __get_PRIMASK(); \ __disable_interrupt(); \ /* Must be called in the same or in a lower scope of SUSPEND_INTERRUPTS */ #define ATOMIC_SECTION_END() __set_PRIMASK(uwPRIMASK_Bit) /****************************************************************************** * Types *****************************************************************************/ /****************************************************************************** * Function Prototypes *****************************************************************************/ /** * Writes data to a serial interface. * * @param[in] data1 1st buffer * @param[in] data2 2nd buffer * @param[in] n_bytes1 number of bytes in 1st buffer * @param[in] n_bytes2 number of bytes in 2nd buffer */ void Hal_Write_Serial(const void* data1, const void* data2, int32_t n_bytes1, int32_t n_bytes2); /** * Enable interrupts from HCI controller. */ void Enable_SPI_IRQ(void); /** * Disable interrupts from BLE controller. */ void Disable_SPI_IRQ(void); void signalEventsToProcess(void); void Hal_Init_Timer(void); uint32_t Hal_Get_Timer_Value(void); void Hal_Start_Timer(uint32_t timeout); void Hal_Stop_Timer(void); #endif /* __HAL_H__ */