当前位置: 首页 > wzjs >正文

做网页要去哪个网站2021年最为成功的营销案例

做网页要去哪个网站,2021年最为成功的营销案例,印度电商平台网站建设策划,宿州网站开发建设第一步:资料下载 以太网协议栈芯片 CH395 - 南京沁恒微电子股份有限公司 第二步:准备工程 (1) 首先准备一个编译无报错、可以正常打印和延时的工程文件,官方例程采用STM32F1芯片,但本文采用GD32F470芯片 …

第一步:资料下载

以太网协议栈芯片 CH395 - 南京沁恒微电子股份有限公司

第二步:准备工程

(1) 首先准备一个编译无报错、可以正常打印和延时的工程文件,官方例程采用STM32F1芯片,但本文采用GD32F470芯片

(2)将例程代码中的PUB文件夹加入,keil工程添加CH395CMD.c文件和CH395SPI_HW.c文件

(3)将例程代码中的main.c内容全部加入到自己的main.c文件中,如果觉得函数较多,可以自己放置到CH398CMD.c函数中

(4)例程代码使用SPI_DMA,看个人需要,使用则配置,不使用则屏蔽

(5)此时编译有很多错误,继续下一步

第三步:引脚配置

ch395Q支持SPI和串口通信,本文采用SPI通信,我们需要配置6个GPIO口,分别如下

一、SPI通信基础引脚

  1. CS(片选引脚)
    • 功能:用于使能CH395的SPI通信,低电平有效。
    • 配置:需连接到STM32的GPIO引脚,并在代码中控制其电平12。
  2. SCK(时钟引脚)
    • 功能:提供SPI通信的时钟信号,由主设备(如STM32)控制。
    • 配置:需连接到STM32的SPI外设时钟线(如SPI1_SCK),并设置时钟频率(如36MHz)13。
  3. MOSI(主出从入引脚)
    • 功能:主设备向CH395发送数据。
    • 配置:需连接到STM32的SPI外设MOSI线(如SPI1_MOSI)
  4. MISO(主入从出引脚)
    • 功能:CH395向主设备返回数据。
    • 配置:需连接到STM32的SPI外设MISO线(如SPI1_MISO)

二、辅助控制引脚

  1. INT(中断引脚)
    • 功能:用于CH395通知主设备事件(如数据接收完成、错误状态)。
    • 配置:需连接到STM32的外部中断引脚(如PA0),并设置为输入模式,同时启用中断服务程序14。
  2. RST(复位引脚)
    • 功能:硬件复位CH395,低电平有效。
    • 配置:需连接到STM32的GPIO引脚,初始化时拉低再拉高以完成复位
CH395_PORT_INIT();//SPI初始化
CH395_GPIO_INIT();//RST和INT引脚初始化
CH395Reset();//修改RST对应引脚
xCH395CmdStart();//修改CS对应引脚,CMD_START_HANDEL();可以删除,无作用
xEndCH395Cmd();//修改CS对应引脚,CMD_END_HANDEL();可以删除,无作用

第四步:延时函数配置

例程代码使用debug.c文件中配置的延时函数,本文采用自定义函数,或者直接全文替换 

void Delay_Us(uint32_t us)
{us *= 168;  // 72MHz下1us≈72个周期(每条循环指令约3周期)while (us--) {__NOP();  // 内联汇编NOP指令 }
}void Delay_Ms(uint32_t ms)
{delay_1ms(ms);
}

第五步:编译

此处编译后肯定会多处报错,比如UINT8没有定义,stm32f10x_dma.h文件找不到等等,这些都是正常的,按照自己的经验进行修改即可,直到编译无警告,无报错

第六步:ip修改

InitCH395InfParam() /* CH395 Related definition */
const uint8_t CH395IPAddr[4] = {192, 168, 1, 101}; /* CH395 IP  */
const uint8_t CH395GWIPAddr[4] = {192, 168, 1, 1}; /* CH395 gateway */
const uint8_t CH395IPMask[4] = {255, 255, 255, 0}; /* CH395 mask *//* Socket definitions */
const uint8_t Socket0DesIP[4] = {192, 168, 1, 123}; /* Destination IP address for Socket 0 */
const uint16_t Socket0DesPort = 1000;               /* Destination port for Socket 0 */
const uint16_t Socket0SourPort = 5000;              /* Source port for Socket 0 */

第七步:查看保活机制

