USART, brak odbioru danych

0

Witam
Staram się wysłać dane po przez usart i odebrać je na tym samym urządzeniu (zworka na Rx i Tx), niestety użądzenie nie odbiera danych, debuger zatrzymuje się na pętli w funkcji odbierającej.

void initUsart(void){
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

  USART_Cmd(USART1, ENABLE);

  USART_InitTypeDef USARTStruct;
  USARTStruct.USART_BaudRate = 9600;
  USARTStruct.USART_WordLength = USART_WordLength_8b;
  USARTStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USARTStruct.USART_HardwareFlowControl =  USART_HardwareFlowControl_None;
  USARTStruct.USART_StopBits = USART_StopBits_1;
  USARTStruct.USART_Parity = USART_Parity_No;
  USART_Init(USART1, &USARTStruct);

  GPIO_InitTypeDef GPIOStruct;
  GPIOStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIOStruct.GPIO_Pin = GPIO_Pin_9;
  GPIOStruct.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_Init(GPIOA, &GPIOStruct);

  GPIOStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIOStruct.GPIO_Pin = GPIO_Pin_10;
  GPIO_Init(GPIOA, &GPIOStruct);
}

unsigned char USART_ReadByteSync(USART_TypeDef *USARTx){
  while((USARTx->SR & USART_SR_RXNE) == 0);
  return (unsigned char)USART_ReceiveData(USARTx);
 }
0
int main(){

  initUsart();
  while(1){
    USART_SendData(USART1, 0x55);
    unsigned char byte = USART_ReadByteSync(USART1);

    asm("nop");
  }
  return 0;
}
0

Zwiększyłem taktowanie na 50Mhz, nie wiem czy na pewno to stanowiło problem, ale w każdym razie działa.
Pozdrawiam

0

Na pewno brakuje:

 GPIO_PinAFConfig(GPIOA, GPIO_Pin_9, USART_AF);   
	GPIO_PinAFConfig(GPIOA, GPIO_Pin_10, USART_AF); 

Zmień też:

 GPIOStruct.GPIO_Mode = GPIO_Mode_AF;

dla pinu 9 i 10.
Jeśli dalej nie będzie działać spróbuj zmienić USART1 na USART2. Z tego co pamiętam, na płytkach od ST były jakieś problemy z USART1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1