ST MCU 最新通讯接口实战经验设计资源
本帖最后由 STM新闻官 于 2025-6-24 15:11 编辑#技术资源# 客户要使用一个 XSPI 外设来驱动两个 QSPI LCD,使用两个 GPIO 来替代 XSPI 的硬件片选引脚,来分时控制两个 LCD。在初始化 LCD 时遇到问题,发现屏幕点不亮。通过逻辑分析仪查看 XSPI 的输出信号,发现 XSPI 在硬件片选引脚拉低前,先输出了一串时钟。如果使用 XSPI的硬件片选信号,通信不会受片选为高时的时钟影响。但客户使用普通 GPIO,由软件控制LCD 片选,这样无法与有效时钟同步,可能输出无效数据。
客户使用 STM32H7 作为 SPI 从机,想在 SPI 通讯中实现回显功能。客户的做法是在 SPI RXP 中断中向 TXFIFO 中填充接收到的数据,但是这样带来的问题是,可能会在下一帧来不及发送从主机接收到的上一帧数据,导致发送的数据推迟了一帧,并且有可能会出现 TXFIFO为空的情况。在 STM32H7 中,SPI 具有可配置的出现下溢时的从机发送器行为,可以利用这点来实现客户的需求。
某客户在使用 STM32G0B1 的 FDCAN 时,发现接收到的数据包比主机实际发送的个数还多,例如主机一共只发了 3000 个包,但 STM32G0B1 的 FDCAN 可能会接收到 3006 个。但有偶尔也会出现丢包情况,使用 CAN 分析仪抓包进行分析也未找到具体原因。
客户使用 STM32U5 来开发一款外销型充电产品时,需要使用到 USB_OTG_HS 实现 HUB功能,并对 HUB 上的 U 盘进行高速写入操作。然而,客户在 NUCLEO-U5A5ZJ 板上运行 ST 官方例程 Ux_Host_HUB_HID_MSC 进行 U 盘性能读写测试时发现,在向 U 盘中写入小量数据是好的。但是,如果一次性连续写入大量数据如 1G 时会随机出现写入失败,返回值为 0x5C。
使用 STM32CubeMX 可以快速地生成USBx Device 相关类的示例工程,本文以 NUCLEO-H563 为例,实现USBx Device HID Standalone 类,可以以此为参考移植到其他的 USBx Device 类。
以 NUCLEO-H563 为例,实现 USBx Device MSC Standalone 类,以 MCU 内部的 RAM 为存储介质参考移植到其他的 USBx Device 类。
在使用 STM32G0C1NEY6TR的USART6 和另外一颗STM32L433CCY6TR 进行单线串口半双工通信时出现一项容易复现的数据帧错误,逻辑分析仪抓到的数据显示停止位报错。本文就该客制化单线串口半双工通信帧错误问题进行逐步分析并解决。
STM32C071作为主控 MCU,驱动代码使用了版本STM32Cube_FW_C0_V1.2.0,应用程序调用 SPI HAL API 与 NFC 模块通信,SPI 工作在Master 模式,调用 HAL_SPI_Transmit 函数发送数据的时候,出现 Hardfault现象。本文对HAL库的SPI驱动导致的hardfault问题进行分析并提供解决方案。
客户反馈其产品在使用 STM32G0C1NEY6TR 和一个充电管理 IC 通信时,速率为100KHz 时通信正常,但工作在 400KHz 时,有时会产生 I2C 错误。把 I2C GPIO 配置为推挽输出后产生错误的概率会下降。
客户在使用 STM32U595QII6Q 开发产品时发现,使用该芯片的 SPI3 与对方通信时,如果发送的数据超过 1024 字节时,SPI3 作为主设备,使用 HAL 库的 SPI 相关发送函数,发送完成回调函数不会执行。
当前越来越多的 STM32 芯片支持 USB-PD,目前新提供的 STM32 的 USB 例程中会把USB-PD 和 USB 合在一起。如果有客户只需要 USB,那就需要剥离 USB-PD。另外,STM32U5 的 Cube 库中只提供了基于 USBX 的例程,如果客户要使用USB_USBD_Library 则需要到 GitHub 上去下载。
客户需要评估 STM32U5+SPI LCD 整屏刷新时的显示效果。一般 SPI LCD 都内置了GRAM,在使用 TouchGFX 时都会选用部分帧缓冲以节省内存。客户需要整屏刷新,并尽量节省内存,则需要使用单帧缓冲的方式。
目前 USBx host standalone 的官方示例较少,仅有一个。不过使用 CubeMX 可以快速地生成USBx Host 相关类的示例工程,会很方便大家的开发。这里以 NUCLEO-H563 为例,实现USBx Host HID 类,大家可以以此为参考移植到其他的 USBx Host 类。
这个例子中,使用了 I/O 口作为复用引脚时,其 I/O 引脚仍然还是连接到内部其他电 路的,包括连接到输入数据寄存器,连接到 EXTI 电路。所以,我们可以利用这种连接来 帮助我们实现一些特殊的功能。
是协助客户解 决这个问题,提供给客户不带 PD 功能的虚拟串口工程。
细心的用户可能会发现,使用到我们的 6.9.1 对 STM32H5 的USB 外设进行配置的时候,只能用 USBX,而以前的 Classic USB 库不能选择了。 由于 USBx 是基于 Threadx OS 的,客户更多的希望是裸机版本的,所以在这儿给大家提供一个移植的方法。
某客户开发一款高精度工业测量仪器,打算使用 STM32H7+外置高精度 ADC 采样的分离方案来实现。客户选取了一款所属行业内比较通用的 ADC 采样芯片。在读取该 ADC芯片手册后,客户发现该款 ADC 采样芯片使用 MCU 标准 SPI 与之通信存在问题,手册里面也推荐使用 DSP/FPGA 的来实现,客户一下就犯难了。为了降低成本和开发周期,客户想使用 MCU 来替代 DSP/FPGA 与 ADC 采样芯片的高速通信。
某客户在使用 STM32U5 开发一款产品时需要使用到 USB Custom 进行双向通信,并反馈STM32U5 使用的是 Azure USBx 协议栈,不再支持 ST USB device 库。客户表示只熟悉 STUSB Device 库,对 USBx 协议栈与 API 没有任何使用经验。查阅目前所有 USBx 的例程,发现目前 USBx 均没有可参考的 Custom HID 双向通信范例,客户希望提供使用 USBx HID 进行双向通信的例程,这里简单介绍下利用 CubeMx 创建工程的实现过程。
有客户反馈,他最近在做一个项目用到 STM32L051 这款单片机。平常的 USART 串口传输是 8 位数据,但是他的项目需要用串口传输 9 位数据。当设置为 8 位数据时,串口响应中断正常。但是,当设置为 9 位数据时,串口就不产生中断了。USART2 的 ISR 寄存器 RXNE 位被置1,RDR 寄存器接收到了数据,就是不产生中断,数据也读不出来。请问是不是 HAL 库函数哪里出了bug?另外,客户还补充说,使用 STM32CubeMX 进行配置并创建的工程代码。
客户反映 STM32L011 PA6 空片时进入 system memory 内部自带的 bootloader后,GPIO 的实际测试状态同 AN2606 中描述 push-pull pull-down 有出入,实际测试为高电平。
这次我们介绍另外一种方法,在 DMA 方式下利用硬件接收超时中断(Receiver timeout interrupt)实现不定长数据的接收。
STM32通讯接口实战经验合集-2
STM32通讯接口实战经验合集-3
STM32通讯接口实战经验合集-4
STM32通讯接口实战经验合集-5
STM32通讯接口实战经验合集-6
STM32通讯接口实战经验合集-7
STM32通讯接口实战经验合集-8
STM32通讯接口实战经验合集-9
哇塞!这就像一把钥匙,打开了ST MCU最新通讯接口实战经验和设计资源的大门,让开发者们能尽情探索,开启技术新征程!{:lol:}
页:
[1]