1 /** 2 ****************************************************************************** 3 * @file stm32wb0x.h 4 * @author MCD Application Team 5 * @brief CMSIS STM32WB0x Device Peripheral Access Layer Header File. 6 * 7 * The file is the unique include file that the application programmer 8 * is using in the C source code, usually in main.c. This file contains: 9 * - Configuration section that allows to select: 10 * - The STM32WB0x device used in the target application 11 * - To use or not the peripheral's drivers in application code(i.e. 12 * code will be based on direct access to peripheral's registers 13 * rather than drivers API), this option is controlled by 14 * "#define USE_HAL_DRIVER" 15 * 16 ****************************************************************************** 17 * @attention 18 * 19 * Copyright (c) 2024 STMicroelectronics. 20 * All rights reserved. 21 * 22 * This software is licensed under terms that can be found in the LICENSE file 23 * in the root directory of this software component. 24 * If no LICENSE file comes with this software, it is provided AS-IS. 25 * 26 ****************************************************************************** 27 */ 28 29 /** @addtogroup CMSIS 30 * @{ 31 */ 32 33 /** @addtogroup stm32wb0x 34 * @{ 35 */ 36 37 #ifndef __STM32WB0x_H 38 #define __STM32WB0x_H 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif /* __cplusplus */ 43 44 /** @addtogroup Library_configuration_section 45 * @{ 46 */ 47 48 /** 49 * @brief STM32 Family 50 */ 51 #if !defined (STM32WB0) 52 #define STM32WB0 53 #endif /* STM32WB0 */ 54 55 /* Uncomment the line below according to the target STM32WB0 device used in your 56 application 57 */ 58 59 #if !defined(STM32WB05) && !defined(STM32WB06) && !defined(STM32WB07) && !defined(STM32WB09) 60 /* #define STM32WB05 */ /*!< STM32WB05 Devices */ 61 /* #define STM32WB06 */ /*!< STM32WB06 Devices */ 62 /* #define STM32WB07 */ /*!< STM32WB07 Devices */ 63 /* #define STM32WB09 */ /*!< STM32WB09 Devices */ 64 #endif /* !STM32WB05 && !STM32WB06 && !STM32WB07 && !STM32WB09 */ 65 66 /* Tip: To avoid modifying this file each time you need to switch between these 67 devices, you can define the device in your toolchain compiler preprocessor. 68 */ 69 #if !defined (USE_HAL_DRIVER) 70 /** 71 * @brief Comment the line below if you will not use the peripherals drivers. 72 In this case, these drivers will not be included and the application code will 73 be based on direct access to peripherals registers 74 */ 75 /*#define USE_HAL_DRIVER */ 76 #endif /* USE_HAL_DRIVER */ 77 78 /** 79 * @brief CMSIS Device version number 80 */ 81 #define __STM32WB0x_CMSIS_VERSION_MAIN (0x01U) /*!< [31:24] main version */ 82 #define __STM32WB0x_CMSIS_VERSION_SUB1 (0x00U) /*!< [23:16] sub1 version */ 83 #define __STM32WB0x_CMSIS_VERSION_SUB2 (0x00U) /*!< [15:8] sub2 version */ 84 #define __STM32WB0x_CMSIS_VERSION_RC (0x00U) /*!< [7:0] release candidate */ 85 #define __STM32WB0x_CMSIS_DEVICE_VERSION ((__STM32WB0x_CMSIS_VERSION_MAIN << 24)\ 86 |(__STM32WB0x_CMSIS_VERSION_SUB1 << 16)\ 87 |(__STM32WB0x_CMSIS_VERSION_SUB2 << 8 )\ 88 |(__STM32WB0x_CMSIS_VERSION_RC)) 89 90 /** 91 * @} 92 */ 93 94 /** @addtogroup Device_Included 95 * @{ 96 */ 97 98 #if defined( STM32WB05) || defined( STM32WB05x) 99 100 #include "stm32wb05.h" /* Header file supporting STM32WB05 */ 101 102 #elif defined( STM32WB06) || defined( STM32WB06x) 103 104 #include "stm32wb06.h" /* Header file supporting STM32WB06 */ 105 106 #elif defined( STM32WB07) || defined( STM32WB07x) 107 108 #include "stm32wb07.h" /* Header file supporting STM32WB07 */ 109 110 #elif defined( STM32WB09) || defined( STM32WB09x) 111 112 #include "stm32wb09.h" /* Header file supporting STM32WB09 */ 113 114 #else 115 116 #error "Please select first the target STM32WB0x device used in your application, for instance xx (in stm32wb0x.h file)" 117 118 #endif 119 #include "system_stm32wb0x.h" 120 121 /** 122 * @} 123 */ 124 125 /** @addtogroup Exported_types 126 * @{ 127 */ 128 typedef enum 129 { 130 RESET = 0, 131 SET = !RESET 132 } FlagStatus, ITStatus; 133 134 typedef enum 135 { 136 DISABLE = 0, 137 ENABLE = !DISABLE 138 } FunctionalState; 139 #define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) 140 141 typedef enum 142 { 143 SUCCESS = 0, 144 ERROR = !SUCCESS 145 } ErrorStatus; 146 147 /** @brief Booelan definition */ 148 typedef uint8_t BOOL; 149 150 #define TRUE ((BOOL)1U) 151 #define FALSE ((BOOL)0U) 152 153 /** 154 * @} 155 */ 156 157 158 /** @addtogroup Exported_macros 159 * @{ 160 */ 161 #define SET_BIT(REG, BIT) ((REG) |= (BIT)) 162 163 #define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT)) 164 165 #define READ_BIT(REG, BIT) ((REG) & (BIT)) 166 167 #define TOGGLE_BIT(REG, BIT) ((REG) ^= (BIT)) 168 169 #define CLEAR_REG(REG) ((REG) = (0x0)) 170 171 #define WRITE_REG(REG, VAL) ((REG) = (VAL)) 172 173 #define READ_REG(REG) ((REG)) 174 175 #define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) 176 177 #define MODIFY_REG_FIELD(REG, FIELD_NAME, VAL) MODIFY_REG(REG, FIELD_NAME##_Msk, ((VAL)<<(FIELD_NAME##_Pos))&\ 178 (FIELD_NAME##_Msk)) 179 180 /* Use of interrupt control for register exclusive access (privileged mode only) */ 181 /* Atomic 32-bit register access macro to set one or several bits */ 182 #define ATOMIC_SET_BIT(REG, BIT) \ 183 do { \ 184 uint32_t primask; \ 185 primask = __get_PRIMASK(); \ 186 __set_PRIMASK(1); \ 187 SET_BIT((REG), (BIT)); \ 188 __set_PRIMASK(primask); \ 189 } while(0) 190 191 /* Atomic 32-bit register access macro to clear one or several bits */ 192 #define ATOMIC_CLEAR_BIT(REG, BIT) \ 193 do { \ 194 uint32_t primask; \ 195 primask = __get_PRIMASK(); \ 196 __set_PRIMASK(1); \ 197 CLEAR_BIT((REG), (BIT)); \ 198 __set_PRIMASK(primask); \ 199 } while(0) 200 201 /* Atomic 32-bit register access macro to clear and set one or several bits */ 202 #define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK) \ 203 do { \ 204 uint32_t primask; \ 205 primask = __get_PRIMASK(); \ 206 __set_PRIMASK(1); \ 207 MODIFY_REG((REG), (CLEARMSK), (SETMASK)); \ 208 __set_PRIMASK(primask); \ 209 } while(0) 210 211 /* Atomic 16-bit register access macro to set one or several bits */ 212 #define ATOMIC_SETH_BIT(REG, BIT) ATOMIC_SET_BIT(REG, BIT) 213 214 /* Atomic 16-bit register access macro to clear one or several bits */ 215 #define ATOMIC_CLEARH_BIT(REG, BIT) ATOMIC_CLEAR_BIT(REG, BIT) 216 217 /* Atomic 16-bit register access macro to clear and set one or several bits */ 218 #define ATOMIC_MODIFYH_REG(REG, CLEARMSK, SETMASK) ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK) 219 220 /** 221 * @} 222 */ 223 224 #if defined (USE_HAL_DRIVER) 225 #include "stm32wb0x_hal.h" 226 #endif /* USE_HAL_DRIVER */ 227 228 #ifdef __cplusplus 229 } 230 #endif /* __cplusplus */ 231 232 #endif /* __STM32WB0x_H */ 233 /** 234 * @} 235 */ 236 237 /** 238 * @} 239 */ 240