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通信的主要内容,如果未能解决你的问题,请参考以下文章

C 中多层实现的错误处理

Win10 IoT C#开发 3 - UART 串口通信

STC15单片机C语言库函数版本UART_RXD_TXD_Short参数介绍

请教一个Linux下C语言的进程间的信号问题

C语言中的套接字通信。发送文件内容

C内存共享进程通信范例