prosty kod do wysyłania\odbierania pojedynczych znaków,
Kod: Zaznacz cały
#include "stm32f103xb.h"
#include "uart.h"
char UsartRX[3];
void USART_init(void)
{
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
GPIOA->CRH |= GPIO_CRH_CNF9_1 | GPIO_CRH_CNF10_0 | GPIO_CRH_MODE9_1;
GPIOA->CRH &= ~(GPIO_CRH_CNF9_0 | GPIO_CRH_MODE9_0 | GPIO_CRH_CNF10_1);
USART1->BRR = 8000000/9600;
USART1->CR1 = USART_CR1_UE | USART_CR1_RXNEIE | USART_CR1_TE | USART_CR1_RE;
NVIC_EnableIRQ( USART1_IRQn );
}
void USART_send( char c )
{
USART1->DR = c;
}
void USART1_IRQHandler(void)
{
// Odebrane dane w buforze
if( USART1->SR & USART_SR_RXNE )
{
UsartRX[1] = USART1->DR;
GPIOA->ODR ^= GPIO_ODR_ODR5;
}
}
Wysyłanie działa poprawnie wysyła jak trzeba, problem jest z odbiorem ciągle dostaję krzaki, próbowałem 3 przejściówek RS232/USB, na każdej to samo.
Wczoraj w nocy przesiedziałem nad tym kilka godzin (głównie z mojego gapstwa, bo odpalałem to na UART2 na początku a ten na nucle jest połączony ze zintegrowaną przejściówką i niewiedzieć czemu na wyprowadzeniach nie miałem sygnałów (żadnych).
Ale potem doszedłem do tego i odpaliłem zarówno na UART1 jaki i UART2 ale w czym problem. Jak wspomniałem wysyłka z F103 działa poprawnie, krzaki są na RX.
W końcu odpaliłem debuger żeby podejrzeć rejestry i zmienne. I co się okazuje przy obieraniu zawsze jest ustawiony ostatni bit w rejestrze czyli np. wysyłam bat w postaci 0b00110110 a w rejestrze odbiorczym jest 0b10110110, jak dodam w przerwaniu gdzie mam przypisanie wartości z rejestru do zmiennej maskowanie tego bitu wówczas jest OK
Kod: Zaznacz cały
UsartRX[1] = USART1->DR & 0x7F;
Tylko kurka dlaczego tak jest. Z ustawianiem terminala przy wysłaniu już kombinowałem na różne sposoby VT100, ASCII, ramka jest ustawiona 8N1 czyli poprawnie, zresztą jak było by błędnie to wysyłanie z F103 też by źle działało a jest poprawnie.
Próbowałem też różnych terminali minicom, picocom, putty zawsze to samo.
A wyjaśnienie odbierany znak wpada do 2 elementu tablicy bo w pierwszym wstawiam to co wysyłam, żeby mieć porównanie wartości.