关于曾经遇到的stm32 开发中所遇到的问题

遇到的问题

adc采样的时候,采用多通道独立采样方式的时候,会出现输出不对称的情况?

解决方案:
(1)修改每次采样channel的id
(2)deinit 消除对应channel的初始化
(3)DMA的方式----更加快也更加方便

STM32接收上位机以太网发来的数据包,然后要求返回包含测量数据的数据包,下位机接收到的数据包出现沾包的情况?(其是循环放在w5500 的接收缓冲区内部的)

出现沾包的问题,主要则是由两个的原因造成的,发送端,和接收端

解决方案0
发送端要禁用nagle算法(因为发送端之前采用的是网上的那种以太网测试程序,其自身写的不够好)

解决方案1:
采用判断长度的情况下,实现数据包的解析。
设定一个数据包预处理环节,对出现的数据包进行解析,和判断是否又数据传输出错的crc校验。
关于曾经遇到的stm32 开发中所遇到的问题

同时设定了一个最多处理沾包的个数,最多处理5个

(否则出现沾包太多会出现直接掉线的情况)

解决方案2
(1)简化下位机的代码,之前设定了LCD屏幕显示,其通过SPI跟LCD向连接,其是通过一行一行的像素更新上去的, 其工作的速度相对就十分的缓慢),更新信息较多的时候,就会刷新慢。 此时,分成两个工作状态,做一个状态的折中的选择,当需要高速的时候,就屏蔽掉lcd 的显示部分
(2) 定时刷新,lcd 既然耗时,但是某种情况下,我们又需要对lcd 进行观察,因此,此时我们通过while 循环中设定递减,循环一定次数再去刷新一下lcd

实现对底层设备的高速的监测,以太网的速度不够快?为什么?

两个方面
(1)本身w5500 就没办法达到很快的速度
80M的工作频率?

(2)stm32f103rc 系列 的spi 有三个, spi1 挂接再72M, spi2 spi3 挂接在36M, spi是至少2分品,因此 spi 1理论上最大可以是在36MHz的工作频率,spi2 和 spi3 则最大时18M了

其本身就没办法很快了

我是如何解决这个问题的:

(1) 分析了spi具体的核心的代码,分析到具体每个语句耗时多久
(2) 测量实际的设定的波形,可以看出数据准备时间,以及数据在spi上与w5500交互的流程。

测量了spi的波形
关于曾经遇到的stm32 开发中所遇到的问题

解决方案:
(1)选择更高速的stm32 芯片
f4 或者 h7 系列

(2) stm32(选择自带mac)的 + phy芯片
(3) 采用phy 芯片

因此有了后续的解决方案
zynq+phy芯片+lwip的解决方案(得出结论是采用tcp的方案是没有办法实现太过于高速的数据的传输方案)

artix 核心板+ phy芯片,自己构建数据采集模型,采用fpga+phy