eecs-bsp-test-code-2/inc/uart1.h

58 lines
5.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**********************************Uart1串行通信模块 V2.0 说明 ************************************************************************
Uart1模块提供Uart1模块初始化函数、3个应用函数,1个事件enumEventRxd
(1) Uart1Init(unsigned long band)Uart1模块初始化函数。
函数参数unsigned long band定义串口1的通信波特率单位bps8个数据位、1个停止位无奇偶校验位
函数返回值:无
(2) void SetUart1Rxd(char *RxdPt, unsigned int Nmax, char *matchhead, unsigned int matchheadsize);
设置串口1接收参数数据包存放位置、大小包头匹配字符、匹配字符个数。收到符合条件的数据包时将产生enumEventRxd事件。
函数参数: char *RxdPt指定接收数据包存放区首地址
unsigned int Nmax接收数据包大小字节数最大65535。当收到的数据大于Nmax后将被丢弃 2022年5月2日更改
char *matchhead 需要匹配的数据包头(首地址)
unsigned int matchheadsize需要匹配的字节数
补充说明:
Nmax=1为单字节接收即收到一个字节就产生enumUart1EventRxd事件如果定义了匹配还需满足匹配条件
0 < matchheadsize < Nmax要求接收数据中连续matchheadsize个字节与*matchhead处数据完全匹配才在收到Nmax数据时产生enumEventRxd事件
matchheadsize = Nmax设定接收数据包完全匹配
matchheadsize=0 或 matchheadsize > Nmax将不做匹配接收到任意Nmax数据时产生enumEventRxd事件
在enumEventRxd事件发出后用户回调函数返回才接收下一个数据包 2022年5月2日更改
函数返回值:无
(3) char Uart1Print(void *pt, unsigned int num)发送数据包非阻塞函数即函数不等到所设定任务全部完成才返回该函数从被调用到返回大约1uS左右时间。
函数参数: void *pt :指定发送数据包位置
unsigned int num发送数据包大小
函数返回值enumTxOK调用成功即所设定的发送数据包请求已被系统sys正确接受sys将尽硬件资源最大可能及时发送数据。
enumTxFailure调用失败主要原因是串口正忙上一数据包未发完
补充说明串口上发送1个字节数据大约需要时间0.1mS10mS视所设定的波特率对计算机来说如果发送多个字节是一个很要时间才能完成的事。类似于
前面用蜂鸣器演奏音乐,对这类事件与程序"异步"的问题,编程时不仅要注意程序逻辑性、还有注意程序时效性。(这个问题其实总是要注意、必须要注意的)
(4) char GetUart1TxStatus(void) 获取Uart1发送状态
函数返回值enumUart1TxFree:串口1发送空闲
enumUart1TxBusy,串口1发送正忙
(5) Uart1接收事件enumEventUart1Rxd。表示收到了一个符合指定要求数据包头匹配、数据包大小一致的数据包。
补充说明串口1和2上收到的两个数据包之时间间隔要求不小于1mS原因系统内部调度方法限制
补充说明:
(1) 串口1、串口2波特率可独立设置互不影响.
(2) 串口1、串口2、红外通信可同时工作互不影响
(3) 串口1、串口2用法基本上完全一致红外通信用法也基本相同。不同地方是
a串口1固定在USB接口上可用于与计算机通信而串口2可初始化在EXT扩展、或485接口上在485接口上时仅单工工作
b红外通信速率固定不可变大约相当于500800 bps通信时没有包头匹配功能。红外模块除通信功能外还提供用于电器红外遥控的应用函数
c红外通信模块仅为单工工作。不发送时自动进入接收状态有数据发送时自动进入发送状态但正在接收数据包过程中不会进入发送状态。
编写徐成电话18008400450 2021年3月28日设计 2021年11月8日更新
*/
#ifndef _uart1_H_
#define _uart1_H_
extern void Uart1Init(unsigned long band); //串口初始化,参数:波特率
extern void SetUart1Rxd(void *RxdPt, unsigned int Nmax, void *matchhead, unsigned int matchheadsize); //设置接收条件数据包存放位置、大小包头匹配字符、匹配字符个数。符合条件的包将产生enumEventRxd事件
extern char Uart1Print(void *pt, unsigned int num); //发送数据包。非阻塞函数。数据包位置、大小。返回值enumTxOK调用成功enumTxFailure失败串口忙上一数据包未发完
extern char GetUart1TxStatus(void); //获取串口1发送状态,enumUart1TxFree:串口1发送空闲, enumUart1TxBusy,串口1发送正忙
enum Uart1ActName {enumUart1TxFree=0,enumUart1TxBusy,enumUart1TxOK,enumUart1TxFailure};
#endif