Subversion Repositories LedShow

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f1xx_ll_gpio.h
4
  * @author  MCD Application Team
5
  * @brief   Header file of GPIO LL module.
6
  ******************************************************************************
7
  * @attention
8
  *
9 mjames 9
  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
10
  * All rights reserved.</center></h2>
2 mjames 11
  *
9 mjames 12
  * This software component is licensed by ST under BSD 3-Clause license,
13
  * the "License"; You may not use this file except in compliance with the
14
  * License. You may obtain a copy of the License at:
15
  *                        opensource.org/licenses/BSD-3-Clause
2 mjames 16
  *
17
  ******************************************************************************
18
  */
19
 
20
/* Define to prevent recursive inclusion -------------------------------------*/
9 mjames 21
#ifndef STM32F1xx_LL_GPIO_H
22
#define STM32F1xx_LL_GPIO_H
2 mjames 23
 
24
#ifdef __cplusplus
25
extern "C" {
26
#endif
27
 
28
/* Includes ------------------------------------------------------------------*/
29
#include "stm32f1xx.h"
30
 
31
/** @addtogroup STM32F1xx_LL_Driver
32
  * @{
33
  */
34
 
35
#if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG)
36
 
37
/** @defgroup GPIO_LL GPIO
38
  * @{
39
  */
40
 
41
/* Private types -------------------------------------------------------------*/
42
/* Private variables ---------------------------------------------------------*/
43
/* Private constants ---------------------------------------------------------*/
44
 
45
/** @defgroup GPIO_LL_Private_Constants GPIO Private Constants
46
  * @{
47
  */
48
/* Defines used for Pin Mask Initialization */
49
#define GPIO_PIN_MASK_POS   8U
50
#define GPIO_PIN_NB         16U
51
/**
52
  * @}
53
  */
54
 
55
/* Private macros ------------------------------------------------------------*/
56
#if defined(USE_FULL_LL_DRIVER)
57
/** @defgroup GPIO_LL_Private_Macros GPIO Private Macros
58
  * @{
59
  */
60
 
61
/**
62
  * @}
63
  */
64
#endif /*USE_FULL_LL_DRIVER*/
65
 
66
/* Exported types ------------------------------------------------------------*/
67
#if defined(USE_FULL_LL_DRIVER)
68
/** @defgroup GPIO_LL_ES_INIT GPIO Exported Init structures
69
  * @{
70
  */
71
 
72
/**
73
  * @brief LL GPIO Init Structure definition
74
  */
75
typedef struct
76
{
77
  uint32_t Pin;          /*!< Specifies the GPIO pins to be configured.
78
                              This parameter can be any value of @ref GPIO_LL_EC_PIN */
79
 
80
  uint32_t Mode;         /*!< Specifies the operating mode for the selected pins.
81
                              This parameter can be a value of @ref GPIO_LL_EC_MODE.
82
 
83
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinMode().*/
84
 
85
  uint32_t Speed;        /*!< Specifies the speed for the selected pins.
86
                              This parameter can be a value of @ref GPIO_LL_EC_SPEED.
87
 
88
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinSpeed().*/
89
 
90
  uint32_t OutputType;   /*!< Specifies the operating output type for the selected pins.
91
                              This parameter can be a value of @ref GPIO_LL_EC_OUTPUT.
92
 
93
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinOutputType().*/
94
 
95
  uint32_t Pull;         /*!< Specifies the operating Pull-up/Pull down for the selected pins.
96
                              This parameter can be a value of @ref GPIO_LL_EC_PULL.
97
 
98
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinPull().*/
99
} LL_GPIO_InitTypeDef;
100
 
101
/**
102
  * @}
103
  */
104
#endif /* USE_FULL_LL_DRIVER */
105
 
106
/* Exported constants --------------------------------------------------------*/
107
/** @defgroup GPIO_LL_Exported_Constants GPIO Exported Constants
108
  * @{
109
  */
110
 
111
/** @defgroup GPIO_LL_EC_PIN PIN
112
  * @{
113
  */
114
#define LL_GPIO_PIN_0                    ((GPIO_BSRR_BS0  << GPIO_PIN_MASK_POS) | 0x00000001U)  /*!< Select pin 0  */
115
#define LL_GPIO_PIN_1                    ((GPIO_BSRR_BS1  << GPIO_PIN_MASK_POS) | 0x00000002U)  /*!< Select pin 1  */
116
#define LL_GPIO_PIN_2                    ((GPIO_BSRR_BS2  << GPIO_PIN_MASK_POS) | 0x00000004U)  /*!< Select pin 2  */
117
#define LL_GPIO_PIN_3                    ((GPIO_BSRR_BS3  << GPIO_PIN_MASK_POS) | 0x00000008U)  /*!< Select pin 3  */
118
#define LL_GPIO_PIN_4                    ((GPIO_BSRR_BS4  << GPIO_PIN_MASK_POS) | 0x00000010U)  /*!< Select pin 4  */
119
#define LL_GPIO_PIN_5                    ((GPIO_BSRR_BS5  << GPIO_PIN_MASK_POS) | 0x00000020U)  /*!< Select pin 5  */
120
#define LL_GPIO_PIN_6                    ((GPIO_BSRR_BS6  << GPIO_PIN_MASK_POS) | 0x00000040U)  /*!< Select pin 6  */
121
#define LL_GPIO_PIN_7                    ((GPIO_BSRR_BS7  << GPIO_PIN_MASK_POS) | 0x00000080U)  /*!< Select pin 7  */
122
#define LL_GPIO_PIN_8                    ((GPIO_BSRR_BS8  << GPIO_PIN_MASK_POS) | 0x04000001U)  /*!< Select pin 8  */
123
#define LL_GPIO_PIN_9                    ((GPIO_BSRR_BS9  << GPIO_PIN_MASK_POS) | 0x04000002U)  /*!< Select pin 9  */
124
#define LL_GPIO_PIN_10                   ((GPIO_BSRR_BS10 << GPIO_PIN_MASK_POS) | 0x04000004U)  /*!< Select pin 10 */
125
#define LL_GPIO_PIN_11                   ((GPIO_BSRR_BS11 << GPIO_PIN_MASK_POS) | 0x04000008U)  /*!< Select pin 11 */
126
#define LL_GPIO_PIN_12                   ((GPIO_BSRR_BS12 << GPIO_PIN_MASK_POS) | 0x04000010U)  /*!< Select pin 12 */
127
#define LL_GPIO_PIN_13                   ((GPIO_BSRR_BS13 << GPIO_PIN_MASK_POS) | 0x04000020U)  /*!< Select pin 13 */
128
#define LL_GPIO_PIN_14                   ((GPIO_BSRR_BS14 << GPIO_PIN_MASK_POS) | 0x04000040U)  /*!< Select pin 14 */
129
#define LL_GPIO_PIN_15                   ((GPIO_BSRR_BS15 << GPIO_PIN_MASK_POS) | 0x04000080U)  /*!< Select pin 15 */
130
#define LL_GPIO_PIN_ALL                  (LL_GPIO_PIN_0  | LL_GPIO_PIN_1  | LL_GPIO_PIN_2  | \
131
                                          LL_GPIO_PIN_3  | LL_GPIO_PIN_4  | LL_GPIO_PIN_5  | \
132
                                          LL_GPIO_PIN_6  | LL_GPIO_PIN_7  | LL_GPIO_PIN_8  | \
133
                                          LL_GPIO_PIN_9  | LL_GPIO_PIN_10 | LL_GPIO_PIN_11 | \
134
                                          LL_GPIO_PIN_12 | LL_GPIO_PIN_13 | LL_GPIO_PIN_14 | \
135
                                          LL_GPIO_PIN_15)                                      /*!< Select all pins */
136
/**
137
  * @}
138
  */
139
 
140
/** @defgroup GPIO_LL_EC_MODE Mode
141
  * @{
142
  */
143
#define LL_GPIO_MODE_ANALOG              0x00000000U       /*!< Select analog mode */
144
#define LL_GPIO_MODE_FLOATING            GPIO_CRL_CNF0_0   /*!< Select floating mode */
145
#define LL_GPIO_MODE_INPUT               GPIO_CRL_CNF0_1   /*!< Select input mode */
146
#define LL_GPIO_MODE_OUTPUT              GPIO_CRL_MODE0_0  /*!< Select general purpose output mode */
147
#define LL_GPIO_MODE_ALTERNATE           (GPIO_CRL_CNF0_1 | GPIO_CRL_MODE0_0) /*!< Select alternate function mode */
148
/**
149
  * @}
150
  */
151
 
152
/** @defgroup GPIO_LL_EC_OUTPUT Output Type
153
  * @{
154
  */
155
#define LL_GPIO_OUTPUT_PUSHPULL          0x00000000U                /*!< Select push-pull as output type */
156
#define LL_GPIO_OUTPUT_OPENDRAIN         GPIO_CRL_CNF0_0            /*!< Select open-drain as output type */
157
/**
158
  * @}
159
  */
160
 
161
/** @defgroup GPIO_LL_EC_SPEED Output Speed
162
  * @{
163
  */
164
#define LL_GPIO_MODE_OUTPUT_10MHz        GPIO_CRL_MODE0_0            /*!< Select Output mode, max speed 10 MHz */
165
#define LL_GPIO_MODE_OUTPUT_2MHz         GPIO_CRL_MODE0_1            /*!< Select Output mode, max speed 20 MHz */
166
#define LL_GPIO_MODE_OUTPUT_50MHz        GPIO_CRL_MODE0              /*!< Select Output mode, max speed 50 MHz */
167
/**
168
  * @}
169
  */
170
 
171
#define LL_GPIO_SPEED_FREQ_LOW           LL_GPIO_MODE_OUTPUT_2MHz    /*!< Select I/O low output speed    */
172
#define LL_GPIO_SPEED_FREQ_MEDIUM        LL_GPIO_MODE_OUTPUT_10MHz   /*!< Select I/O medium output speed */
173
#define LL_GPIO_SPEED_FREQ_HIGH          LL_GPIO_MODE_OUTPUT_50MHz   /*!< Select I/O high output speed   */
174
 
175
/** @defgroup GPIO_LL_EC_PULL Pull Up Pull Down
176
  * @{
177
  */
178
#define LL_GPIO_PULL_DOWN                0x00000000U    /*!< Select I/O pull down */
179
#define LL_GPIO_PULL_UP                  GPIO_ODR_ODR0  /*!< Select I/O pull up */
180
 
181
/**
182
  * @}
183
  */
184
 
185
/** @defgroup GPIO_LL_EVENTOUT_PIN EVENTOUT Pin
186
  * @{
187
  */
188
 
189
#define LL_GPIO_AF_EVENTOUT_PIN_0        AFIO_EVCR_PIN_PX0   /*!< EVENTOUT on pin 0 */
190
#define LL_GPIO_AF_EVENTOUT_PIN_1        AFIO_EVCR_PIN_PX1   /*!< EVENTOUT on pin 1 */
191
#define LL_GPIO_AF_EVENTOUT_PIN_2        AFIO_EVCR_PIN_PX2   /*!< EVENTOUT on pin 2 */
192
#define LL_GPIO_AF_EVENTOUT_PIN_3        AFIO_EVCR_PIN_PX3   /*!< EVENTOUT on pin 3 */
193
#define LL_GPIO_AF_EVENTOUT_PIN_4        AFIO_EVCR_PIN_PX4   /*!< EVENTOUT on pin 4 */
194
#define LL_GPIO_AF_EVENTOUT_PIN_5        AFIO_EVCR_PIN_PX5   /*!< EVENTOUT on pin 5 */
195
#define LL_GPIO_AF_EVENTOUT_PIN_6        AFIO_EVCR_PIN_PX6   /*!< EVENTOUT on pin 6 */
196
#define LL_GPIO_AF_EVENTOUT_PIN_7        AFIO_EVCR_PIN_PX7   /*!< EVENTOUT on pin 7 */
197
#define LL_GPIO_AF_EVENTOUT_PIN_8        AFIO_EVCR_PIN_PX8   /*!< EVENTOUT on pin 8 */
198
#define LL_GPIO_AF_EVENTOUT_PIN_9        AFIO_EVCR_PIN_PX9   /*!< EVENTOUT on pin 9 */
199
#define LL_GPIO_AF_EVENTOUT_PIN_10       AFIO_EVCR_PIN_PX10  /*!< EVENTOUT on pin 10 */
200
#define LL_GPIO_AF_EVENTOUT_PIN_11       AFIO_EVCR_PIN_PX11  /*!< EVENTOUT on pin 11 */
201
#define LL_GPIO_AF_EVENTOUT_PIN_12       AFIO_EVCR_PIN_PX12  /*!< EVENTOUT on pin 12 */
202
#define LL_GPIO_AF_EVENTOUT_PIN_13       AFIO_EVCR_PIN_PX13  /*!< EVENTOUT on pin 13 */
203
#define LL_GPIO_AF_EVENTOUT_PIN_14       AFIO_EVCR_PIN_PX14  /*!< EVENTOUT on pin 14 */
204
#define LL_GPIO_AF_EVENTOUT_PIN_15       AFIO_EVCR_PIN_PX15  /*!< EVENTOUT on pin 15 */
205
 
206
/**
207
  * @}
208
  */
209
 
210
/** @defgroup GPIO_LL_EVENTOUT_PORT EVENTOUT Port
211
  * @{
212
  */
213
 
214
#define LL_GPIO_AF_EVENTOUT_PORT_A       AFIO_EVCR_PORT_PA  /*!< EVENTOUT on port A */
215
#define LL_GPIO_AF_EVENTOUT_PORT_B       AFIO_EVCR_PORT_PB  /*!< EVENTOUT on port B */
216
#define LL_GPIO_AF_EVENTOUT_PORT_C       AFIO_EVCR_PORT_PC  /*!< EVENTOUT on port C */
217
#define LL_GPIO_AF_EVENTOUT_PORT_D       AFIO_EVCR_PORT_PD  /*!< EVENTOUT on port D */
218
#define LL_GPIO_AF_EVENTOUT_PORT_E       AFIO_EVCR_PORT_PE  /*!< EVENTOUT on port E */
219
 
220
/**
221
  * @}
222
  */
223
 
224
/** @defgroup GPIO_LL_EC_EXTI_PORT GPIO EXTI PORT
225
  * @{
226
  */
