C语言中的UART通信
Posted
技术标签:
【中文标题】C语言中的UART通信【英文标题】:Uart communication in C 【发布时间】:2014-07-30 07:30:58 【问题描述】:我正在尝试使 UART 通信正常工作,并且我使用了一些来自 ATMEL 的示例代码作为此基础 (UART Example)。我想做的主要改变是,我不想使用test_string
,而是想使用uart_getchar()
接收字符串/字符数组并运行字符检查,即:
data[i] = uart_getchar();
//repeat
switch (data[0])
case: 'w':
//do stuff 1
break;
case: 'r':
//do stuff 2
break;
但我在正确理解 UART 示例和让我的新代码正常工作方面遇到了困难。
有什么建议吗?
【问题讨论】:
具体有什么不明白的地方? 你不能使用uart_getchar()
得到一个字符串,因为它是一个字符函数。
如何判断从 UART 接收到的字符串何时结束?新队?无论如何,您需要一个缓冲区,然后您需要将字符读取到缓冲区,直到检测到字符串结尾(注意缓冲区溢出,如果您希望它是 C 字符串,请记住添加终止 '\0'
字符)。
另一个想法:如果您不清楚,在 C 中,“字符串”与单个“字符”是完全不同的东西,处理它们需要完全不同的代码。只是这么说,以防您真的想读取单个字符(与 C 中的字节相同),而不是整个字符串(实际字符串内容的 0..N 个字符,always 后跟 '\0'
字节标记字符串的结尾)。
示例已过期,请更新
【参考方案1】:
代替代码中的这一行:
Assert (data == test_string[cnt++]);
输入你的 switch case 代码。
switch (data[0])
case: 'w':
//do stuff 1
break;
case: 'r':
//do stuff 2
break;
也许您不想打开data[0]
,而是想使用data[i]
。
【讨论】:
以上是关于C语言中的UART通信的主要内容,如果未能解决你的问题,请参考以下文章