Firmware STM32F4 (UART question n°2)
Bonjour a tous,
me revoilà lol, je souhaiterais avoir une confirmation et par la suite une réponse a ma question sur le fonctionnement précis de cette variable.
Pouvez me confirmer si je suis ds le vrai ou pas du tout ?
Code:
__IO ITStatus UartReady = RESET;
On crée une variable qui prendra la valeur RESET.
Décomposition de cette déclaration:
Code:
#define __IO volatile /*!< Defines 'read / write' permissions
C'est un type qualifieur (ici volatile) qui indique au compilateur qu'une variable peut voir sa valeur évoluer, soit par une interruption soit par un périphérique.
Code:
1 2 3 4 5
| typedef enum
{
RESET = 0,
SET = !RESET
} FlagStatus, ITStatus; |
Donc ITStatus est un typdef sur une énumération
Code:
1 2 3 4 5 6 7 8 9
| //UartReady
/*##-5- Wait for the end of the transfer ###################################*/
while (UartReady != SET)
{
}
/* Reset transmission flag */
UartReady = RESET; |
UartReady est une variable qui indique si l'UART est pret a travailler ou si il est tjrs entrain de travailler!
Tant que UartReady est égal a 0 (==) on reste ds la boucle.
Question concernant la boucle while avec la variable UartReady:
Je n'arrive pas retrouver ds les fichiers sources un quelconque endroit ou la variable UartReady est mise a 1! Peut que cette variable est mise a 1 de manière HARDWARE (peut etre que je dis n'importe quoi) et ca peut expliquer la manière dont elle a était déclaré ?
J'ai bien ce typdef "HAL_UART_StateTypeDef" sur le status des transmissions mais je ne trouve ou je n'arrive pas a faire le lien avec ma variable UartReady!
Code:
1 2 3 4 5 6 7 8 9 10 11
| typedef enum
{
HAL_UART_STATE_RESET = 0x00, /*!< Peripheral is not yet Initialized */
HAL_UART_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */
HAL_UART_STATE_BUSY = 0x02, /*!< an internal process is ongoing */
HAL_UART_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */
HAL_UART_STATE_BUSY_RX = 0x22, /*!< Data Reception process is ongoing */
HAL_UART_STATE_BUSY_TX_RX = 0x32, /*!< Data Transmission and Reception process is ongoing */
HAL_UART_STATE_TIMEOUT = 0x03, /*!< Timeout state */
HAL_UART_STATE_ERROR = 0x04 /*!< Error */
}HAL_UART_StateTypeDef; |
Ou encore ce typedef qui correspond au retour de la fonction HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) c'est après l'appel de cette fonction qu'on entre ds la boucle while (UartReady != SET)
Code:
1 2 3 4 5 6 7
| typedef enum
{
HAL_OK = 0x00,
HAL_ERROR = 0x01,
HAL_BUSY = 0x02,
HAL_TIMEOUT = 0x03
} HAL_StatusTypeDef; |
Si quelqu’un a une idée je le ou la remercie d'avance!