227
#define LL_GPIO_AF_EXTI_PORTA            0U   /*!< EXTI PORT A */
228
#define LL_GPIO_AF_EXTI_PORTB            1U   /*!< EXTI PORT B */
229
#define LL_GPIO_AF_EXTI_PORTC            2U   /*!< EXTI PORT C */
230
#define LL_GPIO_AF_EXTI_PORTD            3U   /*!< EXTI PORT D */
231
#define LL_GPIO_AF_EXTI_PORTE            4U   /*!< EXTI PORT E */
232
#define LL_GPIO_AF_EXTI_PORTF            5U   /*!< EXTI PORT F */
233
#define LL_GPIO_AF_EXTI_PORTG            6U   /*!< EXTI PORT G */
234
/**
235
  * @}
236
  */
237
 
238
/** @defgroup GPIO_LL_EC_EXTI_LINE GPIO EXTI LINE
239
  * @{
240
  */
241
#define LL_GPIO_AF_EXTI_LINE0            (0x000FU << 16U | 0U)  /*!< EXTI_POSITION_0  | EXTICR[0] */
242
#define LL_GPIO_AF_EXTI_LINE1            (0x00F0U << 16U | 0U)  /*!< EXTI_POSITION_4  | EXTICR[0] */
243
#define LL_GPIO_AF_EXTI_LINE2            (0x0F00U << 16U | 0U)  /*!< EXTI_POSITION_8  | EXTICR[0] */
244
#define LL_GPIO_AF_EXTI_LINE3            (0xF000U << 16U | 0U)  /*!< EXTI_POSITION_12 | EXTICR[0] */
245
#define LL_GPIO_AF_EXTI_LINE4            (0x000FU << 16U | 1U)  /*!< EXTI_POSITION_0  | EXTICR[1] */
246
#define LL_GPIO_AF_EXTI_LINE5            (0x00F0U << 16U | 1U)  /*!< EXTI_POSITION_4  | EXTICR[1] */
247
#define LL_GPIO_AF_EXTI_LINE6            (0x0F00U << 16U | 1U)  /*!< EXTI_POSITION_8  | EXTICR[1] */
248
#define LL_GPIO_AF_EXTI_LINE7            (0xF000U << 16U | 1U)  /*!< EXTI_POSITION_12 | EXTICR[1] */
249
#define LL_GPIO_AF_EXTI_LINE8            (0x000FU << 16U | 2U)  /*!< EXTI_POSITION_0  | EXTICR[2] */
250
#define LL_GPIO_AF_EXTI_LINE9            (0x00F0U << 16U | 2U)  /*!< EXTI_POSITION_4  | EXTICR[2] */
251
#define LL_GPIO_AF_EXTI_LINE10           (0x0F00U << 16U | 2U)  /*!< EXTI_POSITION_8  | EXTICR[2] */
252
#define LL_GPIO_AF_EXTI_LINE11           (0xF000U << 16U | 2U)  /*!< EXTI_POSITION_12 | EXTICR[2] */
253
#define LL_GPIO_AF_EXTI_LINE12           (0x000FU << 16U | 3U)  /*!< EXTI_POSITION_0  | EXTICR[3] */
254
#define LL_GPIO_AF_EXTI_LINE13           (0x00F0U << 16U | 3U)  /*!< EXTI_POSITION_4  | EXTICR[3] */
255
#define LL_GPIO_AF_EXTI_LINE14           (0x0F00U << 16U | 3U)  /*!< EXTI_POSITION_8  | EXTICR[3] */
256
#define LL_GPIO_AF_EXTI_LINE15           (0xF000U << 16U | 3U)  /*!< EXTI_POSITION_12 | EXTICR[3] */
257
/**
258
  * @}
259
  */
260
 
261
/**
262
  * @}
263
  */
264
 
265
/* Exported macro ------------------------------------------------------------*/
266
/** @defgroup GPIO_LL_Exported_Macros GPIO Exported Macros
267
  * @{
268
  */
269
 
270
/** @defgroup GPIO_LL_EM_WRITE_READ Common Write and read registers Macros
271
  * @{
272
  */
273
 
274
/**
275
  * @brief  Write a value in GPIO register
276
  * @param  __INSTANCE__ GPIO Instance
277
  * @param  __REG__ Register to be written
278
  * @param  __VALUE__ Value to be written in the register
279
  * @retval None
280
  */
281
#define LL_GPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
282
 
283
/**
284
  * @brief  Read a value in GPIO register
285
  * @param  __INSTANCE__ GPIO Instance
286
  * @param  __REG__ Register to be read
287
  * @retval Register value
288
  */
289
#define LL_GPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
290
/**
291
  * @}
292
  */
293
 
294
/**
295
  * @}
296
  */
297
 
298
/* Exported functions --------------------------------------------------------*/
299
/** @defgroup GPIO_LL_Exported_Functions GPIO Exported Functions
300
  * @{
301
  */
302
 
303
/** @defgroup GPIO_LL_EF_Port_Configuration Port Configuration
304
  * @{
305
  */
306
 
307
/**
308
  * @brief  Configure gpio mode for a dedicated pin on dedicated port.
309
  * @note   I/O mode can be Analog, Floating input, Input with pull-up/pull-down, General purpose Output,
310
  *         Alternate function Output.
311
  * @note   Warning: only one pin can be passed as parameter.
312
  * @rmtoll CRL        CNFy         LL_GPIO_SetPinMode
313
  * @rmtoll CRL        MODEy        LL_GPIO_SetPinMode
314
  * @rmtoll CRH        CNFy         LL_GPIO_SetPinMode
315
  * @rmtoll CRH        MODEy        LL_GPIO_SetPinMode
316
  * @param  GPIOx GPIO Port
317
  * @param  Pin This parameter can be one of the following values:
318
  *         @arg @ref LL_GPIO_PIN_0
319
  *         @arg @ref LL_GPIO_PIN_1
320
  *         @arg @ref LL_GPIO_PIN_2
321
  *         @arg @ref LL_GPIO_PIN_3
322
  *         @arg @ref LL_GPIO_PIN_4
323
  *         @arg @ref LL_GPIO_PIN_5
324
  *         @arg @ref LL_GPIO_PIN_6
325
  *         @arg @ref LL_GPIO_PIN_7
326
  *         @arg @ref LL_GPIO_PIN_8
327
  *         @arg @ref LL_GPIO_PIN_9
328
  *         @arg @ref LL_GPIO_PIN_10
329
  *         @arg @ref LL_GPIO_PIN_11
330
  *         @arg @ref LL_GPIO_PIN_12
331
  *         @arg @ref LL_GPIO_PIN_13
332
  *         @arg @ref LL_GPIO_PIN_14
333
  *         @arg @ref LL_GPIO_PIN_15
334
  * @param  Mode This parameter can be one of the following values:
335
  *         @arg @ref LL_GPIO_MODE_ANALOG
336
  *         @arg @ref LL_GPIO_MODE_FLOATING
337
  *         @arg @ref LL_GPIO_MODE_INPUT
338
  *         @arg @ref LL_GPIO_MODE_OUTPUT
339
  *         @arg @ref LL_GPIO_MODE_ALTERNATE
340
  * @retval None
341
  */
342
__STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode)
343
{
9 mjames 344
  register uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&GPIOx->CRL) + (Pin >> 24)));
2 mjames 345
  MODIFY_REG(*pReg, ((GPIO_CRL_CNF0 | GPIO_CRL_MODE0) << (POSITION_VAL(Pin) * 4U)), (Mode << (POSITION_VAL(Pin) * 4U)));
346
}
347
 
348
/**
349
  * @brief  Return gpio mode for a dedicated pin on dedicated port.
350
  * @note   I/O mode can be Analog, Floating input, Input with pull-up/pull-down, General purpose Output,
351
  *         Alternate function Output.
352
  * @note   Warning: only one pin can be passed as parameter.
353
  * @rmtoll CRL        CNFy         LL_GPIO_GetPinMode
354
  * @rmtoll CRL        MODEy        LL_GPIO_GetPinMode
355
  * @rmtoll CRH        CNFy         LL_GPIO_GetPinMode
356
  * @rmtoll CRH        MODEy        LL_GPIO_GetPinMode
357
  * @param  GPIOx GPIO Port
358
  * @param  Pin This parameter can be one of the following values:
359
  *         @arg @ref LL_GPIO_PIN_0
360
  *         @arg @ref LL_GPIO_PIN_1
361
  *         @arg @ref LL_GPIO_PIN_2
362
  *         @arg @ref LL_GPIO_PIN_3
363
  *         @arg @ref LL_GPIO_PIN_4
364
  *         @arg @ref LL_GPIO_PIN_5
365
  *         @arg @ref LL_GPIO_PIN_6
366
  *         @arg @ref LL_GPIO_PIN_7
367
  *         @arg @ref LL_GPIO_PIN_8
368
  *         @arg @ref LL_GPIO_PIN_9
369
  *         @arg @ref LL_GPIO_PIN_10
370
  *         @arg @ref LL_GPIO_PIN_11
371
  *         @arg @ref LL_GPIO_PIN_12
372
  *         @arg @ref LL_GPIO_PIN_13
373
  *         @arg @ref LL_GPIO_PIN_14
374
  *         @arg @ref LL_GPIO_PIN_15
375
  * @retval Returned value can be one of the following values:
376
  *         @arg @ref LL_GPIO_MODE_ANALOG
377
  *         @arg @ref LL_GPIO_MODE_FLOATING
378
  *         @arg @ref LL_GPIO_MODE_INPUT
379
  *         @arg @ref LL_GPIO_MODE_OUTPUT
380
  *         @arg @ref LL_GPIO_MODE_ALTERNATE
381
  */
382
__STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin)
383
{
9 mjames 384
  register uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&GPIOx->CRL) + (Pin >> 24)));
2 mjames 385
  return (READ_BIT(*pReg, ((GPIO_CRL_CNF0 | GPIO_CRL_MODE0) << (POSITION_VAL(Pin) * 4U))) >> (POSITION_VAL(Pin) * 4U));
386
}
387
 
388
/**
389
  * @brief  Configure gpio speed for a dedicated pin on dedicated port.
390
  * @note   I/O speed can be Low, Medium or Fast speed.
391
  * @note   Warning: only one pin can be passed as parameter.
392
  * @note   Refer to datasheet for frequency specifications and the power
393
  *         supply and load conditions for each speed.
394
  * @rmtoll CRL      MODEy       LL_GPIO_SetPinSpeed
395
  * @rmtoll CRH      MODEy       LL_GPIO_SetPinSpeed
396
  * @param  GPIOx GPIO Port
397
  * @param  Pin This parameter can be one of the following values:
398
  *         @arg @ref LL_GPIO_PIN_0
399
  *         @arg @ref LL_GPIO_PIN_1
400
  *         @arg @ref LL_GPIO_PIN_2
401
  *         @arg @ref LL_GPIO_PIN_3
402
  *         @arg @ref LL_GPIO_PIN_4
403
  *         @arg @ref LL_GPIO_PIN_5
404
  *         @arg @ref LL_GPIO_PIN_6
405
  *         @arg @ref LL_GPIO_PIN_7
406
  *         @arg @ref LL_GPIO_PIN_8
407
  *         @arg @ref LL_GPIO_PIN_9
408
  *         @arg @ref LL_GPIO_PIN_10
409
  *         @arg @ref LL_GPIO_PIN_11
410
  *         @arg @ref LL_GPIO_PIN_12
411
  *         @arg @ref LL_GPIO_PIN_13
412
  *         @arg @ref LL_GPIO_PIN_14
413
  *         @arg @ref LL_GPIO_PIN_15
414
  * @param  Speed This parameter can be one of the following values:
415
  *         @arg @ref LL_GPIO_SPEED_FREQ_LOW
416
  *         @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
417
  *         @arg @ref LL_GPIO_SPEED_FREQ_HIGH
418
  * @retval None
419
  */
420
__STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t  Speed)
421
{
9 mjames 422
  register uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&GPIOx->CRL) + (Pin >> 24)));
2 mjames 423
  MODIFY_REG(*pReg, (GPIO_CRL_MODE0 << (POSITION_VAL(Pin) * 4U)),
424
             (Speed << (POSITION_VAL(Pin) * 4U)));
425
}
426
 
427
/**
428
  * @brief  Return gpio speed for a dedicated pin on dedicated port.
429
  * @note   I/O speed can be Low, Medium, Fast or High speed.
430
  * @note   Warning: only one pin can be passed as parameter.
431
  * @note   Refer to datasheet for frequency specifications and the power
432
  *         supply and load conditions for each speed.
433
  * @rmtoll CRL      MODEy       LL_GPIO_GetPinSpeed
434
  * @rmtoll CRH      MODEy       LL_GPIO_GetPinSpeed
435
  * @param  GPIOx GPIO Port
436
  * @param  Pin This parameter can be one of the following values:
437
  *         @arg @ref LL_GPIO_PIN_0
438
  *         @arg @ref LL_GPIO_PIN_1
439
  *         @arg @ref LL_GPIO_PIN_2
440
  *         @arg @ref LL_GPIO_PIN_3
441
  *         @arg @ref LL_GPIO_PIN_4
442
  *         @arg @ref LL_GPIO_PIN_5
443
  *         @arg @ref LL_GPIO_PIN_6
444
  *         @arg @ref LL_GPIO_PIN_7
445
  *         @arg @ref LL_GPIO_PIN_8
446
  *         @arg @ref LL_GPIO_PIN_9
447
  *         @arg @ref LL_GPIO_PIN_10
448
  *         @arg @ref LL_GPIO_PIN_11
449
  *         @arg @ref LL_GPIO_PIN_12
450
  *         @arg @ref LL_GPIO_PIN_13
451
  *         @arg @ref LL_GPIO_PIN_14
452
  *         @arg @ref LL_GPIO_PIN_15
453
  * @retval Returned value can be one of the following values:
454
  *         @arg @ref LL_GPIO_SPEED_FREQ_LOW
455
  *         @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
456
  *         @arg @ref LL_GPIO_SPEED_FREQ_HIGH
457
  */
458
__STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin)
459
{
9 mjames 460
  register uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&GPIOx->CRL) + (Pin >> 24)));
2 mjames 461
  return (READ_BIT(*pReg, (GPIO_CRL_MODE0 << (POSITION_VAL(Pin) * 4U))) >> (POSITION_VAL(Pin) * 4U));
462
}
463
 
