1 /**
2 ******************************************************************************
3 * @file lib_gpio.c
4 * @author Application Team
5 * @version V4.4.0
6 * @date 2018-09-27
7 * @brief GPIO library.
8 ******************************************************************************
9 * @attention
10 *
11 ******************************************************************************
12 */
13 #include "lib_gpio.h"
14
15
16 /**
17 * @brief GPIO initialization.
18 * @param GPIOx: GPIOB~GPIOF
19 InitStruct:GPIO configuration.
20 GPIO_Pin: can use the ��|�� operator
21 GPIO_Pin_0 ~ GPIO_Pin_15 or GPIO_Pin_All
22 GPIO_Mode:
23 GPIO_Mode_INPUT
24 GPIO_Mode_OUTPUT_CMOS
25 GPIO_Mode_OUTPUT_OD
26 GPIO_Mode_INOUT_OD
27 GPIO_Mode_INOUT_CMOS
28 GPIO_Mode_FORBIDDEN
29 * @retval None
30 */
GPIOBToF_Init(GPIO_TypeDef * GPIOx,GPIO_InitType * InitStruct)31 void GPIOBToF_Init(GPIO_TypeDef *GPIOx, GPIO_InitType *InitStruct)
32 {
33 uint32_t tmp_reg1, tmp_reg2;
34
35 /* Check parameters */
36 assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx));
37 assert_parameters(IS_GPIO_PIN(InitStruct->GPIO_Pin));
38 assert_parameters(IS_GPIO_MODE(InitStruct->GPIO_Mode));
39
40 if (GPIOF == GPIOx)
41 InitStruct->GPIO_Pin &= ~(GPIO_Pin_2);
42
43 /* Configure ATT */
44 if (InitStruct->GPIO_Mode & 0x2U)
45 {
46 tmp_reg1 = GPIOx->ATT;
47 tmp_reg1 &= ~InitStruct->GPIO_Pin;
48 if (InitStruct->GPIO_Mode & 0x1U)
49 {
50 tmp_reg1 |= InitStruct->GPIO_Pin;
51 }
52 GPIOx->ATT = tmp_reg1;
53 }
54
55 /* Configure output/input mode */
56 tmp_reg1 = GPIOx->OEN;
57 tmp_reg1 &= ~InitStruct->GPIO_Pin;
58 tmp_reg2 = GPIOx->IE;
59 tmp_reg2 &= ~InitStruct->GPIO_Pin;
60 if (InitStruct->GPIO_Mode & 0x8U)
61 {
62 tmp_reg2 |= InitStruct->GPIO_Pin;
63 }
64 if (InitStruct->GPIO_Mode & 0x4U)
65 {
66 tmp_reg1 |= InitStruct->GPIO_Pin;
67 }
68 GPIOx->OEN = tmp_reg1;
69 GPIOx->IE = tmp_reg2;
70 }
71
72 /**
73 * @brief GPIOA initialization.
74 * @param GPIOx: GPIOA
75 InitStruct:GPIO configuration.
76 GPIO_Pin: can use the ��|�� operator
77 GPIO_Pin_0 ~ GPIO_Pin_15 or GPIO_Pin_All
78 GPIO_Mode:
79 GPIO_Mode_INPUT
80 GPIO_Mode_OUTPUT_CMOS
81 GPIO_Mode_OUTPUT_OD
82 GPIO_Mode_INOUT_OD
83 GPIO_Mode_FORBIDDEN
84 * @retval None
85 */
GPIOA_Init(GPIOA_TypeDef * GPIOx,GPIO_InitType * InitStruct)86 void GPIOA_Init(GPIOA_TypeDef *GPIOx, GPIO_InitType *InitStruct)
87 {
88 uint32_t tmp_reg1, tmp_reg2;
89
90 /* Check parameters */
91 assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx));
92 assert_parameters(IS_GPIO_PIN(InitStruct->GPIO_Pin));
93 assert_parameters(IS_GPIO_MODE(InitStruct->GPIO_Mode));
94
95 /* Configure ATT */
96 if (InitStruct->GPIO_Mode & 0x2U)
97 {
98 tmp_reg1 = GPIOx->ATT;
99 tmp_reg1 &= ~InitStruct->GPIO_Pin;
100 if (InitStruct->GPIO_Mode & 0x1U)
101 {
102 tmp_reg1 |= InitStruct->GPIO_Pin;
103 }
104 GPIOx->ATT = tmp_reg1;
105 }
106
107 /* Configure output/input mode */
108 tmp_reg1 = GPIOx->OEN;
109 tmp_reg1 &= ~InitStruct->GPIO_Pin;
110 tmp_reg2 = GPIOx->IE;
111 tmp_reg2 &= ~InitStruct->GPIO_Pin;
112 if (InitStruct->GPIO_Mode & 0x8U)
113 {
114 tmp_reg2 |= InitStruct->GPIO_Pin;
115 }
116 if (InitStruct->GPIO_Mode & 0x4U)
117 {
118 tmp_reg1 |= InitStruct->GPIO_Pin;
119 }
120 GPIOx->OEN = tmp_reg1;
121 GPIOx->IE = tmp_reg2;
122 }
123
124 /**
125 * @brief Read input data register bit.
126 * @param GPIOx: GPIOB~GPIOF
127 GPIO_Pin:GPIO_Pin_0~GPIO_Pin_15.
128 * @retval input pin value.
129 */
GPIOBToF_ReadInputDataBit(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin)130 uint8_t GPIOBToF_ReadInputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
131 {
132 uint32_t tmp;
133
134 /* Check parameters */
135 assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx));
136 assert_parameters(IS_GPIO_PINR(GPIO_Pin));
137
138 tmp = GPIOx->STS;
139
140 tmp &= GPIO_Pin;
141 if (tmp)
142 return 1;
143 else
144 return 0;
145 }
146
147 /**
148 * @brief Read input data register bit.
149 * @param GPIOx: GPIOA
150 GPIO_Pin:GPIO_Pin_0~GPIO_Pin_15.
151 * @retval input pin value.
152 */
GPIOA_ReadInputDataBit(GPIOA_TypeDef * GPIOx,uint16_t GPIO_Pin)153 uint8_t GPIOA_ReadInputDataBit(GPIOA_TypeDef *GPIOx, uint16_t GPIO_Pin)
154 {
155 uint32_t tmp;
156
157 /* Check parameters */
158 assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx));
159 assert_parameters(IS_GPIO_PINR(GPIO_Pin));
160
161 tmp = GPIOx->STS;
162
163 tmp &= GPIO_Pin;
164 if (tmp)
165 return 1;
166 else
167 return 0;
168 }
169
170 /**
171 * @brief Read input data register.
172 * @param GPIOx: GPIOB~GPIOF
173 * @retval input port value.
174 */
GPIOBToF_ReadInputData(GPIO_TypeDef * GPIOx)175 uint16_t GPIOBToF_ReadInputData(GPIO_TypeDef* GPIOx)
176 {
177 /* Check parameters */
178 assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx));
179
180 return GPIOx->STS;
181 }
182
183 /**
184 * @brief Read input data register.
185 * @param GPIOx: GPIOA
186 * @retval input port value.
187 */
GPIOA_ReadInputData(GPIOA_TypeDef * GPIOx)188 uint16_t GPIOA_ReadInputData(GPIOA_TypeDef* GPIOx)
189 {
190 /* Check parameters */
191 assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx));
192
193 return GPIOx->STS;
194 }
195
196 /**
197 * @brief Read output data register bit.
198 * @param GPIOx: GPIOB~GPIOF
199 GPIO_Pin:GPIO_Pin_0~GPIO_Pin_15
200 * @retval output pin value.
201 */
GPIOBToF_ReadOutputDataBit(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin)202 uint8_t GPIOBToF_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
203 {
204 uint32_t tmp;
205
206 /* Check parameters */
207 assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx));
208 assert_parameters(IS_GPIO_PINR(GPIO_Pin));
209
210 tmp = GPIOx->DAT;
211 tmp &= GPIO_Pin;
212 if (tmp)
213 return 1;
214 else
215 return 0;
216 }
217
218 /**
219 * @brief Read output data register bit.
220 * @param GPIOx: GPIOA
221 GPIO_Pin:GPIO_Pin_0~GPIO_Pin_15
222 * @retval output pin value.
223 */
GPIOA_ReadOutputDataBit(GPIOA_TypeDef * GPIOx,uint16_t GPIO_Pin)224 uint8_t GPIOA_ReadOutputDataBit(GPIOA_TypeDef* GPIOx, uint16_t GPIO_Pin)
225 {
226 uint32_t tmp;
227
228 /* Check parameters */
229 assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx));
230 assert_parameters(IS_GPIO_PINR(GPIO_Pin));
231
232 tmp = GPIOx->DAT;
233 tmp &= GPIO_Pin;
234 if (tmp)
235 return 1;
236 else
237 return 0;
238 }
239
240 /**
241 * @brief Read output data register.
242 * @param GPIOx: GPIOB~GPIOF
243 * @retval Output port value.
244 */
GPIOBToF_ReadOutputData(GPIO_TypeDef * GPIOx)245 uint16_t GPIOBToF_ReadOutputData(GPIO_TypeDef* GPIOx)
246 {
247 /* Check parameters */
248 assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx));
249
250 return GPIOx->DAT;
251 }
252
253 /**
254 * @brief Read output data register.
255 * @param GPIOx: GPIOA
256 * @retval Output port value.
257 */
GPIOA_ReadOutputData(GPIOA_TypeDef * GPIOx)258 uint16_t GPIOA_ReadOutputData(GPIOA_TypeDef* GPIOx)
259 {
260 /* Check parameters */
261 assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx));
262
263 return GPIOx->DAT;
264 }
265
266 /**
267 * @brief Set output data register bit.
268 * @param GPIOx: GPIOB~GPIOF
269 GPIO_Pin: can use the ��|�� operator
270 GPIO_Pin_0 ~ GPIO_Pin_15 or GPIO_Pin_All
271 * @retval None.
272 */
GPIOBToF_SetBits(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin)273 void GPIOBToF_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
274 {
275 /* Check parameters */
276 assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx));
277 assert_parameters(IS_GPIO_PIN(GPIO_Pin));
278
279 GPIOx->DAT |= GPIO_Pin;
280 }
281
282 /**
283 * @brief Set output data register bit.
284 * @param GPIOx: GPIOA
285 GPIO_Pin: can use the ��|�� operator
286 GPIO_Pin_0~GPIO_Pin_15 or GPIO_Pin_All
287 * @retval None.
288 */
GPIOA_SetBits(GPIOA_TypeDef * GPIOx,uint16_t GPIO_Pin)289 void GPIOA_SetBits(GPIOA_TypeDef* GPIOx, uint16_t GPIO_Pin)
290 {
291 /* Check parameters */
292 assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx));
293 assert_parameters(IS_GPIO_PIN(GPIO_Pin));
294
295 GPIOx->DAT |= GPIO_Pin;
296 }
297
298 /**
299 * @brief Reset output data register bit.
300 * @param GPIOx: GPIOB~GPIOF
301 GPIO_Pin: can use the ��|�� operator
302 GPIO_Pin_0~GPIO_Pin_15 or GPIO_Pin_All
303 * @retval None.
304 */
GPIOBToF_ResetBits(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin)305 void GPIOBToF_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
306 {
307 /* Check parameters */
308 assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx));
309 assert_parameters(IS_GPIO_PIN(GPIO_Pin));
310
311 GPIOx->DAT &= ~GPIO_Pin;
312 }
313
314 /**
315 * @brief Reset output data register bit.
316 * @param GPIOx: GPIOA
317 GPIO_Pin: can use the ��|�� operator
318 GPIO_Pin_0~GPIO_Pin_15 or GPIO_Pin_All
319 * @retval None.
320 */
GPIOA_ResetBits(GPIOA_TypeDef * GPIOx,uint16_t GPIO_Pin)321 void GPIOA_ResetBits(GPIOA_TypeDef* GPIOx, uint16_t GPIO_Pin)
322 {
323 /* Check parameters */
324 assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx));
325 assert_parameters(IS_GPIO_PIN(GPIO_Pin));
326
327 GPIOx->DAT &= ~GPIO_Pin;
328 }
329
330 /**
331 * @brief Write output data register bit.
332 * @param GPIOx: GPIOB~GPIOF
333 GPIO_Pin: can use the ��|�� operator
334 GPIO_Pin_0~GPIO_Pin_15 or GPIO_Pin_All
335 val:value write to register bit.
336 * @retval None.
337 */
GPIOBToF_WriteBit(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin,uint8_t val)338 void GPIOBToF_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint8_t val)
339 {
340 /* Check parameters */
341 assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx));
342 assert_parameters(IS_GPIO_PIN(GPIO_Pin));
343 assert_parameters(IS_GPIO_BITVAL(val));
344
345 if (val == 1)
346 {
347 GPIOx->DAT |= GPIO_Pin;
348 }
349 else
350 {
351 GPIOx->DAT &= ~GPIO_Pin;
352 }
353 }
354
355 /**
356 * @brief Write output data register bit.
357 * @param GPIOx: GPIOA
358 GPIO_Pin: can use the ��|�� operator
359 GPIO_Pin_0~GPIO_Pin_15 or GPIO_Pin_All
360 val:value write to register bit.
361 * @retval None.
362 */
GPIOA_WriteBit(GPIOA_TypeDef * GPIOx,uint16_t GPIO_Pin,uint8_t val)363 void GPIOA_WriteBit(GPIOA_TypeDef* GPIOx, uint16_t GPIO_Pin, uint8_t val)
364 {
365 /* Check parameters */
366 assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx));
367 assert_parameters(IS_GPIO_PIN(GPIO_Pin));
368 assert_parameters(IS_GPIO_BITVAL(val));
369
370 if (val == 1)
371 {
372 GPIOx->DAT |= GPIO_Pin;
373 }
374 else
375 {
376 GPIOx->DAT &= ~GPIO_Pin;
377 }
378 }
379
380 /**
381 * @brief Write output data register.
382 * @param GPIOx: GPIOB~GPIOF
383 val:value write to register.
384 * @retval None.
385 */
GPIOBToF_Write(GPIO_TypeDef * GPIOx,uint16_t val)386 void GPIOBToF_Write(GPIO_TypeDef* GPIOx, uint16_t val)
387 {
388 /* Check parameters */
389 assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx));
390
391 GPIOx->DAT = val;
392 }
393
394 /**
395 * @brief Write output data register.
396 * @param GPIOx: GPIOA
397 val:value write to register.
398 * @retval None.
399 */
GPIOA_Write(GPIOA_TypeDef * GPIOx,uint16_t val)400 void GPIOA_Write(GPIOA_TypeDef* GPIOx, uint16_t val)
401 {
402 /* Check parameters */
403 assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx));
404
405 GPIOx->DAT = val;
406 }
407
408 /**
409 * @brief GPIO AF configure.
410 * @param GPIOx:GPIOB GPIOE
411 GPIO_AFx:
412 GPIOB_AF_PLLHDIV
413 GPIOB_AF_OSC
414 GPIOB_AF_PLLLOUT
415 GPIOE_AF_CMP1O
416 NewState:
417 ENABLE
418 DISABLE
419 * @retval None.
420 */
GPIOBToF_AFConfig(GPIO_TypeDef * GPIOx,uint32_t GPIO_AFx,uint8_t NewState)421 void GPIOBToF_AFConfig(GPIO_TypeDef* GPIOx, uint32_t GPIO_AFx, uint8_t NewState)
422 {
423 uint32_t tmp;
424
425 /* Check parameters */
426 assert_parameters(IS_GPIOAF_ALL_INSTANCE(GPIOx));
427 assert_parameters(IS_GPIO_GPIOAF(GPIO_AFx));
428 assert_parameters(IS_FUNCTIONAL_STATE(NewState));
429
430 if (GPIOx == GPIOB)
431 {
432 tmp = GPIOAF->SELB;
433 if (NewState != DISABLE)
434 {
435 tmp |= GPIO_AFx;
436 }
437 else
438 {
439 tmp &= ~GPIO_AFx;
440 }
441 GPIOAF->SELB = tmp;
442 }
443 if (GPIOx == GPIOE)
444 {
445 tmp = GPIOAF->SELE;
446 if (NewState != DISABLE)
447 {
448 tmp |= GPIO_AFx;
449 }
450 else
451 {
452 tmp &= ~GPIO_AFx;
453 }
454 GPIOAF->SELE = tmp;
455 }
456 }
457
458 /**
459 * @brief GPIO AF configure.
460 * @param PMUIO_AFx:
461 PMUIO7_AF_PLLDIV
462 PMUIO_AF_CMP2O
463 PMUIO3_AF_PLLDIV
464 NewState:
465 ENABLE
466 DISABLE
467 * @retval None.
468 */
GPIOA_AFConfig(uint32_t PMUIO_AFx,uint8_t NewState)469 void GPIOA_AFConfig(uint32_t PMUIO_AFx, uint8_t NewState)
470 {
471 /* Check parameters */
472 assert_parameters(IS_GPIO_PMUIOAF(PMUIO_AFx));
473 assert_parameters(IS_FUNCTIONAL_STATE(NewState));
474
475 if (NewState != DISABLE)
476 {
477 GPIOA->SEL |= PMUIO_AFx;
478 }
479 else
480 {
481 GPIOA->SEL &= ~PMUIO_AFx;
482 }
483 }
484
485 /**
486 * @brief GPIO pin remap.
487 * @param GPIO_Remap:
488 GPIO_REMAP_I2C
489 NewState:
490 ENABLE
491 DISABLE
492 * @retval None.
493 */
GPIO_PinRemapConfig(uint32_t GPIO_Remap,uint8_t NewState)494 void GPIO_PinRemapConfig(uint32_t GPIO_Remap, uint8_t NewState)
495 {
496 uint32_t tmp;
497
498 /* Check parameters */
499 assert_parameters(IS_GPIO_REMAP(GPIO_Remap));
500 assert_parameters(IS_FUNCTIONAL_STATE(NewState));
501
502 tmp = GPIOAF->_MISC;
503 tmp &= ~GPIO_Remap;
504 if (NewState == ENABLE)
505 tmp |= GPIO_Remap;
506 GPIOAF->_MISC = tmp;
507 }
508
509 /**
510 * @brief GPIO PLLDIV configure.
511 * @param Divider:
512 GPIO_PLLDIV_1
513 GPIO_PLLDIV_2
514 GPIO_PLLDIV_4
515 GPIO_PLLDIV_8
516 GPIO_PLLDIV_16
517 * @retval None.
518 */
GPIO_PLLDIV_Config(uint32_t Divider)519 void GPIO_PLLDIV_Config(uint32_t Divider)
520 {
521 uint32_t tmp;
522
523 /* Check parameters */
524 assert_parameters(IS_GPIO_PLLDIV(Divider));
525
526 tmp = GPIOAF->_MISC;
527 tmp &= ~IO_MISC_PLLHDIV;
528 tmp |= Divider;
529 GPIOAF->_MISC = tmp;
530 }
531
532 /**
533 * @brief GPIOA de-glitch circuit control.
534 * @param GPIO_Pin: can use the ��|�� operator
535 GPIO_Pin_0~GPIO_Pin_15 or GPIO_Pin_All
536 NewState:
537 ENABLE
538 DISABLE
539 * @retval None.
540 */
GPIOA_NoDeg_Cmd(uint16_t GPIO_Pin,uint8_t NewState)541 void GPIOA_NoDeg_Cmd( uint16_t GPIO_Pin, uint8_t NewState)
542 {
543 uint16_t tmp;
544
545 /* Check parameters */
546 assert_parameters(IS_GPIO_PIN(GPIO_Pin));
547 assert_parameters(IS_FUNCTIONAL_STATE(NewState));
548
549 tmp = GPIOA->IOANODEG;
550 /*IOA wake-up signal will not go through de-glitch circuit.*/
551 if (NewState != DISABLE)
552 {
553 tmp |= GPIO_Pin;
554 }
555 /*IOA wake-up signal will go through de-glitch circuit.*/
556 else
557 {
558 tmp &= ~GPIO_Pin;
559 }
560 GPIOA->IOANODEG = tmp;
561 }
562
563 /*********************************** END OF FILE ******************************/
564