哈尔滨网站运营服务商,昆明网站建设推广服务,wordpress前端购买,关于网站优化的文章STM32W5500以太网应用开发003_TCP服务器添加OLED#xff08;u8g2#xff09;显示状态 实验效果3-TCP服务器OLED1 拷贝显示驱动代码1.1 拷贝源代码1.2 将源代码添加到工程1.3 修改代码优化等级1.4 添加头文件路径1.5 修改STM32CubeMX工程 2 修改源代码2.1 添加头文件2.2 main函… STM32W5500以太网应用开发003_TCP服务器添加OLEDu8g2显示状态 实验效果3-TCP服务器OLED1 拷贝显示驱动代码1.1 拷贝源代码1.2 将源代码添加到工程1.3 修改代码优化等级1.4 添加头文件路径1.5 修改STM32CubeMX工程 2 修改源代码2.1 添加头文件2.2 main函数修改 3 实验测试效果 实验效果3-TCP服务器OLED 1 拷贝显示驱动代码
1.1 拷贝源代码
拷贝HARDWARE文件夹里面包括OLED.c/.h和移植好的U8g2csrc文件夹
1.2 将源代码添加到工程
将代码分别添加到工程的User/OLED组和User/U8G2组所有.c文件都添加
1.3 修改代码优化等级
这里添加的好多文件用不到需要把代码优化等级调整到Level 1
1.4 添加头文件路径
..\HARDWARE\oled
..\HARDWARE\U8g2csrc1.5 修改STM32CubeMX工程
只需要添加3个控制引脚SPI和W5500是共用的
2 修改源代码
源代码全部在main.c里面修改
2.1 添加头文件
/* USER CODE BEGIN Includes */
#include string.h
#include stdio.h
#include w5500_spi.h
#include wizchip_conf.h
#include socket.h
#include OLED.h
#include u8g2_app.h
/* USER CODE END Includes */2.2 main函数修改
局部变量
/* USER CODE BEGIN 1 */u8g2_t u8g2;char draw_buf[20];
/* USER CODE END 1 */显示初始化 /* USER CODE BEGIN 2 */OLED_RST_Set();//OLED初始化HAL_Delay(100);OLED_RST_Clr();HAL_Delay(200);OLED_RST_Set();OLED_Init();u8g2Init(u8g2);//U8G2初始化u8g2_FirstPage(u8g2);printf(A simple TCP Server Application using W5500!\r\n);W5500Init(); //W5500初始化ctlnetwork(CN_SET_NETINFO, (void*)gWIZNETINFO); //配置网络参数wiz_PhyConf phyconf;phyconf.by PHY_CONFBY_SW;phyconf.duplex PHY_DUPLEX_FULL;phyconf.speed PHY_SPEED_10;phyconf.mode PHY_MODE_AUTONEGO;ctlwizchip(CW_SET_PHYCONF, (void*)phyconf); //配置PHY参数draw_waitcable(u8g2);//OLED提示等待网线连接PHYStatusCheck(); //检查网络连接状态PrintPHYConf(); //打印PHY配置信息printf(Simple TCP Server Application\r\n);draw_waitclient(u8g2);//OLED提示等待客户端连接/* USER CODE END 2 */主循环 添加的代码部分有“OLED提示”注释
/* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */printf(\r\nInitializing server socket\r\n);//Parameters in order socket_id, protocol TCP or UDP, Port number, Flags0//Return value is socket ID on successif(socket(1,Sn_MR_TCP,LISTEN_PORT,0)!1)//创建一个socketSocket号TCP/UDP类型端口号{//errorprintf(Cannot create Socket!\r\n);while(1);//halt here}//successprintf(Socket Created Successfully ! \r\n);uint8_t socket_io_modeSOCK_IO_BLOCK;ctlsocket(1, CS_SET_IOMODE , socket_io_mode);//set blocking IO modeprintf(IP Address is %d.%d.%d.%d\r\n,gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]);printf(Start listening on port %d ! \r\n,LISTEN_PORT);printf(Waiting for a client connection. \r\n);memset(draw_buf,0,20);snprintf(draw_buf,20,%d.%d.%d.%d:%d,gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3],LISTEN_PORT);draw_server(u8g2,draw_buf);//OLED提示等待客户端连接//Make it a passive socket (i.e. listen for connection)if(listen(1)!SOCK_OK)//监听端口{//our socket id is 1 (w5500 have 8 sockets from 0-7)//errorprintf(Cannot listen on port %d,LISTEN_PORT);while(1);}uint8_t sr0x00;//socket status registerdo{srgetSn_SR(1);//获取Sn_SR寄存器参数0~7 }while (sr!SOCK_ESTABLISHED sr!SOCK_CLOSED);if(srSOCK_CLOSED){printf(Some error occurred on server socket. Please restart.\r\n);while(1);}if(srSOCK_ESTABLISHED)//成功连接{//we come here only when a client has connected.//Now we can read data from the socketprintf(A client connected!\r\n);printf(Waiting for Client Data ...!\r\n);draw_conn_client(u8g2);//OLED提示客户端连接while(1){int lenrecv(1, receive_buff, RECEIVE_BUFF_SIZE);//从连接设备读取数据到receive_buffif(lenSOCKERR_SOCKSTATUS){//client has disconnectedprintf(Client has disconnected\r\n);printf(*** SESSION OVER ***\r\n\r\n);break;}receive_buff[len]\0;printf(Received %d bytes from client\r\n,len);printf(Data Received: %s, receive_buff);// memset(draw_buf,0,20);
// snprintf(draw_buf,20,%d.%d.%d.%d:%d,gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3],LISTEN_PORT);draw_waitdata(u8g2,(char *)receive_buff);//OLED提示显示接收数据if(strcmp((char*)receive_buff,Who are u)0){//判断接收到Who are umemcpy(receive_buff,I am role_2099!,15);//修改应答内容len 15;}//Echo the data back encloused in a [] pairsend(1,(uint8_t*)[,1);//starting sq bracket 向客户端发送[send(1,receive_buff,len);// the data 向客户端发送接收到的内容或者特定的回答send(1,(uint8_t*)],1);//closing sq bracket 向客户端发送]printf(\r\nECHO sent back to client\r\n);//Look for quit message and quit if receivedif(strcmp((char*)receive_buff,QUIT)0){//收到QUIT端口客户端连接printf(Received QUIT command from client\r\n);printf(Disconnecting ... \r\n);printf(*** SESSION OVER ***\r\n\r\n);memset(draw_buf,0,20);snprintf(draw_buf,20,%d.%d.%d.%d:%d,gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3],LISTEN_PORT);draw_server(u8g2,draw_buf);//OLED提示等待客户端连接disconnect(1);//disconnect from the clinet 断开客户端连接break;//come out of while loop 退出回到131行重新等待客户端连接}}//While loop (as long as client is connected)}//if block, client connect success}/* USER CODE END 3 */3 实验测试效果