464
/**
465
  * @brief  Configure gpio output type for several pins on dedicated port.
466
  * @note   Output type as to be set when gpio pin is in output or
467
  *         alternate modes. Possible type are Push-pull or Open-drain.
468
  * @rmtoll CRL       MODEy           LL_GPIO_SetPinOutputType
469
  * @rmtoll CRH       MODEy           LL_GPIO_SetPinOutputType
470
  * @param  GPIOx GPIO Port
471
  * @param  Pin This parameter can be a combination of the following values:
472
  *         @arg @ref LL_GPIO_PIN_0
473
  *         @arg @ref LL_GPIO_PIN_1
474
  *         @arg @ref LL_GPIO_PIN_2
475
  *         @arg @ref LL_GPIO_PIN_3
476
  *         @arg @ref LL_GPIO_PIN_4
477
  *         @arg @ref LL_GPIO_PIN_5
478
  *         @arg @ref LL_GPIO_PIN_6
479
  *         @arg @ref LL_GPIO_PIN_7
480
  *         @arg @ref LL_GPIO_PIN_8
481
  *         @arg @ref LL_GPIO_PIN_9
482
  *         @arg @ref LL_GPIO_PIN_10
483
  *         @arg @ref LL_GPIO_PIN_11
484
  *         @arg @ref LL_GPIO_PIN_12
485
  *         @arg @ref LL_GPIO_PIN_13
486
  *         @arg @ref LL_GPIO_PIN_14
487
  *         @arg @ref LL_GPIO_PIN_15
488
  *         @arg @ref LL_GPIO_PIN_ALL
489
  * @param  OutputType This parameter can be one of the following values:
490
  *         @arg @ref LL_GPIO_OUTPUT_PUSHPULL
491
  *         @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
492
  * @retval None
493
  */
494
__STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t OutputType)
495
{
9 mjames 496
  register uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&GPIOx->CRL) + (Pin >> 24)));
2 mjames 497
  MODIFY_REG(*pReg, (GPIO_CRL_CNF0_0 << (POSITION_VAL(Pin) * 4U)),
498
             (OutputType << (POSITION_VAL(Pin) * 4U)));
499
}
500
 
501
/**
502
  * @brief  Return gpio output type for several pins on dedicated port.
503
  * @note   Output type as to be set when gpio pin is in output or
504
  *         alternate modes. Possible type are Push-pull or Open-drain.
505
  * @note   Warning: only one pin can be passed as parameter.
506
  * @rmtoll CRL       MODEy       LL_GPIO_GetPinOutputType
507
  * @rmtoll CRH       MODEy       LL_GPIO_GetPinOutputType
508
  * @param  GPIOx GPIO Port
509
  * @param  Pin This parameter can be one of the following values:
510
  *         @arg @ref LL_GPIO_PIN_0
511
  *         @arg @ref LL_GPIO_PIN_1
512
  *         @arg @ref LL_GPIO_PIN_2
513
  *         @arg @ref LL_GPIO_PIN_3
514
  *         @arg @ref LL_GPIO_PIN_4
515
  *         @arg @ref LL_GPIO_PIN_5
516
  *         @arg @ref LL_GPIO_PIN_6
517
  *         @arg @ref LL_GPIO_PIN_7
518
  *         @arg @ref LL_GPIO_PIN_8
519
  *         @arg @ref LL_GPIO_PIN_9
520
  *         @arg @ref LL_GPIO_PIN_10
521
  *         @arg @ref LL_GPIO_PIN_11
522
  *         @arg @ref LL_GPIO_PIN_12
523
  *         @arg @ref LL_GPIO_PIN_13
524
  *         @arg @ref LL_GPIO_PIN_14
525
  *         @arg @ref LL_GPIO_PIN_15
526
  *         @arg @ref LL_GPIO_PIN_ALL
527
  * @retval Returned value can be one of the following values:
528
  *         @arg @ref LL_GPIO_OUTPUT_PUSHPULL
529
  *         @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
530
  */
531
__STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin)
532
{
9 mjames 533
  register uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&GPIOx->CRL) + (Pin >> 24)));
2 mjames 534
  return (READ_BIT(*pReg, (GPIO_CRL_CNF0_0 << (POSITION_VAL(Pin) * 4U))) >> (POSITION_VAL(Pin) * 4U));
535
 
536
}
537
 
538
/**
539
  * @brief  Configure gpio pull-up or pull-down for a dedicated pin on a dedicated port.
540
  * @note   Warning: only one pin can be passed as parameter.
541
  * @rmtoll ODR        ODR         LL_GPIO_SetPinPull
542
  * @param  GPIOx GPIO Port
543
  * @param  Pin This parameter can be one of the following values:
544
  *         @arg @ref LL_GPIO_PIN_0
545
  *         @arg @ref LL_GPIO_PIN_1
546
  *         @arg @ref LL_GPIO_PIN_2
547
  *         @arg @ref LL_GPIO_PIN_3
548
  *         @arg @ref LL_GPIO_PIN_4
549
  *         @arg @ref LL_GPIO_PIN_5
550
  *         @arg @ref LL_GPIO_PIN_6
551
  *         @arg @ref LL_GPIO_PIN_7
552
  *         @arg @ref LL_GPIO_PIN_8
553
  *         @arg @ref LL_GPIO_PIN_9
554
  *         @arg @ref LL_GPIO_PIN_10
555
  *         @arg @ref LL_GPIO_PIN_11
556
  *         @arg @ref LL_GPIO_PIN_12
557
  *         @arg @ref LL_GPIO_PIN_13
558
  *         @arg @ref LL_GPIO_PIN_14
559
  *         @arg @ref LL_GPIO_PIN_15
560
  * @param  Pull This parameter can be one of the following values:
561
  *         @arg @ref LL_GPIO_PULL_DOWN
562
  *         @arg @ref LL_GPIO_PULL_UP
563
  * @retval None
564
  */
565
__STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull)
566
{
567
  MODIFY_REG(GPIOx->ODR, (Pin >> GPIO_PIN_MASK_POS), Pull << (POSITION_VAL(Pin >> GPIO_PIN_MASK_POS)));
568
}
569
 
570
/**
571
  * @brief  Return gpio pull-up or pull-down for a dedicated pin on a dedicated port
572
  * @note   Warning: only one pin can be passed as parameter.
573
  * @rmtoll ODR        ODR         LL_GPIO_GetPinPull
574
  * @param  GPIOx GPIO Port
575
  * @param  Pin This parameter can be one of the following values:
576
  *         @arg @ref LL_GPIO_PIN_0
577
  *         @arg @ref LL_GPIO_PIN_1
578
  *         @arg @ref LL_GPIO_PIN_2
579
  *         @arg @ref LL_GPIO_PIN_3
580
  *         @arg @ref LL_GPIO_PIN_4
581
  *         @arg @ref LL_GPIO_PIN_5
582
  *         @arg @ref LL_GPIO_PIN_6
583
  *         @arg @ref LL_GPIO_PIN_7
584
  *         @arg @ref LL_GPIO_PIN_8
585
  *         @arg @ref LL_GPIO_PIN_9
586
  *         @arg @ref LL_GPIO_PIN_10
587
  *         @arg @ref LL_GPIO_PIN_11
588
  *         @arg @ref LL_GPIO_PIN_12
589
  *         @arg @ref LL_GPIO_PIN_13
590
  *         @arg @ref LL_GPIO_PIN_14
591
  *         @arg @ref LL_GPIO_PIN_15
592
  * @retval Returned value can be one of the following values:
593
  *         @arg @ref LL_GPIO_PULL_DOWN
594
  *         @arg @ref LL_GPIO_PULL_UP
595
  */
596
__STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin)
597
{
598
  return (READ_BIT(GPIOx->ODR, (GPIO_ODR_ODR0 << (POSITION_VAL(Pin >> GPIO_PIN_MASK_POS)))) >> (POSITION_VAL(Pin >> GPIO_PIN_MASK_POS)));
599
}
600
 
601
/**
602
  * @brief  Lock configuration of several pins for a dedicated port.
603
  * @note   When the lock sequence has been applied on a port bit, the
604
  *         value of this port bit can no longer be modified until the
605
  *         next reset.
606
  * @note   Each lock bit freezes a specific configuration register
607
  *         (control and alternate function registers).
608
  * @rmtoll LCKR         LCKK          LL_GPIO_LockPin
609
  * @param  GPIOx GPIO Port
610
  * @param  PinMask This parameter can be a combination of the following values:
611
  *         @arg @ref LL_GPIO_PIN_0
612
  *         @arg @ref LL_GPIO_PIN_1
613
  *         @arg @ref LL_GPIO_PIN_2
614
  *         @arg @ref LL_GPIO_PIN_3
615
  *         @arg @ref LL_GPIO_PIN_4
616
  *         @arg @ref LL_GPIO_PIN_5
617
  *         @arg @ref LL_GPIO_PIN_6
618
  *         @arg @ref LL_GPIO_PIN_7
619
  *         @arg @ref LL_GPIO_PIN_8
620
  *         @arg @ref LL_GPIO_PIN_9
621
  *         @arg @ref LL_GPIO_PIN_10
622
  *         @arg @ref LL_GPIO_PIN_11
623
  *         @arg @ref LL_GPIO_PIN_12
624
  *         @arg @ref LL_GPIO_PIN_13
625
  *         @arg @ref LL_GPIO_PIN_14
626
  *         @arg @ref LL_GPIO_PIN_15
627
  *         @arg @ref LL_GPIO_PIN_ALL
628
  * @retval None
629
  */
630
__STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
631
{
632
  __IO uint32_t temp;
633
  WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | ((PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU));
634
  WRITE_REG(GPIOx->LCKR, ((PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU));
635
  WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | ((PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU));
636
  temp = READ_REG(GPIOx->LCKR);
637
  (void) temp;
638
}
639
 
640
/**
641
  * @brief  Return 1 if all pins passed as parameter, of a dedicated port, are locked. else Return 0.
642
  * @rmtoll LCKR         LCKy          LL_GPIO_IsPinLocked
643
  * @param  GPIOx GPIO Port
644
  * @param  PinMask This parameter can be a combination of the following values:
645
  *         @arg @ref LL_GPIO_PIN_0
646
  *         @arg @ref LL_GPIO_PIN_1
647
  *         @arg @ref LL_GPIO_PIN_2
648
  *         @arg @ref LL_GPIO_PIN_3
649
  *         @arg @ref LL_GPIO_PIN_4
650
  *         @arg @ref LL_GPIO_PIN_5
651
  *         @arg @ref LL_GPIO_PIN_6
652
  *         @arg @ref LL_GPIO_PIN_7
653
  *         @arg @ref LL_GPIO_PIN_8
654
  *         @arg @ref LL_GPIO_PIN_9
655
  *         @arg @ref LL_GPIO_PIN_10
656
  *         @arg @ref LL_GPIO_PIN_11
657
  *         @arg @ref LL_GPIO_PIN_12
658
  *         @arg @ref LL_GPIO_PIN_13
659
  *         @arg @ref LL_GPIO_PIN_14
660
  *         @arg @ref LL_GPIO_PIN_15
661
  *         @arg @ref LL_GPIO_PIN_ALL
662
  * @retval State of bit (1 or 0).
663
  */
664
__STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask)
665
{
666
  return (READ_BIT(GPIOx->LCKR, ((PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU)) == ((PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU));
667
}
668
 
669
/**
670
  * @brief  Return 1 if one of the pin of a dedicated port is locked. else return 0.
671
  * @rmtoll LCKR         LCKK          LL_GPIO_IsAnyPinLocked
672
  * @param  GPIOx GPIO Port
673
  * @retval State of bit (1 or 0).
674
  */
675
__STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx)
676
{
677
  return (READ_BIT(GPIOx->LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK));
678
}
679
 
680
/**
681
  * @}
682
  */
683
 
684
/** @defgroup GPIO_LL_EF_Data_Access Data Access
685
  * @{
686
  */
687
 
688
/**
689
  * @brief  Return full input data register value for a dedicated port.
690
  * @rmtoll IDR          IDy           LL_GPIO_ReadInputPort
691
  * @param  GPIOx GPIO Port
692
  * @retval Input data register value of port
693
  */
694
__STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx)
695
{
696
  return (READ_REG(GPIOx->IDR));
697
}
698
 
699
/**
700
  * @brief  Return if input data level for several pins of dedicated port is high or low.
701
  * @rmtoll IDR          IDy           LL_GPIO_IsInputPinSet
702
  * @param  GPIOx GPIO Port
703
  * @param  PinMask This parameter can be a combination of the following values:
704
  *         @arg @ref LL_GPIO_PIN_0
705
  *         @arg @ref LL_GPIO_PIN_1
706
  *         @arg @ref LL_GPIO_PIN_2
707
  *         @arg @ref LL_GPIO_PIN_3
708
  *         @arg @ref LL_GPIO_PIN_4
709
  *         @arg @ref LL_GPIO_PIN_5
710
  *         @arg @ref LL_GPIO_PIN_6
711
  *         @arg @ref LL_GPIO_PIN_7
712
  *         @arg @ref LL_GPIO_PIN_8
713
  *         @arg @ref LL_GPIO_PIN_9
714
  *         @arg @ref LL_GPIO_PIN_10
715
  *         @arg @ref LL_GPIO_PIN_11
716
  *         @arg @ref LL_GPIO_PIN_12
717
  *         @arg @ref LL_GPIO_PIN_13
718
  *         @arg @ref LL_GPIO_PIN_14
719
  *         @arg @ref LL_GPIO_PIN_15
720
  *         @arg @ref LL_GPIO_PIN_ALL
721
  * @retval State of bit (1 or 0).
722
  */
723
__STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
724
{
725
  return (READ_BIT(GPIOx->IDR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU) == ((PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU));
726
}
727
 
728
/**
729
  * @brief  Write output data register for the port.
730
  * @rmtoll ODR          ODy           LL_GPIO_WriteOutputPort
731
  * @param  GPIOx GPIO Port
732
  * @param  PortValue Level value for each pin of the port
733
  * @retval None
734
  */
735
__STATIC_INLINE void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx, uint32_t PortValue)
736
{
737
  WRITE_REG(GPIOx->ODR, PortValue);
738
}
739
 
740
/**
741
  * @brief  Return full output data register value for a dedicated port.
742
  * @rmtoll ODR          ODy           LL_GPIO_ReadOutputPort
743
  * @param  GPIOx GPIO Port
744
  * @retval Output data register value of port
745
  */
746
__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
747
{
748
  return (uint32_t)(READ_REG(GPIOx->ODR));
749
}
750
 
