我正在试图弄清楚如何使用这个新的HAL驱动程序.我希望使用HAL_UART_Receive_IT()
设置设备的数据来接收数据时运行中断功能.
问题是你必须在中断触发之前指定要读取的数据长度.我计划像不同长度的命令一样发送控制台,因此不能有固定的长度.我假设唯一的方法是一次读取单个字符并构建一个单独的字符串.
HAL驱动程序似乎有一个问题,如果您设置HAL_UART_Receive_IT()
接收x
字符数,然后尝试发送多个x
字符,将出现错误.
目前我不知道我是否正确的方式,任何想法?
我正在尝试使用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)
但我得到了相同的结果..
我正在尝试让 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
, …