【发布时间】:2015-12-17 04:44:46
【问题描述】:
我正在尝试通过 uart 接收一个数字,该数字被打包为一个字符串。我发送数字 1000,所以我得到 4 个字节 + 空字符。但是,当我使用 atoi() 将数组转换为数字并将整数与 1000 进行比较时,我并不总是得到正确的数字。这是我接收号码的中断处理函数。有什么问题?
void USART1_IRQHandler(void)
{
if( USART_GetITStatus(USART1, USART_IT_RXNE) )
{
char t = USART1->RDR;
if( (t != '\n' && t!='\0') && (cnt < 4) )
{
received_string[cnt] = t;
cnt++;
}
else
{
cnt = 0;
}
t = 0;
received_string[4] = 0;
}
if(cnt==4)
{
data = atoi(received_string);
}
}
【问题讨论】:
-
你需要调试你的代码。检查接收到的字符,以及组成字符串的内容。 “我并不总是得到正确的数字。” -- 这是一个不完整的观察,表明您在调试方面付出的努力很少。
-
是的,您确实需要在 RX 缓冲区(received_string 数组)中发布您看到的原始字节。您可能会发送
\r\n或其他内容,而不是像串行终端程序常见的\n。
标签: string serial-port stm32 uart