751
/**
752
  * @brief  Return if input data level for several pins of dedicated port is high or low.
753
  * @rmtoll ODR          ODy           LL_GPIO_IsOutputPinSet
754
  * @param  GPIOx GPIO Port
755
  * @param  PinMask This parameter can be a combination of the following values:
756
  *         @arg @ref LL_GPIO_PIN_0
757
  *         @arg @ref LL_GPIO_PIN_1
758
  *         @arg @ref LL_GPIO_PIN_2
759
  *         @arg @ref LL_GPIO_PIN_3
760
  *         @arg @ref LL_GPIO_PIN_4
761
  *         @arg @ref LL_GPIO_PIN_5
762
  *         @arg @ref LL_GPIO_PIN_6
763
  *         @arg @ref LL_GPIO_PIN_7
764
  *         @arg @ref LL_GPIO_PIN_8
765
  *         @arg @ref LL_GPIO_PIN_9
766
  *         @arg @ref LL_GPIO_PIN_10
767
  *         @arg @ref LL_GPIO_PIN_11
768
  *         @arg @ref LL_GPIO_PIN_12
769
  *         @arg @ref LL_GPIO_PIN_13
770
  *         @arg @ref LL_GPIO_PIN_14
771
  *         @arg @ref LL_GPIO_PIN_15
772
  *         @arg @ref LL_GPIO_PIN_ALL
773
  * @retval State of bit (1 or 0).
774
  */
775
__STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
776
{
777
  return (READ_BIT(GPIOx->ODR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU) == ((PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU));
778
}
779
 
780
/**
781
  * @brief  Set several pins to high level on dedicated gpio port.
782
  * @rmtoll BSRR         BSy           LL_GPIO_SetOutputPin
783
  * @param  GPIOx GPIO Port
784
  * @param  PinMask This parameter can be a combination of the following values:
785
  *         @arg @ref LL_GPIO_PIN_0
786
  *         @arg @ref LL_GPIO_PIN_1
787
  *         @arg @ref LL_GPIO_PIN_2
788
  *         @arg @ref LL_GPIO_PIN_3
789
  *         @arg @ref LL_GPIO_PIN_4
790
  *         @arg @ref LL_GPIO_PIN_5
791
  *         @arg @ref LL_GPIO_PIN_6
792
  *         @arg @ref LL_GPIO_PIN_7
793
  *         @arg @ref LL_GPIO_PIN_8
794
  *         @arg @ref LL_GPIO_PIN_9
795
  *         @arg @ref LL_GPIO_PIN_10
796
  *         @arg @ref LL_GPIO_PIN_11
797
  *         @arg @ref LL_GPIO_PIN_12
798
  *         @arg @ref LL_GPIO_PIN_13
799
  *         @arg @ref LL_GPIO_PIN_14
800
  *         @arg @ref LL_GPIO_PIN_15
801
  *         @arg @ref LL_GPIO_PIN_ALL
802
  * @retval None
803
  */
804
__STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
805
{
806
  WRITE_REG(GPIOx->BSRR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU);
807
}
808
 
809
/**
810
  * @brief  Set several pins to low level on dedicated gpio port.
811
  * @rmtoll BRR          BRy           LL_GPIO_ResetOutputPin
812
  * @param  GPIOx GPIO Port
813
  * @param  PinMask This parameter can be a combination of the following values:
814
  *         @arg @ref LL_GPIO_PIN_0
815
  *         @arg @ref LL_GPIO_PIN_1
816
  *         @arg @ref LL_GPIO_PIN_2
817
  *         @arg @ref LL_GPIO_PIN_3
818
  *         @arg @ref LL_GPIO_PIN_4
819
  *         @arg @ref LL_GPIO_PIN_5
820
  *         @arg @ref LL_GPIO_PIN_6
821
  *         @arg @ref LL_GPIO_PIN_7
822
  *         @arg @ref LL_GPIO_PIN_8
823
  *         @arg @ref LL_GPIO_PIN_9
824
  *         @arg @ref LL_GPIO_PIN_10
825
  *         @arg @ref LL_GPIO_PIN_11
826
  *         @arg @ref LL_GPIO_PIN_12
827
  *         @arg @ref LL_GPIO_PIN_13
828
  *         @arg @ref LL_GPIO_PIN_14
829
  *         @arg @ref LL_GPIO_PIN_15
830
  *         @arg @ref LL_GPIO_PIN_ALL
831
  * @retval None
832
  */
833
__STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
834
{
835
  WRITE_REG(GPIOx->BRR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU);
836
}
837
 
838
/**
839
  * @brief  Toggle data value for several pin of dedicated port.
840
  * @rmtoll ODR          ODy           LL_GPIO_TogglePin
841
  * @param  GPIOx GPIO Port
842
  * @param  PinMask This parameter can be a combination of the following values:
843
  *         @arg @ref LL_GPIO_PIN_0
844
  *         @arg @ref LL_GPIO_PIN_1
845
  *         @arg @ref LL_GPIO_PIN_2
846
  *         @arg @ref LL_GPIO_PIN_3
847
  *         @arg @ref LL_GPIO_PIN_4
848
  *         @arg @ref LL_GPIO_PIN_5
849
  *         @arg @ref LL_GPIO_PIN_6
850
  *         @arg @ref LL_GPIO_PIN_7
851
  *         @arg @ref LL_GPIO_PIN_8
852
  *         @arg @ref LL_GPIO_PIN_9
853
  *         @arg @ref LL_GPIO_PIN_10
854
  *         @arg @ref LL_GPIO_PIN_11
855
  *         @arg @ref LL_GPIO_PIN_12
856
  *         @arg @ref LL_GPIO_PIN_13
857
  *         @arg @ref LL_GPIO_PIN_14
858
  *         @arg @ref LL_GPIO_PIN_15
859
  *         @arg @ref LL_GPIO_PIN_ALL
860
  * @retval None
861
  */
862
__STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
863
{
9 mjames 864
  uint32_t odr = READ_REG(GPIOx->ODR);
865
  uint32_t pinmask = ((PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU);
866
  WRITE_REG(GPIOx->BSRR, ((odr & pinmask) << 16u) | (~odr & pinmask));
2 mjames 867
}
868
 
869
/**
870
  * @}
871
  */
872
 
873
/** @defgroup GPIO_AF_REMAPPING Alternate Function Remapping
874
  * @brief This section propose definition to remap the alternate function to some other port/pins.
875
  * @{
876
  */
877
 
878
/**
879
  * @brief  Enable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI.
880
  * @rmtoll MAPR          SPI1_REMAP           LL_GPIO_AF_EnableRemap_SPI1
881
  * @note   ENABLE: Remap (NSS/PA15, SCK/PB3, MISO/PB4, MOSI/PB5)
882
  * @retval None
883
  */
884
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_SPI1(void)
885
{
9 mjames 886
  SET_BIT(AFIO->MAPR, AFIO_MAPR_SPI1_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 887
}
888
 
889
/**
890
  * @brief Disable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI.
891
  * @rmtoll MAPR          SPI1_REMAP           LL_GPIO_AF_DisableRemap_SPI1
892
  * @note  DISABLE: No remap (NSS/PA4,  SCK/PA5, MISO/PA6, MOSI/PA7)
893
  * @retval None
894
  */
895
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_SPI1(void)
896
{
9 mjames 897
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_SPI1_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 898
}
899
 
900
/**
901
  * @brief  Check if SPI1 has been remaped or not
902
  * @rmtoll MAPR         SPI1_REMAP         LL_GPIO_AF_IsEnabledRemap_SPI1
903
  * @retval State of bit (1 or 0).
904
  */
905
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_SPI1(void)
906
{
907
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_SPI1_REMAP) == (AFIO_MAPR_SPI1_REMAP));
908
}
909
 
910
/**
911
  * @brief Enable the remapping of I2C1 alternate function SCL and SDA.
912
  * @rmtoll MAPR          I2C1_REMAP           LL_GPIO_AF_EnableRemap_I2C1
913
  * @note  ENABLE: Remap     (SCL/PB8, SDA/PB9)
914
  * @retval None
915
  */
916
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_I2C1(void)
917
{
9 mjames 918
  SET_BIT(AFIO->MAPR, AFIO_MAPR_I2C1_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 919
}
920
 
921
/**
922
  * @brief Disable the remapping of I2C1 alternate function SCL and SDA.
923
  * @rmtoll MAPR          I2C1_REMAP           LL_GPIO_AF_DisableRemap_I2C1
924
  * @note  DISABLE: No remap (SCL/PB6, SDA/PB7)
925
  * @retval None
926
  */
927
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_I2C1(void)
928
{
9 mjames 929
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_I2C1_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 930
}
931
 
932
/**
933
  * @brief  Check if I2C1 has been remaped or not
934
  * @rmtoll MAPR         I2C1_REMAP         LL_GPIO_AF_IsEnabledRemap_I2C1
935
  * @retval State of bit (1 or 0).
936
  */
937
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_I2C1(void)
938
{
939
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_I2C1_REMAP) == (AFIO_MAPR_I2C1_REMAP));
940
}
941
 
942
/**
943
  * @brief Enable the remapping of USART1 alternate function TX and RX.
944
  * @rmtoll MAPR          USART1_REMAP           LL_GPIO_AF_EnableRemap_USART1
945
  * @note  ENABLE: Remap     (TX/PB6, RX/PB7)
946
  * @retval None
947
  */
948
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_USART1(void)
949
{
9 mjames 950
  SET_BIT(AFIO->MAPR, AFIO_MAPR_USART1_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 951
}
952
 
953
/**
954
  * @brief Disable the remapping of USART1 alternate function TX and RX.
955
  * @rmtoll MAPR          USART1_REMAP           LL_GPIO_AF_DisableRemap_USART1
956
  * @note  DISABLE: No remap (TX/PA9, RX/PA10)
957
  * @retval None
958
  */
959
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_USART1(void)
960
{
9 mjames 961
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_USART1_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 962
}
963
 
964
/**
965
  * @brief  Check if USART1 has been remaped or not
966
  * @rmtoll MAPR         USART1_REMAP         LL_GPIO_AF_IsEnabledRemap_USART1
967
  * @retval State of bit (1 or 0).
968
  */
969
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_USART1(void)
970
{
971
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_USART1_REMAP) == (AFIO_MAPR_USART1_REMAP));
972
}
973
 
974
/**
975
  * @brief Enable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX.
976
  * @rmtoll MAPR          USART2_REMAP           LL_GPIO_AF_EnableRemap_USART2
977
  * @note  ENABLE: Remap     (CTS/PD3, RTS/PD4, TX/PD5, RX/PD6, CK/PD7)
978
  * @retval None
979
  */
980
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_USART2(void)
981
{
9 mjames 982
  SET_BIT(AFIO->MAPR, AFIO_MAPR_USART2_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 983
}
984
 
985
/**
986
  * @brief Disable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX.
987
  * @rmtoll MAPR          USART2_REMAP           LL_GPIO_AF_DisableRemap_USART2
988
  * @note  DISABLE: No remap (CTS/PA0, RTS/PA1, TX/PA2, RX/PA3, CK/PA4)
989
  * @retval None
990
  */
991
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_USART2(void)
992
{
9 mjames 993
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_USART2_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 994
}
995
 
996
/**
997
  * @brief  Check if USART2 has been remaped or not
998
  * @rmtoll MAPR         USART2_REMAP         LL_GPIO_AF_IsEnabledRemap_USART2
999
  * @retval State of bit (1 or 0).
1000
  */
1001
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_USART2(void)
1002
{
1003
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_USART2_REMAP) == (AFIO_MAPR_USART2_REMAP));
1004
}
1005
 
1006
#if defined (AFIO_MAPR_USART3_REMAP)
1007
/**
1008
  * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.
1009
  * @rmtoll MAPR          USART3_REMAP           LL_GPIO_AF_EnableRemap_USART3
1010
  * @note  ENABLE: Full remap     (TX/PD8,  RX/PD9,  CK/PD10, CTS/PD11, RTS/PD12)
1011
  * @retval None
1012
  */
1013
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_USART3(void)
1014
{
9 mjames 1015
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_USART3_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_USART3_REMAP_FULLREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1016
}
1017
 
1018
/**
1019
  * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.
1020
  * @rmtoll MAPR          USART3_REMAP           LL_GPIO_AF_RemapPartial_USART3
1021
  * @note  PARTIAL: Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14)
1022
  * @retval None
1023
  */
1024
__STATIC_INLINE void LL_GPIO_AF_RemapPartial_USART3(void)
1025
{
9 mjames 1026
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_USART3_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_USART3_REMAP_PARTIALREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1027
}
1028
 
1029
/**
1030
  * @brief Disable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.
1031
  * @rmtoll MAPR          USART3_REMAP           LL_GPIO_AF_DisableRemap_USART3
1032
  * @note  DISABLE: No remap      (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14)
1033
  * @retval None
1034
  */
1035
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_USART3(void)
1036
{
9 mjames 1037
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_USART3_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_USART3_REMAP_NOREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1038
}
1039
#endif
1040
 
1041
/**
1042
  * @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)
1043
  * @rmtoll MAPR          TIM1_REMAP           LL_GPIO_AF_EnableRemap_TIM1
1044
  * @note  ENABLE: Full remap     (ETR/PE7,  CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8,  CH2N/PE10, CH3N/PE12)
1045
  * @retval None
1046
  */
1047
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM1(void)
1048
{
9 mjames 1049
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM1_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_TIM1_REMAP_FULLREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1050
}
1051
 
1052
/**
1053
  * @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)
1054
  * @rmtoll MAPR          TIM1_REMAP           LL_GPIO_AF_RemapPartial_TIM1
1055
  * @note  PARTIAL: Partial remap (ETR/PA12, CH1/PA8, CH2/PA9,  CH3/PA10, CH4/PA11, BKIN/PA6,  CH1N/PA7,  CH2N/PB0,  CH3N/PB1)
1056
  * @retval None
1057
  */
1058
__STATIC_INLINE void LL_GPIO_AF_RemapPartial_TIM1(void)
1059
{
9 mjames 1060
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM1_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_TIM1_REMAP_PARTIALREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1061
}
1062
 
1063
/**
1064
  * @brief Disable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)
1065
  * @rmtoll MAPR          TIM1_REMAP           LL_GPIO_AF_DisableRemap_TIM1
1066
  * @note  DISABLE: No remap      (ETR/PA12, CH1/PA8, CH2/PA9,  CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15)
1067
  * @retval None
1068
  */
1069
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM1(void)
1070
{
9 mjames 1071
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM1_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_TIM1_REMAP_NOREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1072
}
1073
 
