******************************************************************************************************* * 函 数 名: comSendBuf * 功能说明: 向串口发送一组数据。数据放到发送缓冲区后立即返回,由中断服务程序在后台完成发送 * 形 参: _ucPort: 端口号(COM1 - COM8) * _ucaBuf: 待发送的数据缓冲区 * _usLen : 数据长度 * 返 回 值: 无 ********************************************************************************************************* */ void comSendBuf(COM_PORT_E _ucPort, uint8_t *_ucaBuf, uint16_t _usLen) { UART_T *pUart; pUart = ComToUart(_ucPort); if (pUart == 0) { return; } if (pUart->SendBefor != 0) { pUart->SendBefor(); /* 如果是RS485通信,可以在这个函数中将RS485设置为发送模式 */ } UartSend(pUart, _ucaBuf, _usLen); } /* ********************************************************************************************************* * 函 数 名: comSendChar * 功能说明: 向串口发送1个字节。数据放到发送缓冲区后立即返回,由中断服务程序在后台完成发送 * 形 参: _ucPort: 端口号(COM1 - COM8) * _ucByte: 待发送的数据 * 返 回 值: 无 ********************************************************************************************************* */ void comSendChar(COM_PORT_E _ucPort, uint8_t _ucByte) { comSendBuf(_ucPort, &_ucByte, 1); } /* ********************************************************************************************************* * 函 数 名: comGetChar * 功能说明: 从接收缓冲区读取1字节,非阻塞。无论有无数据均立即返回。 * 形 参: _ucPort: 端口号(COM1 - COM8) * _pByte: 接收到的数据存放在这个地址 * 返 回 值: 0 表示无数据, 1 表示读取到有效字节 ********************************************************************************************************* */ uint8_t comGetChar(COM_PORT_E _ucPort, uint8_t *_pByte) { UART_T *pUart; pUart = ComToUart(_ucPort); if (pUart == 0) { return 0; } return UartGetChar(pUart, _pByte); }
时间: 2023-07-19 09:57:11 浏览: 75
这段代码主要是关于串口通信的函数实现,包括向串口发送数据、发送单个字节、从接收缓冲区读取单个字节等功能。
首先,通过传入的端口号参数_ucPort,获取对应的串口结构体指针pUart。
然后,如果该串口设置了发送前的回调函数SendBefor,则调用该函数进行配置,例如在RS485通信中,可以在该函数中将RS485设置为发送模式。
接着,调用UartSend函数向串口发送数据,该函数会将数据放到发送缓冲区中,然后由中断服务程序在后台完成发送。
comSendChar函数是comSendBuf函数的一个封装,用于向串口发送单个字节。
comGetChar函数用于从接收缓冲区读取单个字节,该函数是非阻塞的,无论有无数据均立即返回,并将读取到的数据存放在传入的指针_pByte中。
需要注意的是,该代码中使用了一些自定义的数据类型和宏定义,例如COM_PORT_E枚举类型表示串口端口号,UART_T结构体表示串口配置信息等,这些类型和定义的具体实现需要根据具体的项目进行调整。