1. 串口及网络的驱动封装
调试串口用了uart1,这里不用microlib的话,重定向printf的功能,可以用下面的代码
struct __FILE{
int handle;
};
FILE __stdout;
int fputc(int c , FILE * f)
{
HAL_UART_Transmit(&huart1,(uint8_t *)&c,1,100);
return c;
}
教程中说,用microlib的话,后期用操作系统会有问题。
网络功能的封装,主要涉及到uart2串口的接收数据的解析,应用前面笔记的思路,这里任然是采用了串口发送数据超时时间的思路,配合定时器计时,来确定是否发送完成一帧数据。这样的可以,通过定义一个环形队列用来缓存串口2的接收数据。教程中在命令发送的时候,定义了一个环形队列用来接收发送命令之后,返回的命令数据。接收数据的时候,又重新定义了,另外一个环形队列保存数据。这样就有个问题,当有uart2接收数据的时候,就需要进行判断,看时命令之后的返回数据,还是传送的数据信息。传送的数据信息有特征,以+IPD开始的。教程中,还专门的用了一个状态机的方法,对每次接收的数据进行了分析判断,如果是接收到+IPD标志的数据,则要存到一个环形队列中,如果是命令的返回数据,则存到另外一个环形队列中。我这边处理的时候,就是当检查到一帧数据接收完成之后,如果是+IPD的特征的数据,就将环形队列中的数据拷贝出来,就可以了,更加的方便统一。
/* 读取网络数据 */
int driver_net_recvSocket(char * socket, int