1074
/**
1075
  * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)
1076
  * @rmtoll MAPR          TIM2_REMAP           LL_GPIO_AF_EnableRemap_TIM2
1077
  * @note  ENABLE: Full remap       (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11)
1078
  * @retval None
1079
  */
1080
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM2(void)
1081
{
9 mjames 1082
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM2_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_TIM2_REMAP_FULLREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1083
}
1084
 
1085
/**
1086
  * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)
1087
  * @rmtoll MAPR          TIM2_REMAP           LL_GPIO_AF_RemapPartial2_TIM2
1088
  * @note  PARTIAL_2: Partial remap (CH1/ETR/PA0,  CH2/PA1, CH3/PB10, CH4/PB11)
1089
  * @retval None
1090
  */
1091
__STATIC_INLINE void LL_GPIO_AF_RemapPartial2_TIM2(void)
1092
{
9 mjames 1093
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM2_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2 | AFIO_MAPR_SWJ_CFG));
2 mjames 1094
}
1095
 
1096
/**
1097
  * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)
1098
  * @rmtoll MAPR          TIM2_REMAP           LL_GPIO_AF_RemapPartial1_TIM2
1099
  * @note  PARTIAL_1: Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2,  CH4/PA3)
1100
  * @retval None
1101
  */
1102
__STATIC_INLINE void LL_GPIO_AF_RemapPartial1_TIM2(void)
1103
{
9 mjames 1104
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM2_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1 | AFIO_MAPR_SWJ_CFG));
2 mjames 1105
}
1106
 
1107
/**
1108
  * @brief Disable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)
1109
  * @rmtoll MAPR          TIM2_REMAP           LL_GPIO_AF_DisableRemap_TIM2
1110
  * @note  DISABLE: No remap        (CH1/ETR/PA0,  CH2/PA1, CH3/PA2,  CH4/PA3)
1111
  * @retval None
1112
  */
1113
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM2(void)
1114
{
9 mjames 1115
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM2_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_TIM2_REMAP_NOREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1116
}
1117
 
1118
/**
1119
  * @brief Enable the remapping of TIM3 alternate function channels 1 to 4
1120
  * @rmtoll MAPR          TIM3_REMAP           LL_GPIO_AF_EnableRemap_TIM3
1121
  * @note  ENABLE: Full remap     (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)
1122
  * @note  TIM3_ETR on PE0 is not re-mapped.
1123
  * @retval None
1124
  */
1125
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM3(void)
1126
{
9 mjames 1127
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM3_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_TIM3_REMAP_FULLREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1128
}
1129
 
1130
/**
1131
  * @brief Enable the remapping of TIM3 alternate function channels 1 to 4
1132
  * @rmtoll MAPR          TIM3_REMAP           LL_GPIO_AF_RemapPartial_TIM3
1133
  * @note  PARTIAL: Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1)
1134
  * @note  TIM3_ETR on PE0 is not re-mapped.
1135
  * @retval None
1136
  */
1137
__STATIC_INLINE void LL_GPIO_AF_RemapPartial_TIM3(void)
1138
{
9 mjames 1139
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM3_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_TIM3_REMAP_PARTIALREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1140
}
1141
 
1142
/**
1143
  * @brief Disable the remapping of TIM3 alternate function channels 1 to 4
1144
  * @rmtoll MAPR          TIM3_REMAP           LL_GPIO_AF_DisableRemap_TIM3
1145
  * @note  DISABLE: No remap      (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1)
1146
  * @note  TIM3_ETR on PE0 is not re-mapped.
1147
  * @retval None
1148
  */
1149
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM3(void)
1150
{
9 mjames 1151
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM3_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_TIM3_REMAP_NOREMAP | AFIO_MAPR_SWJ_CFG));
2 mjames 1152
}
1153
 
1154
#if defined(AFIO_MAPR_TIM4_REMAP)
1155
/**
1156
  * @brief Enable the remapping of TIM4 alternate function channels 1 to 4.
1157
  * @rmtoll MAPR          TIM4_REMAP           LL_GPIO_AF_EnableRemap_TIM4
1158
  * @note  ENABLE: Full remap (TIM4_CH1/PD12, TIM4_CH2/PD13, TIM4_CH3/PD14, TIM4_CH4/PD15)
1159
  * @note  TIM4_ETR on PE0 is not re-mapped.
1160
  * @retval None
1161
  */
1162
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM4(void)
1163
{
9 mjames 1164
  SET_BIT(AFIO->MAPR, AFIO_MAPR_TIM4_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1165
}
1166
/**
1167
  * @brief Disable the remapping of TIM4 alternate function channels 1 to 4.
1168
  * @rmtoll MAPR          TIM4_REMAP           LL_GPIO_AF_DisableRemap_TIM4
1169
  * @note  DISABLE: No remap  (TIM4_CH1/PB6,  TIM4_CH2/PB7,  TIM4_CH3/PB8,  TIM4_CH4/PB9)
1170
  * @note  TIM4_ETR on PE0 is not re-mapped.
1171
  * @retval None
1172
  */
1173
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM4(void)
1174
{
9 mjames 1175
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM4_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1176
}
1177
 
1178
/**
1179
  * @brief  Check if TIM4 has been remaped or not
1180
  * @rmtoll MAPR         TIM4_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM4
1181
  * @retval State of bit (1 or 0).
1182
  */
1183
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM4(void)
1184
{
1185
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_TIM4_REMAP) == (AFIO_MAPR_TIM4_REMAP));
1186
}
1187
#endif
1188
 
1189
#if defined(AFIO_MAPR_CAN_REMAP_REMAP1)
1190
 
1191
/**
1192
  * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.
1193
  * @rmtoll MAPR          CAN_REMAP           LL_GPIO_AF_RemapPartial1_CAN1
1194
  * @note  CASE 1: CAN_RX mapped to PA11, CAN_TX mapped to PA12
1195
  * @retval None
1196
  */
1197
__STATIC_INLINE void LL_GPIO_AF_RemapPartial1_CAN1(void)
1198
{
9 mjames 1199
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_CAN_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_CAN_REMAP_REMAP1 | AFIO_MAPR_SWJ_CFG));
2 mjames 1200
}
1201
 
1202
/**
1203
  * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.
1204
  * @rmtoll MAPR          CAN_REMAP           LL_GPIO_AF_RemapPartial2_CAN1
1205
  * @note  CASE 2: CAN_RX mapped to PB8,  CAN_TX mapped to PB9 (not available on 36-pin package)
1206
  * @retval None
1207
  */
1208
__STATIC_INLINE void LL_GPIO_AF_RemapPartial2_CAN1(void)
1209
{
9 mjames 1210
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_CAN_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_CAN_REMAP_REMAP2 | AFIO_MAPR_SWJ_CFG));
2 mjames 1211
}
1212
 
1213
/**
1214
  * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.
1215
  * @rmtoll MAPR          CAN_REMAP           LL_GPIO_AF_RemapPartial3_CAN1
1216
  * @note  CASE 3: CAN_RX mapped to PD0,  CAN_TX mapped to PD1
1217
  * @retval None
1218
  */
1219
__STATIC_INLINE void LL_GPIO_AF_RemapPartial3_CAN1(void)
1220
{
9 mjames 1221
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_CAN_REMAP | AFIO_MAPR_SWJ_CFG), (AFIO_MAPR_CAN_REMAP_REMAP3 | AFIO_MAPR_SWJ_CFG));
2 mjames 1222
}
1223
#endif
1224
 
1225
/**
1226
  * @brief Enable the remapping of PD0 and PD1. When the HSE oscillator is not used
1227
  *        (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and
1228
  *        OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available
1229
  *        on 100-pin and 144-pin packages, no need for remapping).
1230
  * @rmtoll MAPR          PD01_REMAP           LL_GPIO_AF_EnableRemap_PD01
1231
  * @note  ENABLE: PD0 remapped on OSC_IN, PD1 remapped on OSC_OUT.
1232
  * @retval None
1233
  */
1234
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_PD01(void)
1235
{
9 mjames 1236
  SET_BIT(AFIO->MAPR, AFIO_MAPR_PD01_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1237
}
1238
 
1239
/**
1240
  * @brief Disable the remapping of PD0 and PD1. When the HSE oscillator is not used
1241
  *        (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and
1242
  *        OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available
1243
  *        on 100-pin and 144-pin packages, no need for remapping).
1244
  * @rmtoll MAPR          PD01_REMAP           LL_GPIO_AF_DisableRemap_PD01
1245
  * @note  DISABLE: No remapping of PD0 and PD1
1246
  * @retval None
1247
  */
1248
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_PD01(void)
1249
{
9 mjames 1250
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_PD01_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1251
}
1252
 
1253
/**
1254
  * @brief  Check if PD01 has been remaped or not
1255
  * @rmtoll MAPR         PD01_REMAP         LL_GPIO_AF_IsEnabledRemap_PD01
1256
  * @retval State of bit (1 or 0).
1257
  */
1258
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_PD01(void)
1259
{
1260
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_PD01_REMAP) == (AFIO_MAPR_PD01_REMAP));
1261
}
1262
 
1263
#if defined(AFIO_MAPR_TIM5CH4_IREMAP)
1264
/**
1265
  * @brief Enable the remapping of TIM5CH4.
1266
  * @rmtoll MAPR          TIM5CH4_IREMAP           LL_GPIO_AF_EnableRemap_TIM5CH4
1267
  * @note  ENABLE: LSI internal clock is connected to TIM5_CH4 input for calibration purpose.
1268
  * @note  This function is available only in high density value line devices.
1269
  * @retval None
1270
  */
1271
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM5CH4(void)
1272
{
9 mjames 1273
  SET_BIT(AFIO->MAPR, AFIO_MAPR_TIM5CH4_IREMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1274
}
1275
 
1276
/**
1277
  * @brief Disable the remapping of TIM5CH4.
1278
  * @rmtoll MAPR          TIM5CH4_IREMAP           LL_GPIO_AF_DisableRemap_TIM5CH4
1279
  * @note  DISABLE: TIM5_CH4 is connected to PA3
1280
  * @note  This function is available only in high density value line devices.
1281
  * @retval None
1282
  */
1283
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM5CH4(void)
1284
{
9 mjames 1285
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM5CH4_IREMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1286
}
1287
 
1288
/**
1289
  * @brief  Check if TIM5CH4 has been remaped or not
1290
  * @rmtoll MAPR         TIM5CH4_IREMAP         LL_GPIO_AF_IsEnabledRemap_TIM5CH4
1291
  * @retval State of bit (1 or 0).
1292
  */
1293
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM5CH4(void)
1294
{
1295
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_TIM5CH4_IREMAP) == (AFIO_MAPR_TIM5CH4_IREMAP));
1296
}
1297
#endif
1298
 
1299
#if defined(AFIO_MAPR_ETH_REMAP)
1300
/**
1301
  * @brief Enable the remapping of Ethernet MAC connections with the PHY.
1302
  * @rmtoll MAPR          ETH_REMAP           LL_GPIO_AF_EnableRemap_ETH
1303
  * @note  ENABLE: Remap     (RX_DV-CRS_DV/PD8, RXD0/PD9, RXD1/PD10, RXD2/PD11, RXD3/PD12)
1304
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1305
  * @retval None
1306
  */
1307
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_ETH(void)
1308
{
9 mjames 1309
  SET_BIT(AFIO->MAPR, AFIO_MAPR_ETH_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1310
}
1311
 
1312
/**
1313
  * @brief Disable the remapping of Ethernet MAC connections with the PHY.
1314
  * @rmtoll MAPR          ETH_REMAP           LL_GPIO_AF_DisableRemap_ETH
1315
  * @note  DISABLE: No remap (RX_DV-CRS_DV/PA7, RXD0/PC4, RXD1/PC5,  RXD2/PB0,  RXD3/PB1)
1316
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1317
  * @retval None
1318
  */
1319
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_ETH(void)
1320
{
9 mjames 1321
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_ETH_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1322
}
1323
 
1324
/**
1325
  * @brief  Check if ETH has been remaped or not
1326
  * @rmtoll MAPR         ETH_REMAP         LL_GPIO_AF_IsEnabledRemap_ETH
1327
  * @retval State of bit (1 or 0).
1328
  */
1329
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_ETH(void)
1330
{
1331
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_ETH_REMAP) == (AFIO_MAPR_ETH_REMAP));
1332
}
1333
#endif
1334
 
1335
#if defined(AFIO_MAPR_CAN2_REMAP)
1336
 
1337
/**
1338
  * @brief Enable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX.
1339
  * @rmtoll MAPR          CAN2_REMAP           LL_GPIO_AF_EnableRemap_CAN2
1340
  * @note  ENABLE: Remap     (CAN2_RX/PB5,  CAN2_TX/PB6)
1341
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1342
  * @retval None
1343
  */
1344
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_CAN2(void)
1345
{
9 mjames 1346
  SET_BIT(AFIO->MAPR, AFIO_MAPR_CAN2_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1347
}
1348
/**
1349
  * @brief Disable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX.
1350
  * @rmtoll MAPR          CAN2_REMAP           LL_GPIO_AF_DisableRemap_CAN2
1351
  * @note  DISABLE: No remap (CAN2_RX/PB12, CAN2_TX/PB13)
1352
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1353
  * @retval None
1354
  */
1355
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_CAN2(void)
1356
{
9 mjames 1357
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_CAN2_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1358
}
1359
 
1360
/**
1361
  * @brief  Check if CAN2 has been remaped or not
1362
  * @rmtoll MAPR         CAN2_REMAP         LL_GPIO_AF_IsEnabledRemap_CAN2
1363
  * @retval State of bit (1 or 0).
1364
  */
1365
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_CAN2(void)
1366
{
1367
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_CAN2_REMAP) == (AFIO_MAPR_CAN2_REMAP));
1368
}
1369
#endif
1370
 
1371
#if defined(AFIO_MAPR_MII_RMII_SEL)
1372
/**
1373
  * @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY.
1374
  * @rmtoll MAPR          MII_RMII_SEL           LL_GPIO_AF_Select_ETH_RMII
1375
  * @note  ETH_RMII: Configure Ethernet MAC for connection with an RMII PHY
1376
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1377
  * @retval None
1378
  */
1379
__STATIC_INLINE void LL_GPIO_AF_Select_ETH_RMII(void)
1380
{
9 mjames 1381
  SET_BIT(AFIO->MAPR, AFIO_MAPR_MII_RMII_SEL | AFIO_MAPR_SWJ_CFG);
2 mjames 1382
}
1383
 
