2014-06-24 6 views
0

STM32 검색 (F10x 제품군)에서 작업 중이며 USART1을 통해 데이터를 보내고 받으려고합니다.STM32 : USART를 통해 데이터 수신

int uart_putc(int c, USART_TypeDef* USARTx) 
{ 
    assert_param(IS_USART_123_PERIPH(USARTx)); 

    while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET); 
    USARTx->DR = (c & 0xff); 
    return 0; 
} 

int uart_getc (USART_TypeDef* USARTx) 
{ 
    assert_param(IS_USART_123_PERIPH(USARTx)); 

    while (USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET); 
    return USARTx->DR & 0xff; 
} 

uart_putc 미세하게 작동하지만 동안의 조건이 결코 사실처럼 uart_getc while 루프에서 stucked됩니다 것 같습니다.
누군가이 코드의 문제점을 알고 있습니까?

+0

단순히 STM32 표준 주변 장치 라이브러리를 사용하지 않는 이유는 무엇입니까? –

답변

2

USART_FLAG_RXNE 플래그는 RX 버퍼 비어 있음을 나타냅니다. RX 버퍼에 데이터가있는 경우 플래그는 SET이고 RESET이 아닙니다.

그래서 코드가 while 루프에 집어 넣어졌습니다.

+0

답해 주셔서 감사합니다, –

+0

'while (a == FALSE)'이 무한 루프가되는 유일한 이유는 a = FALSE이기 때문입니다. 그게 니가 여기서 말하는게 아니니? – bunkerdive