Salut,
me revoilà pour des questions sur les microcontroleurs de chez ST.
je travaille sur le STM32f303k8 et voilà mon problème :
Je dois faire une transmission UART, RX/TX sur mon micro, j'arrive bien à envoyer un mot toutes les 'x' millisecondes. (ici x sera 2 ms pour moi, avec un timer prédefini)
alors voilà ma configuration de mon UART :
On remarquera bien la ligne :
huart1.Init.WordLength = UART_WORDLENGTH_9B;
qui dit donc que mon mot envoyé sera en 9 bits
Code:void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 9600; huart1.Init.WordLength = UART_WORDLENGTH_9B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; HAL_UART_Init(&huart1); }
Voilà les lignes de codes qui me permettent d'envoyer sur TX le mot : (j'ai pas mis toute la fonction pour pas vous perdre)
Mais quand je regarde à l'oscilloscope, je vois que le mot qui devrait avoir 11 bits( 1 Bit de Start+ 9 bit DATA + 1 bit de stop) je remarque qu'il en a que 10.Code:rxBuffer = 0b000101011; HAL_UART_Transmit_DMA(&huart1, &rxBuffer, 1);
Il manque le dernier bit du DATA, soit le MSB (dans l'exemple MSB = 0).
Un screen de l'oscillo en pièce jointes avec le mot : 0b000101011
J'ai besoin pour mon projet, de pouvoir toggle le 9eme bit à 0 ou à 1. Et j'aimerais savoir ce que j'ai loupé ? Ai-je mal configuré quelque chose ?
J'ai fait des calculs :
à 9600 bauds : (1/9600) * 9 bits = 940µs
et (1/9600) * 11 bits = 1,14 ms
J'ai donc les 9 bits, mais je ne comprend vraiment pas pourquoi ma DATA n'utilise pas 9 bits.
-----