Skocz do zawartości

Magistrala UART - niezgodność baud


Almaro

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);
}

 

Link do komentarza
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!

Anonim
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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.