timzaak / blog

8 stars 1 forks source link

嵌入式开发 #77

Closed timzaak closed 12 months ago

timzaak commented 2 years ago

刚开始,买了espressif s2-solar 开发板,进行学习,但发现教程少,貌似不算太主流。使用PlatformIO+Clion 搭建开发平台,也搭建的不是特别好,而且这个开发板即使在 espressif 里面,也不是主流,这就很尴尬了。捣鼓了约有一周的时间,开发环境还是有问题,无法搞定只带最少依赖的环境出来。放弃掉先。

后面又买了 stm32 平台的板子, 这次买板子,就着重考虑了3个方面,1:支持Rust,2:有教程,最好视频,主要是电机方面,3:主流。按照这个标准在淘宝上搜, 就找到了 stm32f407xx 的板子。 用 Clion+openOCD+Rust 构建开发环境,很顺利。 adc、fscm、Timer、DMA、PWM 等功能,对比着店家提供的C源码,用Rust再实现一遍,虽有小问题,但都能独自解决。期间发现 stm32官方提供的Rust HAL库,有各种小BUG,最神奇的是: stm32fxx 、stm32lxx, stm32hxx 三个系列的 HAL 库,抽象程度不在同一个水平线上。

从学习感受上说,流行板子的隐含问题很少,更多的是概念的学习,时钟、频率、中断等都是不熟知的概念。另外Rust 的库,稳定性、正确性上确实还有些欠缺。后续真成品,需要考虑自己来维护 HAL 库。

目前开始学电机,升级打怪的 BOSS 阶段,希望一切顺利。

timzaak commented 1 year ago

电机这一块没搞,主要是那电机太大号了,怕被过。

现在由于公司的需求,嵌入式要重新捡起来了。

买了 esp32c3-M1 的板子,蓝牙/wifi 自带,RISC-V 架构,还支持 Rust, 简直不要太舒服。

开发体验 和 espressif s2-solar 完全两个世界,现重开此 issue,记录相关学习资料。

参考:

  1. 环境准备入门书
  2. esp32c3 硬件抽象+examples
  3. esp32网络编程
  4. esp32 wifi/ble 代码库

刚基于 esp32-wifi 写了个蓝牙/WIFI Combo 配网 Demo。花了两天的时间,大部分时间花在了熟悉 embassy 技术栈和调试依赖包,具体编写代码时间反而很少。编写过程还算流畅,直接抄官方 example 即可。

mDNS、SmartConfig 等 esp32-wifi 并不支持,需要自行实现。

若真做生产代码的话,还是要基于 esp32-idf-hal 来开发。我这边由于公司加密软件的问题,没法尝试。 以后真立项了再说。

待解决问题 (工程化)

参考: async-rust-vs-rtos

例子: MQTT: https://github.com/flyaruu/esp32-mqtt

timzaak commented 4 months ago

硬件Debug

硬件开发Debug 除了 使用 STLink / JLink 等进行debug, 还需要分析硬件上的问题。

万用表

获取 点与点 之前的电压、电流、电阻、连通性。一般是在电压、电流稳定的时候用。测试硬件是否有问题,是否有预期的稳定电压、电流、电阻值。

逻辑分析仪

分析数字信号,检查通信数据是否正确,是否符合协议。

示波器

捕获和分析模拟信号,也就是电压、电阻、电流,关注信号的幅度、频率、相位和时间关系,显示信号的波形。

timzaak commented 4 months ago

开发包

probe-rs 烧录、debug。

OTA

先解决 bootloader 烧录。由 bootloader 解决 OTA 问题。 boot0、boot1 开关可解决开发、正式环境问题。 bootloader 上(理论篇) esp32c3-ota-experiment

模拟器

Wokwi https://wokwi.com/

timzaak commented 4 months ago

常用通信协议

UART(通用异步收发传输器)和 SPI(串行外围接口)是两种常见的串行通信协议,它们在许多方面都有所不同:

通信方式:

UART 是异步通信协议,数据传输时没有时钟信号。数据传输是通过发送和接收端之间的起始位、数据位、校验位和停止位来同步的。 SPI 是同步通信协议,数据传输时需要时钟信号。数据在时钟的控制下同步地传输,通常包括主设备(Master)和从设备(Slave)。

连接方式:

UART 通常使用两根线进行连接,即一根传输线(TX)和一根接收线(RX)。 SPI 使用多根线进行连接,包括主设备的时钟线、数据线、片选线,以及从设备的相应线路。

速度:

SPI 通常比 UART 具有更高的速度,因为 SPI 通常使用时钟同步传输,速度可以更快。 UART 的速度通常较慢,因为它是异步的,并且受限于波特率设置。

主从关系:

在 SPI 中,存在明确定义的主设备和从设备。主设备控制通信的时序,并向从设备发送命令和数据。 在 UART 中,通常没有严格定义的主从关系。通信的双方可以是对等的,可以在需要时互相发送和接收数据。

应用:

UART 通常用于简单的串行通信,例如与传感器、GPS 接收器、蓝牙模块等外围设备的通信。 SPI 通常用于需要高速数据传输和主从设备通信的场景,例如与存储器、传感器、显示器等设备的通信。

I2C(Inter-Integrated Circuit)是一种串行通信协议。 SPI 低配版本。 I2S(Inter-IC Sound)是一种数字音频接口标准,用于在集成电路之间传输音频数据。

SAR 通常指的是 "Successive Approximation Register",这是一种用于模拟数字转换(ADC)的技术。在 SAR ADC 中,输入模拟信号被逐步逼近并转换为相应的数字值。

RTC 是 "Real-Time Clock" 的缩写,即实时时钟。

timzaak commented 4 months ago

电容作用讲解: https://www.youtube.com/watch?v=QLZ5TQ3G3rs

数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。

硬件开发生命周期:EVT、DVT、PVT、MP 概念