1384
/**
1385
  * @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY.
1386
  * @rmtoll MAPR          MII_RMII_SEL           LL_GPIO_AF_Select_ETH_MII
1387
  * @note  ETH_MII: Configure Ethernet MAC for connection with an MII PHY
1388
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1389
  * @retval None
1390
  */
1391
__STATIC_INLINE void LL_GPIO_AF_Select_ETH_MII(void)
1392
{
9 mjames 1393
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_MII_RMII_SEL | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1394
}
1395
#endif
1396
 
1397
#if defined(AFIO_MAPR_ADC1_ETRGINJ_REMAP)
1398
/**
1399
  * @brief Enable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion).
1400
  * @rmtoll MAPR          ADC1_ETRGINJ_REMAP           LL_GPIO_AF_EnableRemap_ADC1_ETRGINJ
1401
  * @note  ENABLE: ADC1 External Event injected conversion is connected to TIM8 Channel4.
1402
  * @retval None
1403
  */
1404
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_ADC1_ETRGINJ(void)
1405
{
9 mjames 1406
  SET_BIT(AFIO->MAPR, AFIO_MAPR_ADC1_ETRGINJ_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1407
}
1408
 
1409
/**
1410
  * @brief Disable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion).
1411
  * @rmtoll MAPR          ADC1_ETRGINJ_REMAP           LL_GPIO_AF_DisableRemap_ADC1_ETRGINJ
1412
  * @note  DISABLE: ADC1 External trigger injected conversion is connected to EXTI15
1413
  * @retval None
1414
  */
1415
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_ADC1_ETRGINJ(void)
1416
{
9 mjames 1417
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_ADC1_ETRGINJ_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1418
}
1419
 
1420
/**
1421
  * @brief  Check if ADC1_ETRGINJ has been remaped or not
1422
  * @rmtoll MAPR         ADC1_ETRGINJ_REMAP         LL_GPIO_AF_IsEnabledRemap_ADC1_ETRGINJ
1423
  * @retval State of bit (1 or 0).
1424
  */
1425
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_ADC1_ETRGINJ(void)
1426
{
1427
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_ADC1_ETRGINJ_REMAP) == (AFIO_MAPR_ADC1_ETRGINJ_REMAP));
1428
}
1429
#endif
1430
 
1431
#if defined(AFIO_MAPR_ADC1_ETRGREG_REMAP)
1432
/**
1433
  * @brief Enable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion).
1434
  * @rmtoll MAPR          ADC1_ETRGREG_REMAP           LL_GPIO_AF_EnableRemap_ADC1_ETRGREG
1435
  * @note  ENABLE: ADC1 External Event regular conversion is connected to TIM8 TRG0.
1436
  * @retval None
1437
  */
1438
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_ADC1_ETRGREG(void)
1439
{
9 mjames 1440
  SET_BIT(AFIO->MAPR, AFIO_MAPR_ADC1_ETRGREG_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1441
}
1442
 
1443
/**
1444
  * @brief Disable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion).
1445
  * @rmtoll MAPR          ADC1_ETRGREG_REMAP           LL_GPIO_AF_DisableRemap_ADC1_ETRGREG
1446
  * @note  DISABLE: ADC1 External trigger regular conversion is connected to EXTI11
1447
  * @retval None
1448
  */
1449
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_ADC1_ETRGREG(void)
1450
{
9 mjames 1451
   MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_ADC1_ETRGREG_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1452
}
1453
 
1454
/**
1455
  * @brief  Check if ADC1_ETRGREG has been remaped or not
1456
  * @rmtoll MAPR         ADC1_ETRGREG_REMAP         LL_GPIO_AF_IsEnabledRemap_ADC1_ETRGREG
1457
  * @retval State of bit (1 or 0).
1458
  */
1459
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_ADC1_ETRGREG(void)
1460
{
1461
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_ADC1_ETRGREG_REMAP) == (AFIO_MAPR_ADC1_ETRGREG_REMAP));
1462
}
1463
#endif
1464
 
1465
#if defined(AFIO_MAPR_ADC2_ETRGINJ_REMAP)
1466
 
1467
/**
1468
  * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion).
1469
  * @rmtoll MAPR          ADC2_ETRGINJ_REMAP           LL_GPIO_AF_EnableRemap_ADC2_ETRGINJ
1470
  * @note  ENABLE: ADC2 External Event injected conversion is connected to TIM8 Channel4.
1471
  * @retval None
1472
  */
1473
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_ADC2_ETRGINJ(void)
1474
{
9 mjames 1475
  SET_BIT(AFIO->MAPR, AFIO_MAPR_ADC2_ETRGINJ_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1476
}
1477
 
1478
/**
1479
  * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion).
1480
  * @rmtoll MAPR          ADC2_ETRGINJ_REMAP           LL_GPIO_AF_DisableRemap_ADC2_ETRGINJ
1481
  * @note  DISABLE: ADC2 External trigger injected conversion is connected to EXTI15
1482
  * @retval None
1483
  */
1484
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_ADC2_ETRGINJ(void)
1485
{
9 mjames 1486
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_ADC2_ETRGINJ_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1487
}
1488
 
1489
/**
1490
  * @brief  Check if ADC2_ETRGINJ has been remaped or not
1491
  * @rmtoll MAPR         ADC2_ETRGINJ_REMAP         LL_GPIO_AF_IsEnabledRemap_ADC2_ETRGINJ
1492
  * @retval State of bit (1 or 0).
1493
  */
1494
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_ADC2_ETRGINJ(void)
1495
{
1496
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_ADC2_ETRGINJ_REMAP) == (AFIO_MAPR_ADC2_ETRGINJ_REMAP));
1497
}
1498
#endif
1499
 
1500
#if defined (AFIO_MAPR_ADC2_ETRGREG_REMAP)
1501
 
1502
/**
1503
  * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).
1504
  * @rmtoll MAPR          ADC2_ETRGREG_REMAP           LL_GPIO_AF_EnableRemap_ADC2_ETRGREG
1505
  * @note  ENABLE: ADC2 External Event regular conversion is connected to TIM8 TRG0.
1506
  * @retval None
1507
  */
1508
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_ADC2_ETRGREG(void)
1509
{
9 mjames 1510
  SET_BIT(AFIO->MAPR, AFIO_MAPR_ADC2_ETRGREG_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1511
}
1512
 
1513
/**
1514
  * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).
1515
  * @rmtoll MAPR          ADC2_ETRGREG_REMAP           LL_GPIO_AF_DisableRemap_ADC2_ETRGREG
1516
  * @note  DISABLE: ADC2 External trigger regular conversion is connected to EXTI11
1517
  * @retval None
1518
  */
1519
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_ADC2_ETRGREG(void)
1520
{
9 mjames 1521
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_ADC2_ETRGREG_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1522
}
1523
 
1524
/**
1525
  * @brief  Check if ADC2_ETRGREG has been remaped or not
1526
  * @rmtoll MAPR         ADC2_ETRGREG_REMAP         LL_GPIO_AF_IsEnabledRemap_ADC2_ETRGREG
1527
  * @retval State of bit (1 or 0).
1528
  */
1529
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_ADC2_ETRGREG(void)
1530
{
1531
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_ADC2_ETRGREG_REMAP) == (AFIO_MAPR_ADC2_ETRGREG_REMAP));
1532
}
1533
#endif
1534
 
1535
/**
1536
  * @brief Enable the Serial wire JTAG configuration
1537
  * @rmtoll MAPR          SWJ_CFG           LL_GPIO_AF_EnableRemap_SWJ
1538
  * @note  ENABLE: Full SWJ (JTAG-DP + SW-DP): Reset State
1539
  * @retval None
1540
  */
1541
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_SWJ(void)
1542
{
1543
  CLEAR_BIT(AFIO->MAPR,AFIO_MAPR_SWJ_CFG);
1544
  SET_BIT(AFIO->MAPR, AFIO_MAPR_SWJ_CFG_RESET);
1545
}
1546
 
1547
/**
1548
  * @brief Enable the Serial wire JTAG configuration
1549
  * @rmtoll MAPR          SWJ_CFG           LL_GPIO_AF_Remap_SWJ_NONJTRST
1550
  * @note  NONJTRST: Full SWJ (JTAG-DP + SW-DP) but without NJTRST
1551
  * @retval None
1552
  */
1553
__STATIC_INLINE void LL_GPIO_AF_Remap_SWJ_NONJTRST(void)
1554
{
1555
  CLEAR_BIT(AFIO->MAPR,AFIO_MAPR_SWJ_CFG);
1556
  SET_BIT(AFIO->MAPR, AFIO_MAPR_SWJ_CFG_NOJNTRST);
1557
}
1558
 
1559
/**
1560
  * @brief Enable the Serial wire JTAG configuration
1561
  * @rmtoll MAPR          SWJ_CFG           LL_GPIO_AF_Remap_SWJ_NOJTAG
1562
  * @note  NOJTAG: JTAG-DP Disabled and SW-DP Enabled
1563
  * @retval None
1564
  */
1565
__STATIC_INLINE void LL_GPIO_AF_Remap_SWJ_NOJTAG(void)
1566
{
1567
  CLEAR_BIT(AFIO->MAPR,AFIO_MAPR_SWJ_CFG);
1568
  SET_BIT(AFIO->MAPR, AFIO_MAPR_SWJ_CFG_JTAGDISABLE);
1569
}
1570
 
1571
/**
1572
  * @brief Disable the Serial wire JTAG configuration
1573
  * @rmtoll MAPR          SWJ_CFG           LL_GPIO_AF_DisableRemap_SWJ
1574
  * @note  DISABLE: JTAG-DP Disabled and SW-DP Disabled
1575
  * @retval None
1576
  */
1577
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_SWJ(void)
1578
{
1579
  CLEAR_BIT(AFIO->MAPR,AFIO_MAPR_SWJ_CFG);
1580
  SET_BIT(AFIO->MAPR, AFIO_MAPR_SWJ_CFG_DISABLE);
1581
}
1582
 
1583
#if defined(AFIO_MAPR_SPI3_REMAP)
1584
 
1585
/**
1586
  * @brief Enable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD.
1587
  * @rmtoll MAPR          SPI3_REMAP           LL_GPIO_AF_EnableRemap_SPI3
1588
  * @note  ENABLE: Remap     (SPI3_NSS-I2S3_WS/PA4,  SPI3_SCK-I2S3_CK/PC10, SPI3_MISO/PC11, SPI3_MOSI-I2S3_SD/PC12)
1589
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1590
  * @retval None
1591
  */
1592
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_SPI3(void)
1593
{
9 mjames 1594
  SET_BIT(AFIO->MAPR, AFIO_MAPR_SPI3_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1595
}
1596
 
1597
/**
1598
  * @brief Disable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD.
1599
  * @rmtoll MAPR          SPI3_REMAP           LL_GPIO_AF_DisableRemap_SPI3
1600
  * @note  DISABLE: No remap (SPI3_NSS-I2S3_WS/PA15, SPI3_SCK-I2S3_CK/PB3,  SPI3_MISO/PB4,  SPI3_MOSI-I2S3_SD/PB5).
1601
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1602
  * @retval None
1603
  */
1604
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_SPI3(void)
1605
{
9 mjames 1606
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_SPI3_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1607
}
1608
 
1609
/**
1610
  * @brief  Check if SPI3 has been remaped or not
1611
  * @rmtoll MAPR         SPI3_REMAP         LL_GPIO_AF_IsEnabledRemap_SPI3_REMAP
1612
  * @retval State of bit (1 or 0).
1613
  */
1614
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_SPI3(void)
1615
{
1616
  return (READ_BIT(AFIO->MAPR, AFIO_MAPR_SPI3_REMAP) == (AFIO_MAPR_SPI3_REMAP));
1617
}
1618
#endif
1619
 
1620
#if defined(AFIO_MAPR_TIM2ITR1_IREMAP)
1621
 
1622
/**
1623
  * @brief Control of TIM2_ITR1 internal mapping.
1624
  * @rmtoll MAPR          TIM2ITR1_IREMAP           LL_GPIO_AF_Remap_TIM2ITR1_TO_USB
1625
  * @note  TO_USB: Connect USB OTG SOF (Start of Frame) output to TIM2_ITR1 for calibration purposes.
1626
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1627
  * @retval None
1628
  */
1629
__STATIC_INLINE void LL_GPIO_AF_Remap_TIM2ITR1_TO_USB(void)
1630
{
9 mjames 1631
  SET_BIT(AFIO->MAPR, AFIO_MAPR_TIM2ITR1_IREMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1632
}
1633
 
1634
/**
1635
  * @brief Control of TIM2_ITR1 internal mapping.
1636
  * @rmtoll MAPR          TIM2ITR1_IREMAP           LL_GPIO_AF_Remap_TIM2ITR1_TO_ETH
1637
  * @note  TO_ETH: Connect TIM2_ITR1 internally to the Ethernet PTP output for calibration purposes.
1638
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1639
  * @retval None
1640
  */
1641
__STATIC_INLINE void LL_GPIO_AF_Remap_TIM2ITR1_TO_ETH(void)
1642
{
9 mjames 1643
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_TIM2ITR1_IREMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1644
}
1645
#endif
1646
 
1647
#if defined(AFIO_MAPR_PTP_PPS_REMAP)
1648
 
1649
/**
1650
  * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).
1651
  * @rmtoll MAPR          PTP_PPS_REMAP           LL_GPIO_AF_EnableRemap_ETH_PTP_PPS
1652
  * @note  ENABLE: PTP_PPS is output on PB5 pin.
1653
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1654
  * @retval None
1655
  */
1656
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_ETH_PTP_PPS(void)
1657
{
9 mjames 1658
  SET_BIT(AFIO->MAPR, AFIO_MAPR_PTP_PPS_REMAP | AFIO_MAPR_SWJ_CFG);
2 mjames 1659
}
1660
 
1661
/**
1662
  * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).
1663
  * @rmtoll MAPR          PTP_PPS_REMAP           LL_GPIO_AF_DisableRemap_ETH_PTP_PPS
1664
  * @note  DISABLE: PTP_PPS not output on PB5 pin.
1665
  * @note  This bit is available only in connectivity line devices and is reserved otherwise.
1666
  * @retval None
1667
  */
1668
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_ETH_PTP_PPS(void)
1669
{
9 mjames 1670
  MODIFY_REG(AFIO->MAPR, (AFIO_MAPR_PTP_PPS_REMAP | AFIO_MAPR_SWJ_CFG), AFIO_MAPR_SWJ_CFG);
2 mjames 1671
}
1672
#endif
1673
 
1674
#if defined(AFIO_MAPR2_TIM9_REMAP)
1675
 
1676
/**
1677
  * @brief Enable the remapping of TIM9_CH1 and TIM9_CH2.
1678
  * @rmtoll MAPR2          TIM9_REMAP           LL_GPIO_AF_EnableRemap_TIM9
1679
  * @note  ENABLE: Remap     (TIM9_CH1 on PE5 and TIM9_CH2 on PE6).
1680
  * @retval None
1681
  */
1682
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM9(void)
1683
{
1684
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP);
1685
}
1686
 
1687
/**
1688
  * @brief Disable the remapping of TIM9_CH1 and TIM9_CH2.
1689
  * @rmtoll MAPR2          TIM9_REMAP           LL_GPIO_AF_DisableRemap_TIM9
1690
  * @note  DISABLE: No remap (TIM9_CH1 on PA2 and TIM9_CH2 on PA3).
1691
  * @retval None
1692
  */
1693
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM9(void)
1694
{
1695
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP);
1696
}
1697
 
