Skocz do zawartości
Almaro

Magistrala UART - niezgodność baud

Pomocna odpowiedź

Dzień dobry wszystkim.

Po około miesiącu używania STM32L053R8 postanowiłem ułatwić sobie życie za pomocą STM32CubeMX i migrować z SW4STM32 na TrueSTUDIO. Niestety TrueSTUDIO nie chciało ze mną współpracować, a co gorsza projekty, które pierwotnie działały w SW4STM32 po całej tej operacji odmówiły posłuszeństwa. Magistrala USART zaczęła działać w niezrozumiały dla mnie sposób, tj aby terminal odczytał dane poprawnie musiał mieć ustawiony baud_rate_term ~= baud_rate_uC/2. np(uC 115200 - term 57600 lub  56000)

Dwie rzeczy, które zmieniałem w międzyczasie to:

a) aktualizacja ST Link v2 do V2.J34.M25

b) konfiguracja PLL w STM32CubeMX

Załączam screeny z konfiguracji oraz fragmenty kodu.

PLL.thumb.PNG.2b3b64d516430e49b8e088992da45442.PNGconsole.thumb.PNG.6fea35be57f745c5509fd6db12d7147d.PNG

Jeżeli był już taki post to przepraszam , ale nawet nie wiedziałem jakimi słowami klucz go szukać, i dziękuję z góry za każdą pomoc. 

Inicjalizacja UARTu:

void MX_USART2_UART_Init(void)
{

  huart2.Instance = USART2;
  huart2.Init.BaudRate = 115200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart2) != HAL_OK)
  {
    Error_Handler();
  }

}

void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(uartHandle->Instance==USART2)
  {
  /* USER CODE BEGIN USART2_MspInit 0 */

  /* USER CODE END USART2_MspInit 0 */
    /* USART2 clock enable */
    __HAL_RCC_USART2_CLK_ENABLE();
  
    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**USART2 GPIO Configuration    
    PA2     ------> USART2_TX
    PA3     ------> USART2_RX 
    */
    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN USART2_MspInit 1 */

  /* USER CODE END USART2_MspInit 1 */
  }
}

Transmisja:

void uart_write_line(UART_HandleTypeDef *huart, char *str)
{
	HAL_UART_Transmit(huart, str, strlen(str), 1000);
	HAL_UART_Transmit(huart, "\r\n", 2, 1000);
}

 

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...