注:函数库见前文。
接口定义文件:modUart.h
单片机应用中,经常需要通过串口与对端节点收发消息。
封装后的串口函数包括:
初始化:包括UART初始化接口modUartInit()和接收回调函数初始化接口modUartSetRxCallback();
发送:调用modUartSendPkt()函数发送消息;
接收:接收机制采用回调机制,当收到消息时,底层库函数会调用用户设置的回调函数;
初学者即使对回调机制和函数指针不了解也不要紧,以例程为模板,在回调函数里面编写自己的应用即可。
UART初始化接口
modUartInit():
两个输入参数,一个表示使用哪个串口(目前的实现只支持串口0),另一个表示波特率。
注:串口的其它配置都简化为缺省配置,应用无法修改。
接收回调函数初始化接口modUartSetRxCallback():
用户先定义自己的回调函数,然后将函数名称作为输入参数调用modUartSetRxCallback()。
发送消息:
参数1表示使用哪个串口(目前只支持串口0);
参数2表示发送的消息的长度(以字节为单位);
参数3为消息对应的字节数组的开始地址(指针);
返回值小于0表示发送失败;
收到消息的处理:
传入用户自定义消息处理函数的输入参数也是三个:
参数1表示使用哪个串口(目前只支持串口0);
参数2表示收到的消息的长度(以字节为单位);
参数3为消息对应的字节数组的开始地址(指针);
函数实现机制对应用使用的影响
目前的实现机制采用了发送缓冲区和接收缓冲区。当发送函数调用完成时,消息被送入发送缓冲区,不代表已经发送完毕。应用可在前面消息的发送过程中,继续发送消息,直到缓冲区满。
消息的发送和接收都以分组为单位。底层实现会对用户消息加header形成分组。分组header由3个字节组成,第1、2个字节为0x7e7e,是分组开始标记。第3个字节为用户消息的长度,因此用户消息的长度不能超过255。
对端发送的消息也要以0x7e7e开头,然后是长度,然后是应用数据。
底层收到完整的分组后,调用用户回调函数。调用是在UART接收中断处理函数中执行的,因此用户需要及时对消息进行保存,设置标志通知主程序进行处理,然后及时返回。不要在回调函数中进行复杂、耗时长、涉及中断处理等的操作。主程序进行处理时,不能依赖输入参数中的消息缓冲区,因为该缓冲区会被底层重用。
用户377235 2013-1-25 14:52