c-uart接收中断等待回车,然后在回车后继续



我正在尝试为嵌入式系统编程一种带有uart接收中断的cli。我希望我的代码保持在uart函数中,直到我按enter键为'\r',然后继续,直到它进入下一个uart函数,并等待再次输入。就像某种扫描。

int main(void)
{
while (1)
{
uart_interrupt_receive(); 
//something else 
uart_interrupt_receive(); 
//something else 
}

如果可能的话,我不想使用scanf或getchar。我到现在为止。我无法决定使用哪些标志使其以我想要的方式工作,或者我如何更改它?

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)(){
if (USART2->ISR & USART_ISR_RXNE)                        //is rx flag active
{
char rx = (char)(USART2->RDR & 0xFF);                 //received char rx      

if ((rx == 'r') || (rx == 'n'))                    //if rx enter
{

//go on

}//if
else 
{

//wait

}//else
}//if

}//uart_rxcplt_callback

在中断中暂停整个MCU不是一个好主意。一般来说,如果可能的话,应该将数据接收和更高层的应用程序逻辑分开。处理UART-rx有两种方法:

  • "老派"中断的方式,其中硬件没有太多的rx硬件缓冲区。在这种情况下,您可以让UART rx中断将传入字符存储在软件环形缓冲区中。此环形缓冲区需要保护,以防出现竞争情况
  • 如果支持DMA,那么您可以跳过中断并将所有内容DMA到DMA缓冲区中。种族条件的考虑也适用于此

最终,您的主应用程序带有接收到的某种数据的缓冲区。它调用轮询缓冲区直到清空,并根据接收到的数据执行程序应该执行的任何操作。

相关内容

最新更新