仅在接收数据STM32F4-Discovery Cortex M4时读取USART RX寄存器

时间:2014-10-07 11:37:21

标签: c usart

当我通过USART从另一张Discovery卡传输数据时,我有一个关于读取STM32F4-Discovery卡上的RX寄存器的问题。我只想在从card2传输数据时读取card1上的RX寄存器,然后我想清除它以便我可以读取card2传输的下一个数据。

C代码可以为我做什么?我可以使用哪些标志?读完后如何清除RX寄存器?

3 个答案:

答案 0 :(得分:1)

您必须使用其他寄存器来确定RX是否包含有效数据。

假设您使用ST的外围库(您应该!),请使用USART_GetFlagStatus()(即“RX寄存器不为空”)标志调用USART_FLAG_RXNE函数。

或者,当然,只要收到一个字节就设置一个中断运行。

答案 1 :(得分:0)

如果还没有,请从ST下载STM32CubeF4。它包含发现板的驱动程序和示例代码。看看Examples-> UART下的UART_TwoBoards_ComIT示例项目。

示例项目中的描述:

*   This sample code shows how to use STM32F4xx UART HAL API to transmit 
*   and receive a data buffer with a communication process based on
*   IT transfer. 
*   The communication is done using 2 Boards.

答案 2 :(得分:0)

你可以用它。我在阅读时使用了这个,用stm32f4zgt从RS485接收数据。

USART3初始化命令

char txt_buf[100];
char bin_buf[]={'b','i','n','a','r','y',':',0,1,2,3,4,0x30,0x31,0x32,65,66,67,13,10};
uint16_t tx_len=0;
char *tx_ptr=0;
uint8_t send_ok=1;

变量

void Usart_SendBuf(USART_TypeDef *USART,  uint16_t length, char *buff){
/***********  RS485 DE ve RE pins. **********/
GPIO_SetBits(GPIOD,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_9);
send_ok=0;
tx_len = length; // sending byte count.
// if we'll use string,we don't need this value.
tx_ptr = buff;  // using array address-->> pointer
USART_ITConfig(USART,USART_IT_TXE,ENABLE); // TX  (DR) is empty create an interrupt
}

缓冲区和中断命令

void USART3_IRQHandler(void)
{
if(USART_GetITStatus(USART3,USART_IT_TXE)){
if(--tx_len == 0){ // End of array?
USART_ITConfig(USART3,USART_IT_TXE,DISABLE); // TX flag is unuseful
    USART_ITConfig(USART3,USART_IT_TC,ENABLE); // when sending is ok, create an interr.
    }
    USART_SendData(USART3,(uint16_t) *tx_ptr);
    tx_ptr++;
    USART_ClearITPendingBit(USART3,USART_IT_TXE);
}
if(USART_GetITStatus(USART3,USART_IT_TC)){ // Last bit arrived?
    GPIO_ResetBits(GPIOD,GPIO_Pin_8);  // take the RS485 mode (take data, buf etc.)
    GPIO_SetBits(GPIOD,GPIO_Pin_9);
    USART_ITConfig(USART3,USART_IT_TC,DISABLE); // all datas is over. We don't need TC Flag
    USART_ClearITPendingBit(USART3,USART_IT_TC);
    send_ok=1;
  }
}

中断

ch.qos.logback.access.tomcat.LogbackValve