keeplive_set()#define DEF_KEEP_LIVE_IDLE (15 * 1000)   /* Idle time */
#define DEF_KEEP_LIVE_PERIOD (20 * 1000) /* Send a KEEPALIVE packet every 20 seconds */
#define DEF_KEEP_LIVE_CNT 200            /* Number of retry attempts */DEF_KEEP_LIVE_IDLE:空闲时间,可能指的是在TCP连接建立后,如果在15秒内没有数据传输,则开始发送保活包。这与TCP的保活机制中的空闲时间类似,用于确定何时开始检测连接是否有效。
DEF_KEEP_LIVE_PERIOD:每隔20秒发送一次保活包。这个参数可能控制保活包的发送频率,确保在空闲期间定期检测连接状态。
DEF_KEEP_LIVE_CNT:重试次数200次。当保活包发送后未收到响应时,会进行重试,这个参数指定最大重试次数,超过后认为连接已断开。
  • 保活机制主要用于维持TCP连接的活跃状态,防止因网络中断或空闲导致连接被中间设备(如路由器、防火墙)主动断开
  • 应对网络环境不稳定:在工业控制、远程监控等场景中,网络可能因电磁干扰、信号衰减等问题出现瞬时中断。保活机制通过周期性发送心跳包(空数据包),可快速检测链路异常并触发重连,避免数据丢失。
  • 支持物联网长连接需求:CH395常用于MQTT、HTTP长连接等物联网协议,需保持设备与服务器持续通信。若长时间无数据传输,服务器或网关可能关闭连接,保活包能维持连接有效性

第八步:全局中断

 CH395GlobalInterrupt  --》  GINT_STAT_SOCK0

针对一个TCP连接,主要有以下几个中断

void CH395SocketInterrupt(uint8_t sockindex)
{sock_int_status[sockindex] |= CH395CMDGetSocketInt(sockindex); /* Gets the socket interrupt status */if (sock_int_status[sockindex] & SINT_STAT_RECV) /* Receive interruption */{//接收中断,接受到数据后会进来这里,但例程代码在Data_Loop函数中处理// Handle it in the main program}if (sock_int_status[sockindex] & SINT_STAT_SENDBUF_FREE) /* The send buffer is free and can continue writing data to be sent */{//发送缓冲区为空,可以发送数据,但例程代码在Data_Loop函数中处理// Handle it in the main program}if (sock_int_status[sockindex] & SINT_STAT_SEND_OK) /* Send completion interrupt */{//发送完成中断sock_int_status[sockindex] &= ~SINT_STAT_SEND_OK;}if (sock_int_status[sockindex] & SINT_STAT_CONNECT) /* The connection is interrupted, valid only in TCP mode */{//连接成功中断sock_int_status[sockindex] &= ~SINT_STAT_CONNECT;CH395CMDSetKeepLive(sockindex, 1); /* Enable the KEEPALIVE timer */LOG("SINT_STAT_CONNECT\r\n");}if (sock_int_status[sockindex] & SINT_STAT_DISCONNECT) /* Disconnect interrupt, valid only in TCP mode */{//断开连接中断sock_int_status[sockindex] &= ~SINT_STAT_DISCONNECT;LOG("SINT_STAT_DISCONNECT \r\n");}if (sock_int_status[sockindex] & SINT_STAT_TIM_OUT) /* Timeout interrupt, valid only in TCP mode */{//连接超时中断,比如服务器未打开sock_int_status[sockindex] &= ~SINT_STAT_TIM_OUT;LOG("SINT_STAT_TIM_OUT\r\n");}
}

Data_Loop函数,主要就是将接收到的数据发出去

第九步:测试

调试心得 

(1)当服务器主动关闭连接时,会进入TIME_WAIT状态(持续2*MSL,默认约60秒),导致原端口暂时无法复用,如果服务器没有做端口复用这个功能,可能会出现这个现象

http://www.dtcms.com/wzjs/387506.html

相关文章:

  • 贵阳学网站建设全国唯一一个没有疫情的城市
  • 制作网站学什么软件表白网站制作
  • 做户外旅游网站搜狗搜索引擎入口
  • 网站魔板大全外贸高端网站设计公司
  • 我买了一个备案网站 可是公司注销了seo前线
  • 安徽住房和城乡建设厅网站首页如何使用免费b站推广网站
  • 哪个网站可以做任务页面seo优化
  • 运维工程师可以自学吗公司seo是指什么意思
  • 男女做羞羞漫画网站百度广告推广怎么收费了
  • 品牌设计得公司曲靖seo建站
  • 2345网址导航app上海seo博客
  • 网站上传百度多久收录seo网站推广优化就找微源优化
  • 现在ui做的比较好的网站百度收录接口
  • wordpress is admin武汉seo优化代理
  • 动态网站登录加注册怎么做百度网盟官网
  • 东莞塘厦网站制作永久免费客服系统软件
  • 南京网站建设咨询百度广告怎么投放
  • 网站开发用到的编程南宁百度推广排名优化
  • 网站上传文件功能实现营销的方法和技巧
  • 电商网站的在线客服怎么做好搜搜索
  • 深圳网站建设网络推广盛大游戏优化大师
  • linux网站建设今天刚刚的最新新闻
  • 建设网站答题赚钱52种新颖的促销方式
  • 专做滚针的网站新软件推广
  • 政府单位如何做网站重庆整站seo
  • 网站建设学校西安百度网站快速排名
  • 使用局域网可以做网站吗bing搜索引擎
  • 邢台网站建设要多少钱seo网络培训机构
  • 自己做的网站套dedecms教程网站关键词排名seo
  • 劳力士手表价格及图片 官方网站杭州seo外包服务