问题标签 [stm32-hal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arduino - STM32F407 SPI读取错误数据(翻译Arduino SPI)
我正在使用 STM32F407,只想翻译 Arduino SPI.transfer() 函数。
从 IC 发送 4 个字节后,我想接收 8 个字节。据我了解,传输是正确的,但我使用的 HAL_SPI_TransmitReceive 函数不会导致缓冲区在错误的时间或错误的数据读取数据。
在这里你可以看到我的传输: 逻辑分析仪
接收从逻辑分析仪读取的字节:0xc6、0x52、0x17、0xA4、0x00、0x30、0x04、0x8E
这里是我的控制台日志的字节:0xc2、0x00、0x03、0x80、0x00、0x10、0x00、0x86
我不知道为什么读数不一样。
这些是我的写/接收功能:
在 Arduino 板上,通过使用 SPI.transfer 而不是我的 spi_write/read,代码可以正常工作。
c - 在 STM32G474 上更改 SPI 数据大小中间事务
我有一个我正在使用的 LCD 屏幕,它要求发送的第一个 spi 数据包长度为 10 位,所有后续数据包长度为 8 位。commands
10位也是如此,位也是如此data
。向设备发送数据必须在同一事务中的命令之后发生。
我尝试了一些利用 的实现,HAL
但它们似乎都在 MOSI 和 CLK 线上引起了一些奇怪的行为。
方法 1:使用 HAL
方法2:寄存器操作
单独使用这些功能时,它们可以正常工作,但是当一个接一个地使用这些功能时,事务不能正常工作。
使用逻辑分析仪,我可以看到初始化/取消初始化时间似乎相当长,并且在重新初始化时会导致 CLK 和 MOSI 线发生意外变化。
如果可能的话,我宁愿不要把数据搞砸,但这是另一种选择。(查看设备制造商的示例,这是他们采用的方法)。
https://www.newhavendisplay.com/specs/NHD-0420DZW-AB5.pdf https://github.com/NewhavenDisplay/NHD-0420DZW_Example/blob/main/NHD-0420DZW_Serial/NHD-0420DZW_Serial.ino
c - STM32L476 flash 页擦除没有效果
我有一个问题,我尝试将值写入 STM32L476 中的闪存页(第 256 页@0x08080000)。但是,我在闪存状态寄存器中设置了 PROGERR 错误。这意味着尝试将非零值写入未擦除为 0xFFFFFFFF 的闪存位置。
我确实像这样擦除闪存:
但是,当我在擦除后检查闪存内容时,它并没有改变旧的、未擦除的值。
我试图将其更改为
但无济于事。
我错过了一些明显的东西吗?
stm32 - STM32 demo USB-DFU boot loader如何检查是否加载了用户代码?
STM32 HAL 演示 USB-DFU 引导加载程序包含以下代码:
这个谓词如何((*(__IO uint32_t *) USBD_DFU_APP_DEFAULT_ADD) & 0x2FFC0000) == 0x20000000
确定用户代码是否加载到 STM32H7A3 MPU 上?
这个神奇的 0x2FFC0000掩码是什么?
freertos - 我应该在 STM32 HAL 中断回调中使用 xSemaphoreGiveFromISR() 还是 xSemaphoreGive()?
我已经在 FreeRTOS 中实现了一个错误任务,该任务将二进制信号量用作错误标志。该故障标志由 STM32 HAL 错误回调函数触发,例如HAL_I2C_ErrorCallback
或HAL_UART_ErrorCallback
。如果发生错误,错误回调函数将调用signalFault()
函数,该函数将通过提供二进制信号量来引发故障标志。
我的问题是:我的signalFault()
函数是否被视为中断服务例程 (ISR),因为它在 HAL ISR 错误回调中被调用?我是否需要调用xSemaphoreGiveFromISR()
或xSemaphoreGive()
函数signalFault()
来提高故障标志?
c - 使用 SPI 从 STM32 上的磁性编码器传输和读取 16 位值
我正在尝试通过 STM32 NUCLEO F446RE 上的 SPI 从AMS AS5050A磁性编码器读取值,但我无法让它工作。当我使用 HAL 库时,输出始终为 0。我对外围设备的设置是这样的:
到目前为止,这是我的代码:
当与它给出的命令一起使用时,该AMS_AS5050A_create_command
函数向短路添加读/写位并添加奇偶校验位,这是正确的。它看起来像这样:0x3FFF
0xFFFF
当我在 PuTTy 中查看输出时,输出始终为 0。这些函数没有给出任何错误代码,但 SPI 读取命令的输出始终为 0,即使我在它前面拿着一块磁铁:
有人知道我做错了什么吗?
c - 两个STM32单片机一个构建有哪些方法?
我有一个支持两个版本的固件,stm32f 系列和 stm32g 系列。为了简化部署过程中的选择,是否可以为两者构建一个固件?
固件使用来自 stm 的 HAL 并将它们构建为一个将在函数名称、变量名称等方面产生冲突。
我正在尝试的一个选项是将所有 HAL 函数和其他变量或类型重命名为每个特定的 MCU,并将它们放在一个包装器中,以便我可以同时包含两者。
有没有其他方法可以解决这个问题?
c++ - HAL_UARTEx_RxEventCallback Size 参数是否以编程方式或硬件计算
我正在使用 STM_HAL 库实现 UART-DMA,我想知道消息大小是由硬件计算的(例如计算时钟滴答直到线路空闲)还是通过某种程序方法(类似 strlen)。所以如果Size
在
由硬件计算,我可以以纯 HEX 格式发送数据,但如果它是通过类似的方式计算的,如果数据是并且必须以 ASCII 格式发送数据strline
,我可能会收到问题。0x00
我试图在 Keil 中对生成的代码进行一些研究但失败了(也许我没有足够努力)所以也许有人可以帮助我。
c++ - VSCode 将 HAL 库中的 GPIO_TypeDef 标记为未知
我有一些函数引用GPIO_TypeDef
STM32_HAL 库中的结构,在 Keil 中我没有收到编译错误,但 VSCode 将其标记为“未知标识符”错误。我通过添加来修复它
到main.h
并且 Keil 和 VScode 现在都可以毫无问题地使用它,但也许我必须更改 VSCode 设置中的某些内容才能解决该问题。
embedded - STM32-HAL 库可移植性
我有一个关于 stm32f103vet6 MCU 的项目,但是在制造板到来之前(可能真的很长)我需要进行一些调试。整个项目是使用 STM32-HAL 库在高级上编写的,我想知道我是否可以在另一个 MCU 上获得开发板并创建类似的 CubeMX 项目。所以我有两个变体(因为我的 MCU 上的开发板不可用)
我可以在另一个 STM32F103xxxx MCU(例如 STM32F103RBT6 或 STM32F103C8T6)上找到开发板,但具有相同的连接支持(我需要 UART、CAN、SPI)但数量较少(例如只有 1 个 SPI 而不是 3 个)并且依赖于相同的 UserLabels与主项目一样,但将主项目中的各种 UL 分配给新的较小引脚,所以我的所有功能仍然可以工作,我将能够通过逻辑分析仪对其进行测试。
另一种方法是找到一些 STM32FxxxVxxx(例如 STM32F303VCT6)板,因此使用相同数量的引脚,我将能够在 CubeMX 中制作非常相似的引脚排列,并使用几乎不变的所有原始文件。
但是对于这两种变体,我想知道我是否在便携性方面遇到了一些问题。因此,如果所有低级部分都由 CMSIS 和 HAL 提供,我是否会担心可移植性问题?