小编Ham*_*Fet的帖子

STM32F4 UART HAL驱动程序

我正在试图弄清楚如何使用这个新的HAL驱动程序.我希望使用HAL_UART_Receive_IT()设置设备的数据来接收数据时运行中断功能.

问题是你必须在中断触发之前指定要读取的数据长度.我计划像不同长度的命令一样发送控制台,因此不能有固定的长度.我假设唯一的方法是一次读取单个字符并构建一个单独的字符串.

HAL驱动程序似乎有一个问题,如果您设置HAL_UART_Receive_IT()接收x字符数,然后尝试发送多个x字符,将出现错误.

目前我不知道我是否正确的方式,任何想法?

hal stm32 stm32f4discovery

18
推荐指数
2
解决办法
6万
查看次数

在Flash中为用户数据分配内存(STM32F4 HAL)

我正在尝试使用STM32F405的内部闪存来存储一堆用户可设置的字节,这些字节在重新启动后仍然存在.

我正在使用:

uint8_t userConfig[64] __attribute__((at(0x0800C000)));
Run Code Online (Sandbox Code Playgroud)

为我想要存储的数据分配内存.

当程序启动时,我检查第一个字节是否设置为0x42,如果没有,我使用以下方法设置:

HAL_FLASH_Unlock();
HAL_FLASH_Program(TYPEPROGRAM_BYTE, &userConfig[0], 0x42);
HAL_FLASH_Lock();
Run Code Online (Sandbox Code Playgroud)

之后,我检查了价值userConfig[0],我看到0x42......太棒了!

然而,当我点击重置时,再次查看该位置,它0x42不再是......

知道我哪里错了吗?我也尝试过:

#pragma location = 0x0800C00
volatile const uint8_t userConfig[64]
Run Code Online (Sandbox Code Playgroud)

但我得到了相同的结果..

microcontroller stm32 flash-memory stm32f4discovery

12
推荐指数
1
解决办法
2万
查看次数

STM32F4 HAL DMA UART TX

我正在尝试让 UART 传输在 stm32f405 上通过 DMA 工作。我的应用程序的这一部分旨在作为命令行界面发送文本字符串。我让 UART 的 RX 部分与 DMA 配合良好(使用 1 字节循环 DMA 来处理传入的任何内容),但 TX 端被证明有点棘手。

我可以使用以下方式发送数据字符串:HAL_UART_Transmit_DMA(&handle, pData[], strlen(pData))前提是函数的连续调用之间存在延迟。一旦我的程序决定依次发送两个字符串,新的数据指针就会被忽略。

通过使用,while(HAL_UART_Transmit_DMA(...) != HAL_OK){}我可以让程序等待所需的时间并发送连续的字符串。

这可以工作一段时间(几十次传输),然后由于 HAL_NOT_OK 而卡住。

作为参考,我的 DMA 设置是:DMA2 stream 7, channel 4, mem to periph, periph inc disabled, mem inc enabled, mem and periph align byte, normal mode (not circular), low priority, fifo disabled

UART 设置为9600 baud, 8 bit word, …

fifo stm32 dma uart stm32f4discovery

5
推荐指数
1
解决办法
3万
查看次数

标签 统计

stm32 ×3

stm32f4discovery ×3

dma ×1

fifo ×1

flash-memory ×1

hal ×1

microcontroller ×1

uart ×1