1698
/**
1699
  * @brief  Check if TIM9_CH1 and TIM9_CH2 have been remaped or not
1700
  * @rmtoll MAPR2         TIM9_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM9
1701
  * @retval State of bit (1 or 0).
1702
  */
1703
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM9(void)
1704
{
1705
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP) == (AFIO_MAPR2_TIM9_REMAP));
1706
}
1707
#endif
1708
 
1709
#if defined(AFIO_MAPR2_TIM10_REMAP)
1710
 
1711
/**
1712
  * @brief Enable the remapping of TIM10_CH1.
1713
  * @rmtoll MAPR2          TIM10_REMAP           LL_GPIO_AF_EnableRemap_TIM10
1714
  * @note  ENABLE: Remap     (TIM10_CH1 on PF6).
1715
  * @retval None
1716
  */
1717
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM10(void)
1718
{
1719
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP);
1720
}
1721
 
1722
/**
1723
  * @brief Disable the remapping of TIM10_CH1.
1724
  * @rmtoll MAPR2          TIM10_REMAP           LL_GPIO_AF_DisableRemap_TIM10
1725
  * @note  DISABLE: No remap (TIM10_CH1 on PB8).
1726
  * @retval None
1727
  */
1728
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM10(void)
1729
{
1730
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP);
1731
}
1732
 
1733
/**
1734
  * @brief  Check if TIM10_CH1 has been remaped or not
1735
  * @rmtoll MAPR2         TIM10_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM10
1736
  * @retval State of bit (1 or 0).
1737
  */
1738
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM10(void)
1739
{
1740
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP) == (AFIO_MAPR2_TIM10_REMAP));
1741
}
1742
#endif
1743
 
1744
#if defined(AFIO_MAPR2_TIM11_REMAP)
1745
/**
1746
  * @brief Enable the remapping of TIM11_CH1.
1747
  * @rmtoll MAPR2          TIM11_REMAP           LL_GPIO_AF_EnableRemap_TIM11
1748
  * @note  ENABLE: Remap     (TIM11_CH1 on PF7).
1749
  * @retval None
1750
  */
1751
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM11(void)
1752
{
1753
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP);
1754
}
1755
 
1756
/**
1757
  * @brief Disable the remapping of TIM11_CH1.
1758
  * @rmtoll MAPR2          TIM11_REMAP           LL_GPIO_AF_DisableRemap_TIM11
1759
  * @note  DISABLE: No remap (TIM11_CH1 on PB9).
1760
  * @retval None
1761
  */
1762
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM11(void)
1763
{
1764
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP);
1765
}
1766
 
1767
/**
1768
  * @brief  Check if TIM11_CH1 has been remaped or not
1769
  * @rmtoll MAPR2         TIM11_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM11
1770
  * @retval State of bit (1 or 0).
1771
  */
1772
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM11(void)
1773
{
1774
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP) == (AFIO_MAPR2_TIM11_REMAP));
1775
}
1776
#endif
1777
 
1778
#if defined(AFIO_MAPR2_TIM13_REMAP)
1779
 
1780
/**
1781
  * @brief Enable the remapping of TIM13_CH1.
1782
  * @rmtoll MAPR2          TIM13_REMAP           LL_GPIO_AF_EnableRemap_TIM13
1783
  * @note  ENABLE: Remap     STM32F100:(TIM13_CH1 on PF8). Others:(TIM13_CH1 on PB0).
1784
  * @retval None
1785
  */
1786
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM13(void)
1787
{
1788
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP);
1789
}
1790
 
1791
/**
1792
  * @brief Disable the remapping of TIM13_CH1.
1793
  * @rmtoll MAPR2          TIM13_REMAP           LL_GPIO_AF_DisableRemap_TIM13
1794
  * @note  DISABLE: No remap STM32F100:(TIM13_CH1 on PA6). Others:(TIM13_CH1 on PC8).
1795
  * @retval None
1796
  */
1797
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM13(void)
1798
{
1799
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP);
1800
}
1801
 
1802
/**
1803
  * @brief  Check if TIM13_CH1 has been remaped or not
1804
  * @rmtoll MAPR2         TIM13_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM13
1805
  * @retval State of bit (1 or 0).
1806
  */
1807
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM13(void)
1808
{
1809
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP) == (AFIO_MAPR2_TIM13_REMAP));
1810
}
1811
#endif
1812
 
1813
#if defined(AFIO_MAPR2_TIM14_REMAP)
1814
 
1815
/**
1816
  * @brief Enable the remapping of TIM14_CH1.
1817
  * @rmtoll MAPR2          TIM14_REMAP           LL_GPIO_AF_EnableRemap_TIM14
1818
  * @note  ENABLE: Remap     STM32F100:(TIM14_CH1 on PB1). Others:(TIM14_CH1 on PF9).
1819
  * @retval None
1820
  */
1821
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM14(void)
1822
{
1823
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP);
1824
}
1825
 
1826
/**
1827
  * @brief Disable the remapping of TIM14_CH1.
1828
  * @rmtoll MAPR2          TIM14_REMAP           LL_GPIO_AF_DisableRemap_TIM14
1829
  * @note  DISABLE: No remap STM32F100:(TIM14_CH1 on PC9). Others:(TIM14_CH1 on PA7).
1830
  * @retval None
1831
  */
1832
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM14(void)
1833
{
1834
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP);
1835
}
1836
 
1837
/**
1838
  * @brief  Check if TIM14_CH1 has been remaped or not
1839
  * @rmtoll MAPR2         TIM14_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM14
1840
  * @retval State of bit (1 or 0).
1841
  */
1842
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM14(void)
1843
{
1844
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP) == (AFIO_MAPR2_TIM14_REMAP));
1845
}
1846
#endif
1847
 
1848
#if defined(AFIO_MAPR2_FSMC_NADV_REMAP)
1849
 
1850
/**
1851
  * @brief Controls the use of the optional FSMC_NADV signal.
1852
  * @rmtoll MAPR2          FSMC_NADV           LL_GPIO_AF_Disconnect_FSMCNADV
1853
  * @note  DISCONNECTED: The NADV signal is not connected. The I/O pin can be used by another peripheral.
1854
  * @retval None
1855
  */
1856
__STATIC_INLINE void LL_GPIO_AF_Disconnect_FSMCNADV(void)
1857
{
1858
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP);
1859
}
1860
 
1861
/**
1862
  * @brief Controls the use of the optional FSMC_NADV signal.
1863
  * @rmtoll MAPR2          FSMC_NADV           LL_GPIO_AF_Connect_FSMCNADV
1864
  * @note  CONNECTED: The NADV signal is connected to the output (default).
1865
  * @retval None
1866
  */
1867
__STATIC_INLINE void LL_GPIO_AF_Connect_FSMCNADV(void)
1868
{
1869
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP);
1870
}
1871
#endif
1872
 
1873
#if defined(AFIO_MAPR2_TIM15_REMAP)
1874
 
1875
/**
1876
  * @brief Enable the remapping of TIM15_CH1 and TIM15_CH2.
1877
  * @rmtoll MAPR2          TIM15_REMAP           LL_GPIO_AF_EnableRemap_TIM15
1878
  * @note  ENABLE: Remap     (TIM15_CH1 on PB14 and TIM15_CH2 on PB15).
1879
  * @retval None
1880
  */
1881
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM15(void)
1882
{
1883
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP);
1884
}
1885
/**
1886
  * @brief Disable the remapping of TIM15_CH1 and TIM15_CH2.
1887
  * @rmtoll MAPR2          TIM15_REMAP           LL_GPIO_AF_DisableRemap_TIM15
1888
  * @note  DISABLE: No remap (TIM15_CH1 on PA2  and TIM15_CH2 on PA3).
1889
  * @retval None
1890
  */
1891
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM15(void)
1892
{
1893
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP);
1894
}
1895
 
1896
/**
1897
  * @brief  Check if TIM15_CH1 has been remaped or not
1898
  * @rmtoll MAPR2         TIM15_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM15
1899
  * @retval State of bit (1 or 0).
1900
  */
1901
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM15(void)
1902
{
1903
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP) == (AFIO_MAPR2_TIM15_REMAP));
1904
}
1905
#endif
1906
 
1907
#if defined(AFIO_MAPR2_TIM16_REMAP)
1908
 
1909
/**
1910
  * @brief Enable the remapping of TIM16_CH1.
1911
  * @rmtoll MAPR2          TIM16_REMAP           LL_GPIO_AF_EnableRemap_TIM16
1912
  * @note  ENABLE: Remap     (TIM16_CH1 on PA6).
1913
  * @retval None
1914
  */
1915
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM16(void)
1916
{
1917
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP);
1918
}
1919
 
1920
/**
1921
  * @brief Disable the remapping of TIM16_CH1.
1922
  * @rmtoll MAPR2          TIM16_REMAP           LL_GPIO_AF_DisableRemap_TIM16
1923
  * @note  DISABLE: No remap (TIM16_CH1 on PB8).
1924
  * @retval None
1925
  */
1926
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM16(void)
1927
{
1928
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP);
1929
}
1930
 
1931
/**
1932
  * @brief  Check if TIM16_CH1 has been remaped or not
1933
  * @rmtoll MAPR2         TIM16_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM16
1934
  * @retval State of bit (1 or 0).
1935
  */
1936
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM16(void)
1937
{
1938
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP) == (AFIO_MAPR2_TIM16_REMAP));
1939
}
1940
#endif
1941
 
1942
#if defined(AFIO_MAPR2_TIM17_REMAP)
1943
 
1944
/**
1945
  * @brief Enable the remapping of TIM17_CH1.
1946
  * @rmtoll MAPR2          TIM17_REMAP           LL_GPIO_AF_EnableRemap_TIM17
1947
  * @note  ENABLE: Remap     (TIM17_CH1 on PA7).
1948
  * @retval None
1949
  */
1950
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM17(void)
1951
{
1952
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP);
1953
}
1954
 
1955
/**
1956
  * @brief Disable the remapping of TIM17_CH1.
1957
  * @rmtoll MAPR2          TIM17_REMAP           LL_GPIO_AF_DisableRemap_TIM17
1958
  * @note  DISABLE: No remap (TIM17_CH1 on PB9).
1959
  * @retval None
1960
  */
1961
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM17(void)
1962
{
1963
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP);
1964
}
1965
 
1966
/**
1967
  * @brief  Check if TIM17_CH1 has been remaped or not
1968
  * @rmtoll MAPR2         TIM17_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM17
1969
  * @retval State of bit (1 or 0).
1970
  */
1971
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM17(void)
1972
{
1973
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP) == (AFIO_MAPR2_TIM17_REMAP));
1974
}
1975
#endif
1976
 
1977
#if defined(AFIO_MAPR2_CEC_REMAP)
1978
 
1979
/**
1980
  * @brief Enable the remapping of CEC.
1981
  * @rmtoll MAPR2          CEC_REMAP           LL_GPIO_AF_EnableRemap_CEC
1982
  * @note  ENABLE: Remap     (CEC on PB10).
1983
  * @retval None
1984
  */
1985
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_CEC(void)
1986
{
1987
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP);
1988
}
1989
 
1990
/**
1991
  * @brief Disable the remapping of CEC.
1992
  * @rmtoll MAPR2          CEC_REMAP           LL_GPIO_AF_DisableRemap_CEC
1993
  * @note  DISABLE: No remap (CEC on PB8).
1994
  * @retval None
1995
  */
1996
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_CEC(void)
1997
{
1998
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP);
1999
}
2000
 
2001
/**
2002
  * @brief  Check if CEC has been remaped or not
2003
  * @rmtoll MAPR2         CEC_REMAP         LL_GPIO_AF_IsEnabledRemap_CEC
2004
  * @retval State of bit (1 or 0).
2005
  */
2006
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_CEC(void)
2007
{
2008
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP) == (AFIO_MAPR2_CEC_REMAP));
2009
}
2010
#endif
2011
 
2012
#if defined(AFIO_MAPR2_TIM1_DMA_REMAP)
2013
 
2014
/**
2015
  * @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels.
2016
  * @rmtoll MAPR2          TIM1_DMA_REMAP           LL_GPIO_AF_EnableRemap_TIM1DMA
2017
  * @note  ENABLE: Remap (TIM1_CH1 DMA request/DMA1 Channel6, TIM1_CH2 DMA request/DMA1 Channel6)
2018
  * @retval None
2019
  */
2020
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM1DMA(void)
2021
{
2022
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP);
2023
}
2024
 
2025
/**
2026
  * @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels.
2027
  * @rmtoll MAPR2          TIM1_DMA_REMAP           LL_GPIO_AF_DisableRemap_TIM1DMA
2028
  * @note  DISABLE: No remap (TIM1_CH1 DMA request/DMA1 Channel2, TIM1_CH2 DMA request/DMA1 Channel3).
2029
  * @retval None
2030
  */
2031
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM1DMA(void)
2032
{
2033
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP);
2034
}
2035
 
2036
/**
2037
  * @brief  Check if TIM1DMA has been remaped or not
2038
  * @rmtoll MAPR2         TIM1_DMA_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM1DMA
2039
  * @retval State of bit (1 or 0).
2040
  */
2041
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM1DMA(void)
2042
{
2043
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP) == (AFIO_MAPR2_TIM1_DMA_REMAP));
2044
}
2045
#endif
2046
 
2047
#if defined(AFIO_MAPR2_TIM67_DAC_DMA_REMAP)
2048
 
