Bonjour,
chose promis chose due, pour planter un peu le décor, j'essaye de comprendre comment les ingénieurs/programmeurs/que sais-je de ST manipulent et configures les I/O du µcontroleur ayant pris comme source le firmware disponible sur le site de ST relatif a une communication USART entre 2 discovery-board STM32F429I.
Second point, en ne s'attardant que sur les fichiers sources disponibles dans le projet, ils sont aux nombres de 3:
-Main.c
-stm32f4xx_hal_msp.c
-stm32f4xx_it.c
Et stm32f4xx_hal_msp.c est celui qui nous interesses car c'est dans ce fichier que sont configuré les GPIOs. Tout au long de ce post, et afin d'avoir un fil conducteur je mettrais les questions en rapport avec la configuration des GPIOs.
Donc ma première question concerne une macro servent a activer l'horloge sur le GPIO port A.
Voici la macro en question:
donc la boucle do , la declaration de tmpreg et la fonction SET_BIT pas de problème j'ai compris. Pour info la fonction/macro SET_BIT fait une affectation OU entre bit soit entre RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN ce qui a pour conséquence de mettre a 1 le bit 0 du registre RCC_AHB1ENR.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 /** @defgroup RCC_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable * @brief Enable or disable the AHB1 peripheral clock. * @note After reset, the peripheral clock (used for registers read/write access) * is disabled and the application software has to enable this clock before * using it. * @{ */ #define __HAL_RCC_GPIOA_CLK_ENABLE() do { \ __IO uint32_t tmpreg; \ SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOAEN);\ /* Delay after an RCC peripheral clock enabling */ \ tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOAEN);\ UNUSED(tmpreg); \ } while(0)
Bit 0 ==> 1 = IO port A clock enabled (selon le manuel de référence).
Par contre je ne comprends pas l'utilité des lignes suivantes. je comprends la manipulation de READ_BIT qui fait un ET entre bit mais dans quel but comme le nom l'indique lire un bit mais pourquoi faire ?:
et UNUSED je ne sais pas bien, peut être supprime la lecture du bit ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define READ_BIT(REG, BIT) ((REG) & (BIT))
merci pour vos retours!
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define UNUSED(x) ((void)(x))
Partager