问题标签 [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.

0 投票
0 回答
78 浏览

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,代码可以正常工作。

0 投票
0 回答
63 浏览

c - 在 STM32G474 上更改 SPI 数据大小中间事务

我有一个我正在使用的 LCD 屏幕,它要求发送的第一个 spi 数据包长度为 10 位,所有后续数据包长度为 8 位。commands10位也是如此,位也是如此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

0 投票
2 回答
223 浏览

c - STM32L476 flash 页擦除没有效果

我有一个问题,我尝试将值写入 STM32L476 中的闪存页(第 256 页@0x08080000)。但是,我在闪存状态寄存器中设置了 PROGERR 错误。这意味着尝试将非零值写入未擦除为 0xFFFFFFFF 的闪存位置。

我确实像这样擦除闪存:

但是,当我在擦除后检查闪存内容时,它并没有改变旧的、未擦除的值。

我试图将其更改为

但无济于事。

我错过了一些明显的东西吗?

0 投票
2 回答
135 浏览

stm32 - STM32 demo USB-DFU boot loader如何检查是否加载了用户代码?

STM32 HAL 演示 USB-DFU 引导加载程序包含以下代码:

这个谓词如何((*(__IO uint32_t *) USBD_DFU_APP_DEFAULT_ADD) & 0x2FFC0000) == 0x20000000确定用户代码是否加载到 STM32H7A3 MPU 上?
这个神奇的 0x2FFC0000掩码是什么?

0 投票
2 回答
119 浏览

freertos - 我应该在 STM32 HAL 中断回调中使用 xSemaphoreGiveFromISR() 还是 xSemaphoreGive()?

我已经在 FreeRTOS 中实现了一个错误任务,该任务将二进制信号量用作错误标志。该故障标志由 STM32 HAL 错误回调函数触发,例如HAL_I2C_ErrorCallbackHAL_UART_ErrorCallback。如果发生错误,错误回调函数将调用signalFault()函数,该函数将通过提供二进制信号量来引发故障标志。

我的问题是:我的signalFault()函数是否被视为中断服务例程 (ISR),因为它在 HAL ISR 错误回调中被调用?我是否需要调用xSemaphoreGiveFromISR()xSemaphoreGive()函数signalFault()来提高故障标志?

0 投票
1 回答
80 浏览

c - 使用 SPI 从 STM32 上的磁性编码器传输和读取 16 位值

我正在尝试通过 STM32 NUCLEO F446RE 上的 SPI 从AMS AS5050A磁性编码器读取值,但我无法让它工作。当我使用 HAL 库时,输出始终为 0。我对外围设备的设置是这样的:

到目前为止,这是我的代码:

当与它给出的命令一起使用时,该AMS_AS5050A_create_command函数向短路添加读/写位并添加奇偶校验位,这是正确的。它看起来像这样:0x3FFF0xFFFF

当我在 PuTTy 中查看输出时,输出始终为 0。这些函数没有给出任何错误代码,但 SPI 读取命令的输出始终为 0,即使我在它前面拿着一块磁铁:

有人知道我做错了什么吗?

0 投票
1 回答
68 浏览

c - 两个STM32单片机一个构建有哪些方法?

我有一个支持两个版本的固件,stm32f 系列和 stm32g 系列。为了简化部署过程中的选择,是否可以为两者构建一个固件?

固件使用来自 stm 的 HAL 并将它们构建为一个将在函数名称、变量名称等方面产生冲突。

我正在尝试的一个选项是将所有 HAL 函数和其他变量或类型重命名为每个特定的 MCU,并将它们放在一个包装器中,以便我可以同时包含两者。

有没有其他方法可以解决这个问题?

0 投票
1 回答
68 浏览

c++ - HAL_UARTEx_RxEventCallback Size 参数是否以编程方式或硬件计算

我正在使用 STM_HAL 库实现 UART-DMA,我想知道消息大小是由硬件计算的(例如计算时钟滴答直到线路空闲)还是通过某种程序方法(类似 strlen)。所以如果Size

由硬件计算,我可以以纯 HEX 格式发送数据,但如果它是通过类似的方式计算的,如果数据是并且必须以 ASCII 格式发送数据strline,我可能会收到问题。0x00

我试图在 Keil 中对生成的代码进行一些研究但失败了(也许我没有足够努力)所以也许有人可以帮助我。

0 投票
1 回答
31 浏览

c++ - VSCode 将 HAL 库中的 GPIO_TypeDef 标记为未知

我有一些函数引用GPIO_TypeDefSTM32_HAL 库中的结构,在 Keil 中我没有收到编译错误,但 VSCode 将其标记为“未知标识符”错误。我通过添加来修复它

main.h并且 Keil 和 VScode 现在都可以毫无问题地使用它,但也许我必须更改 VSCode 设置中的某些内容才能解决该问题。

0 投票
0 回答
27 浏览

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 提供,我是否会担心可移植性问题?