2049
/**
2050
  * @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels.
2051
  * @rmtoll MAPR2          TIM76_DAC_DMA_REMAP           LL_GPIO_AF_EnableRemap_TIM67DACDMA
2052
  * @note  ENABLE: Remap (TIM6_DAC1 DMA request/DMA1 Channel3, TIM7_DAC2 DMA request/DMA1 Channel4)
2053
  * @retval None
2054
  */
2055
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM67DACDMA(void)
2056
{
2057
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP);
2058
}
2059
 
2060
/**
2061
  * @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels.
2062
  * @rmtoll MAPR2          TIM76_DAC_DMA_REMAP           LL_GPIO_AF_DisableRemap_TIM67DACDMA
2063
  * @note  DISABLE: No remap (TIM6_DAC1 DMA request/DMA2 Channel3, TIM7_DAC2 DMA request/DMA2 Channel4)
2064
  * @retval None
2065
  */
2066
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM67DACDMA(void)
2067
{
2068
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP);
2069
}
2070
 
2071
/**
2072
  * @brief  Check if TIM67DACDMA has been remaped or not
2073
  * @rmtoll MAPR2         TIM76_DAC_DMA_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM67DACDMA
2074
  * @retval State of bit (1 or 0).
2075
  */
2076
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM67DACDMA(void)
2077
{
2078
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP) == (AFIO_MAPR2_TIM67_DAC_DMA_REMAP));
2079
}
2080
#endif
2081
 
2082
#if defined(AFIO_MAPR2_TIM12_REMAP)
2083
 
2084
/**
2085
  * @brief Enable the remapping of TIM12_CH1 and TIM12_CH2.
2086
  * @rmtoll MAPR2          TIM12_REMAP           LL_GPIO_AF_EnableRemap_TIM12
2087
  * @note  ENABLE: Remap     (TIM12_CH1 on PB12 and TIM12_CH2 on PB13).
2088
  * @note  This bit is available only in high density value line devices.
2089
  * @retval None
2090
  */
2091
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_TIM12(void)
2092
{
2093
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP);
2094
}
2095
 
2096
/**
2097
  * @brief Disable the remapping of TIM12_CH1 and TIM12_CH2.
2098
  * @rmtoll MAPR2          TIM12_REMAP           LL_GPIO_AF_DisableRemap_TIM12
2099
  * @note  DISABLE: No remap (TIM12_CH1 on PC4  and TIM12_CH2 on PC5).
2100
  * @note  This bit is available only in high density value line devices.
2101
  * @retval None
2102
  */
2103
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_TIM12(void)
2104
{
2105
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP);
2106
}
2107
 
2108
/**
2109
  * @brief  Check if TIM12_CH1 has been remaped or not
2110
  * @rmtoll MAPR2         TIM12_REMAP         LL_GPIO_AF_IsEnabledRemap_TIM12
2111
  * @retval State of bit (1 or 0).
2112
  */
2113
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_TIM12(void)
2114
{
2115
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP) == (AFIO_MAPR2_TIM12_REMAP));
2116
}
2117
#endif
2118
 
2119
#if defined(AFIO_MAPR2_MISC_REMAP)
2120
 
2121
/**
2122
  * @brief Miscellaneous features remapping.
2123
  *        This bit is set and cleared by software. It controls miscellaneous features.
2124
  *        The DMA2 channel 5 interrupt position in the vector table.
2125
  *        The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register).
2126
  * @rmtoll MAPR2          MISC_REMAP           LL_GPIO_AF_EnableRemap_MISC
2127
  * @note  ENABLE: DMA2 channel 5 interrupt is mapped separately at position 60 and TIM15 TRGO event is
2128
  *        selected as DAC Trigger 3, TIM15 triggers TIM1/3.
2129
  * @note  This bit is available only in high density value line devices.
2130
  * @retval None
2131
  */
2132
__STATIC_INLINE void LL_GPIO_AF_EnableRemap_MISC(void)
2133
{
2134
  SET_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP);
2135
}
2136
 
2137
/**
2138
  * @brief Miscellaneous features remapping.
2139
  *        This bit is set and cleared by software. It controls miscellaneous features.
2140
  *        The DMA2 channel 5 interrupt position in the vector table.
2141
  *        The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register).
2142
  * @rmtoll MAPR2          MISC_REMAP           LL_GPIO_AF_DisableRemap_MISC
2143
  * @note  DISABLE: DMA2 channel 5 interrupt is mapped with DMA2 channel 4 at position 59, TIM5 TRGO
2144
  *        event is selected as DAC Trigger 3, TIM5 triggers TIM1/3.
2145
  * @note  This bit is available only in high density value line devices.
2146
  * @retval None
2147
  */
2148
__STATIC_INLINE void LL_GPIO_AF_DisableRemap_MISC(void)
2149
{
2150
  CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP);
2151
}
2152
 
2153
/**
2154
  * @brief  Check if MISC has been remaped or not
2155
  * @rmtoll MAPR2         MISC_REMAP         LL_GPIO_AF_IsEnabledRemap_MISC
2156
  * @retval State of bit (1 or 0).
2157
  */
2158
__STATIC_INLINE uint32_t LL_GPIO_AF_IsEnabledRemap_MISC(void)
2159
{
2160
  return (READ_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP) == (AFIO_MAPR2_MISC_REMAP));
2161
}
2162
#endif
2163
 
2164
/**
2165
  * @}
2166
  */
2167
 
2168
/** @defgroup GPIO_AF_LL_EVENTOUT Output Event configuration
2169
  * @brief This section propose definition to Configure EVENTOUT Cortex feature .
2170
  * @{
2171
  */
2172
 
2173
/**
2174
  * @brief  Configures the port and pin on which the EVENTOUT Cortex signal will be connected.
2175
  * @rmtoll EVCR          PORT           LL_GPIO_AF_ConfigEventout\n
2176
  *         EVCR          PIN            LL_GPIO_AF_ConfigEventout
2177
  * @param  LL_GPIO_PortSource This parameter can be one of the following values:
2178
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PORT_A
2179
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PORT_B
2180
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PORT_C
2181
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PORT_D
2182
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PORT_E
2183
  * @param  LL_GPIO_PinSource This parameter can be one of the following values:
2184
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_0
2185
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_1
2186
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_2
2187
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_3
2188
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_4
2189
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_5
2190
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_6
2191
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_7
2192
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_8
2193
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_9
2194
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_10
2195
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_11
2196
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_12
2197
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_13
2198
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_14
2199
  *      @arg @ref LL_GPIO_AF_EVENTOUT_PIN_15
2200
  * @retval None
2201
*/
2202
__STATIC_INLINE void LL_GPIO_AF_ConfigEventout(uint32_t LL_GPIO_PortSource, uint32_t LL_GPIO_PinSource)
2203
{
2204
  MODIFY_REG(AFIO->EVCR, (AFIO_EVCR_PORT) | (AFIO_EVCR_PIN), (LL_GPIO_PortSource) | (LL_GPIO_PinSource));
2205
}
2206
 
2207
/**
2208
  * @brief  Enables the Event Output.
2209
  * @rmtoll EVCR          EVOE           LL_GPIO_AF_EnableEventout
2210
  * @retval None
2211
  */
2212
__STATIC_INLINE void LL_GPIO_AF_EnableEventout(void)
2213
{
2214
  SET_BIT(AFIO->EVCR, AFIO_EVCR_EVOE);
2215
}
2216
 
2217
/**
2218
  * @brief  Disables the Event Output.
2219
  * @rmtoll EVCR          EVOE           LL_GPIO_AF_DisableEventout
2220
  * @retval None
2221
  */
2222
__STATIC_INLINE void LL_GPIO_AF_DisableEventout(void)
2223
{
2224
  CLEAR_BIT(AFIO->EVCR, AFIO_EVCR_EVOE);
2225
}
2226
 
2227
/**
2228
  * @}
2229
  */
2230
/** @defgroup GPIO_AF_LL_EXTI EXTI external interrupt
2231
  * @brief This section Configure source input for the EXTI external interrupt .
2232
  * @{
2233
  */
2234
 
2235
/**
2236
  * @brief  Configure source input for the EXTI external interrupt.
2237
  * @rmtoll AFIO_EXTICR1      EXTIx         LL_GPIO_AF_SetEXTISource\n
2238
  *         AFIO_EXTICR2      EXTIx         LL_GPIO_AF_SetEXTISource\n
2239
  *         AFIO_EXTICR3      EXTIx         LL_GPIO_AF_SetEXTISource\n
2240
  *         AFIO_EXTICR4      EXTIx         LL_GPIO_AF_SetEXTISource
2241
  * @param  Port This parameter can be one of the following values:
2242
  *         @arg @ref LL_GPIO_AF_EXTI_PORTA
2243
  *         @arg @ref LL_GPIO_AF_EXTI_PORTB
2244
  *         @arg @ref LL_GPIO_AF_EXTI_PORTC
2245
  *         @arg @ref LL_GPIO_AF_EXTI_PORTD
2246
  *         @arg @ref LL_GPIO_AF_EXTI_PORTE
2247
  *         @arg @ref LL_GPIO_AF_EXTI_PORTF
2248
  *         @arg @ref LL_GPIO_AF_EXTI_PORTG
2249
  * @param  Line This parameter can be one of the following values:
2250
  *         @arg @ref LL_GPIO_AF_EXTI_LINE0
2251
  *         @arg @ref LL_GPIO_AF_EXTI_LINE1
2252
  *         @arg @ref LL_GPIO_AF_EXTI_LINE2
2253
  *         @arg @ref LL_GPIO_AF_EXTI_LINE3
2254
  *         @arg @ref LL_GPIO_AF_EXTI_LINE4
2255
  *         @arg @ref LL_GPIO_AF_EXTI_LINE5
2256
  *         @arg @ref LL_GPIO_AF_EXTI_LINE6
2257
  *         @arg @ref LL_GPIO_AF_EXTI_LINE7
2258
  *         @arg @ref LL_GPIO_AF_EXTI_LINE8
2259
  *         @arg @ref LL_GPIO_AF_EXTI_LINE9
2260
  *         @arg @ref LL_GPIO_AF_EXTI_LINE10
2261
  *         @arg @ref LL_GPIO_AF_EXTI_LINE11
2262
  *         @arg @ref LL_GPIO_AF_EXTI_LINE12
2263
  *         @arg @ref LL_GPIO_AF_EXTI_LINE13
2264
  *         @arg @ref LL_GPIO_AF_EXTI_LINE14
2265
  *         @arg @ref LL_GPIO_AF_EXTI_LINE15
2266
  * @retval None
2267
  */
2268
__STATIC_INLINE void LL_GPIO_AF_SetEXTISource(uint32_t Port, uint32_t Line)
2269
{
2270
  MODIFY_REG(AFIO->EXTICR[Line & 0xFF], (Line >> 16), Port << POSITION_VAL((Line >> 16)));
2271
}
2272
 
2273
/**
2274
  * @brief  Get the configured defined for specific EXTI Line
2275
  * @rmtoll AFIO_EXTICR1      EXTIx         LL_GPIO_AF_GetEXTISource\n
2276
  *         AFIO_EXTICR2      EXTIx         LL_GPIO_AF_GetEXTISource\n
2277
  *         AFIO_EXTICR3      EXTIx         LL_GPIO_AF_GetEXTISource\n
2278
  *         AFIO_EXTICR4      EXTIx         LL_GPIO_AF_GetEXTISource
2279
  * @param  Line This parameter can be one of the following values:
2280
  *         @arg @ref LL_GPIO_AF_EXTI_LINE0
2281
  *         @arg @ref LL_GPIO_AF_EXTI_LINE1
2282
  *         @arg @ref LL_GPIO_AF_EXTI_LINE2
2283
  *         @arg @ref LL_GPIO_AF_EXTI_LINE3
2284
  *         @arg @ref LL_GPIO_AF_EXTI_LINE4
2285
  *         @arg @ref LL_GPIO_AF_EXTI_LINE5
2286
  *         @arg @ref LL_GPIO_AF_EXTI_LINE6
2287
  *         @arg @ref LL_GPIO_AF_EXTI_LINE7
2288
  *         @arg @ref LL_GPIO_AF_EXTI_LINE8
2289
  *         @arg @ref LL_GPIO_AF_EXTI_LINE9
2290
  *         @arg @ref LL_GPIO_AF_EXTI_LINE10
2291
  *         @arg @ref LL_GPIO_AF_EXTI_LINE11
2292
  *         @arg @ref LL_GPIO_AF_EXTI_LINE12
2293
  *         @arg @ref LL_GPIO_AF_EXTI_LINE13
2294
  *         @arg @ref LL_GPIO_AF_EXTI_LINE14
2295
  *         @arg @ref LL_GPIO_AF_EXTI_LINE15
2296
  * @retval Returned value can be one of the following values:
2297
  *         @arg @ref LL_GPIO_AF_EXTI_PORTA
2298
  *         @arg @ref LL_GPIO_AF_EXTI_PORTB
2299
  *         @arg @ref LL_GPIO_AF_EXTI_PORTC
2300
  *         @arg @ref LL_GPIO_AF_EXTI_PORTD
2301
  *         @arg @ref LL_GPIO_AF_EXTI_PORTE
2302
  *         @arg @ref LL_GPIO_AF_EXTI_PORTF
2303
  *         @arg @ref LL_GPIO_AF_EXTI_PORTG
2304
  */
2305
__STATIC_INLINE uint32_t LL_GPIO_AF_GetEXTISource(uint32_t Line)
2306
{
2307
  return (uint32_t)(READ_BIT(AFIO->EXTICR[Line & 0xFF], (Line >> 16)) >> POSITION_VAL(Line >> 16));
2308
}
2309
 
2310
/**
2311
  * @}
2312
  */
2313
 
2314
#if defined(USE_FULL_LL_DRIVER)
2315
/** @defgroup GPIO_LL_EF_Init Initialization and de-initialization functions
2316
  * @{
2317
  */
2318
 
2319
ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx);
2320
ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);
2321
void        LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);
2322
 
2323
/**
2324
  * @}
2325
  */
2326
#endif /* USE_FULL_LL_DRIVER */
2327
 
2328
/**
2329
  * @}
2330
  */
2331
 
2332
/**
2333
  * @}
2334
  */
2335
 
2336
#endif /* defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) */
2337
/**
2338
  * @}
2339
  */
2340
 
2341
#ifdef __cplusplus
2342
}
2343
#endif
2344
 
9 mjames 2345
#endif /* STM32F1xx_LL_GPIO_H */
2 mjames 2346
 
2347
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/