UART0 RS232驱动源码:解决多串口共享变量错误

版权申诉
0 下载量 37 浏览量 更新于2024-11-06 收藏 4KB RAR 举报
资源摘要信息:"uart0.rar_UART0 RS232_rs232驱动" RS232是一种串行通信接口,全称为“推荐标准232”,由电子工业协会(Electronics Industries Alliance,EIA)于1962年制定。RS232广泛应用于各种通信设备与计算机之间进行串行通信,是一种非常经典的串行通信协议。它定义了信号的电平、接口的引脚、通信速率、信号功能等技术指标。RS232的物理接口一般采用DB9或DB25型连接器,其中DB9更为常见。 在多串口通信中,若多个串口需要共用一组通信线,就需要一个RS232驱动程序来管理数据的传输,以避免数据冲突和通信混乱。驱动程序的作用是提供一种机制,确保数据在正确的时机传输到正确的串口。如果RS232驱动程序设计不当,就可能出现数据丢失或错位的情况,特别是在多个进程或设备同时访问串口时,共享变量的错误可能导致数据传输的不确定性。 标题中提到的“UART0”是指通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的第0个实例。UART是一种广泛用于串行通信的硬件设备,它将数据从并行接口转换为串行接口,并在串行设备之间传输数据。在嵌入式系统、计算机以及其他需要串行通信的设备中,UART发挥着关键作用。UART0指的是设备上第一个UART接口,通常用于主串行通信端口。 描述中提到“修正了共享变量的错误”,这意味着之前的RS232驱动程序在管理多个串口数据传输时存在问题,可能导致数据冲突或者传输不稳定。通过修正这些错误,新的驱动程序应该能够在多串口环境下保持有效且稳定的通信。这一点对于确保设备间通信的可靠性至关重要,特别是在工业自动化、嵌入式系统以及需要高可靠性的通信环境。 在文件名“***.txt”中,“***”可能是资源提供方的域名,而“www”是其网站的子域名,“.com”表示这是一个商业网站,而“.txt”表明该文件是一个文本文件。这个文件可能包含关于该RS232驱动程序的进一步描述、使用说明、发布信息或者是该驱动程序的版本记录。 文件“uart0”可能包含具体的RS232驱动程序代码或者是该驱动程序相关的配置文件、库文件等。在嵌入式系统开发中,驱动程序通常需要根据具体的硬件平台进行适配。这可能意味着开发者需要根据自己的硬件平台对“uart0”文件中的内容进行修改,以确保驱动程序可以在目标系统上正常运行。 标签“uart0_rs232 rs232驱动”表明该资源包含与UART0相关的RS232驱动程序的信息和代码。标签也常用于搜索和分类资源,在搜索引擎和代码库中搜索时可以使用这些标签来找到特定的驱动程序或相关的开发资源。 综上所述,该资源为RS232驱动程序,修正了共享变量错误,支持多个串口共用时的有效数据传输,并且可能包含针对特定硬件平台的源代码和配置信息。开发者可以利用这些资源来实现可靠的数据通信,特别是对于需要进行串行通信的嵌入式系统开发。

void Dealwith_RS232(void) //RS485 is also handled at here { //stc_ring_buf_t *pstcBuffRing_Rcv = &g_stcBuffRing_Remote232_Rcv; _stc_rs232_info *pstcUart; //_stc_rs232_info *pstcRS232 = &g_stcRS232; uint8_t uart; for(uart=0; uart<2; uart++) //COM_RS232, COM_RS485 { if(COM_RS485 == uart) pstcUart = &g_stcRS485; else pstcUart = &g_stcRS232; if (pstcUart->unSend.u64Data)//if (g_stcRS232.unSend.u64Data) { pstcUart->State = STATE_REMOTE_SENDING; //g_stcRS232.State = STATE_REMOTE_SENDING; Dealwith_RS232_Send(uart);//Dealwith_RS232_Send(); } if (STATE_REMOTE_SENDING == pstcUart->State) break; //return; /* buffer ring pop out */ if (!BufferRing_RS232_Popout(uart, pstcUart))//if (!BufferRing_RS232_Popout(pstcBuffRing_Rcv, pstcRS232)) { return; } /* get cmd type and switch to branch */ switch(GetCmd_RS232(pstcUart))//switch(GetCmd_RS232(pstcRS232)) { case CMD_USER_GET_VERSION: RecvFromRS232_User_Get_Version(pstcUart);//RecvFromRS232_User_Get_Version(pstcRS232); break; case CMD_USER_GET_SN: RecvFromRS232_User_Get_SerialNbr(pstcUart);//RecvFromRS232_User_Get_SerialNbr(pstcRS232); break; #ifdef APP_LED case CMD_USER_STANDBY_IN: RecvFromRS232_User_Standby_In(pstcUart); break; case CMD_USER_STANDBY_OUT: RecvFromRS232_User_Standby_Out(pstcUart); break; case CMD_USER_BRIGHTNESS_GET: RecvFromRS232_User_Brightness_Get(pstcUart); break; case CMD_USER_BRIGHTNESS_SET: RecvFromRS232_User_Brightness_Set(pstcUart); break; case CMD_USER_BRIGHTNESS_DECREASE: RecvFromRS232_User_Brightness_Decrease(pstcUart); break; case CMD_USER_BRIGHTNESS_INCREASE: RecvFromRS232_User_Brightness_Increase(pstcUart); break; #endif case CMD_USER_DATE_SET: RecvFromRS232_User_Date_Set(pstcUart); break; case CMD_USER_DATE_GET: RecvFromRS232_User_Date_Get(pstcUart); break; case CMD_USER_TIME_SET: RecvFromRS232_User_Time_Set(pstcUart); break; case CMD_USER_TIME_GET: RecvFromRS232_User_Time_Get(pstcUart); break; case CMD_MFG_TEST: RecvFromRS232_Mfg_Test(pstcUart); break; case CMD_MFG_UPDATE_BOARD: RecvFromRS232_Mfg_Update_Board(pstcUart); break; case CMD_MFG_UPDATE_PANEL: RecvFromRS232_Mfg_Update_Panel(pstcUart); break; case CMD_MFG_EEPROM: RecvFromRS232_Mfg_Eeprom(pstcUart); break; case CMD_MFG_BEEPER: RecvFromRS232_Mfg_Beeper(pstcUart); break; case CMD_MFG_EXIT: RecvFromRS232_Mfg_Exit(pstcUart); break; //kk case CMD_OTA_INIT: RecvFromRS232_OTA_Init(pstcUart); break; default: RecvFromRS232_Invalid_Cmd_Param(pstcUart); break; } g_stcRS232.State = STATE_REMOTE_IDLE; return; } } 怎么让BufferRing_RS232_Popout(uart, pstcUart)时,要等到uart=1时,才能return

2023-06-03 上传