Wpis z mikrobloga

Piszę fw na STM32L0 i siedzę nad UARTem drugi dzień. Konfiguracja arcyprosta, ot dwie linijki (baudrate i włączenie), po czym jak wstanie to wysyła mi tylko jeden - dwa znaki. Nie resetuje się MCU, znaki przychodzą jakie być powinny, ale co bym nie robił to zawsze z jednego printfa wychodzi jeden znak, a z drugiego dwa. Procedura printf sprawdzona na innym procku, działa.
Korzystam z CMSIS i dokumentacji. Już nawet zainstalowałem Cube żeby podejrzeć jak to się inicjuje i niczym od tego co zrobiłem się nie różni ( ͡° ʖ̯ ͡°)

Miał ktoś podobny przypadek? Jak go rozwiązał?

#programowanie #embedded #baremetal #jezykc #stm32
  • 16
@zarowka12: to do roboty, więc tak średnio. Ustawiam rejestr UART2->BRR = 19200, później USART2->CR1 |= USART CR1 TE | USART CR1 UE i tyle. GPIO ustawiane w tryb alternatywny i z tabelki wybrany tryb 4 na obu pinach (UART).
Z postępów to mam st-link v2, ale podróbę, doinstalowałem openocd, ale zrywało połączenie z niewiadomych przyczyn, więc teraz kombinuję z stm32cube.
@zetisdead: daruję sobie debugera. Jak nie urok to sraczka z ustawianiem czegokolwiek, a i tak nie zadziałało nawet w najmniejszym stopniu. Nawet zaprogramować przez SWD nie szło, raz nie umie w target, dwa nie umie zapytać o hasło do sudo, innym razem wali kodami błędów od czapy.
Zostaję z LEDem u boku -,-
@zarowka12: sugerowałem się tym zapisem z manuala:

Bit 7 TXE: Transmit data register empty

This bit is set by hardware when the content of the USARTTDR register has been transferred into the shift register. It is cleared by a write to the USARTTDR register.
@zarowka12: jeszcze takie proste sprawdzenie zrobiłem. Wysyłam tekst "dupa" ( ͡° ͜ʖ ͡°)
'if (message == 'a')'
'GPIOA->ODR ^= GPIO ODR OD6; // toggle LED_ALARM'
No i motyla noga LED miga na oko w okresie pętli. Zegar raczej w porządku skoro daje radę przesłać poprawnie trzy znaki, ale dlaczego gubi pozostałe to nie mam pojęcia.