STM32
直播中

回头太晚

9年用户 746经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

求助,关于stm32的HAL库对UART采用DMA发送的地址位标志问题求解

STM32 UART多机通讯可以采用地址唤醒模式,在发送地址字节时设置USART_DR第9位置1即可,原来的标准库对这种模式的驱动没问题,现在最新的HAL驱动库对UART采用DMA发送时,采用的是8位字节数组传送,没法操作第9位,不知道有啥好的解决办法,难道只能放弃DMA发送方式。

回帖(1)

吴藩

2024-5-9 16:25:57
在STM32的HAL库中,确实存在这个问题,因为HAL库的UART DMA发送函数使用的是8位字节数组,无法直接操作USART_DR寄存器的第9位。但是,您可以通过以下方法来解决这个问题:

1. 使用半双工模式:在发送地址字节时,暂时关闭DMA,手动发送地址字节并设置第9位。发送完地址字节后,再开启DMA进行后续数据的发送。

2. 修改HAL库源码:您可以修改HAL库中与UART DMA发送相关的源码,使其支持发送带有地址位标志的数据。这种方法需要一定的C语言和STM32 HAL库的了解。

3. 使用中断方式发送:虽然这种方式不如DMA高效,但可以实现对USART_DR寄存器第9位的控制。您可以在每次发送一个字节时,通过中断手动设置第9位。

4. 考虑使用其他通信协议:如果STM32 HAL库中的UART DMA发送方式确实无法满足您的需求,您可以考虑使用其他通信协议,如SPI、I2C等。

总之,虽然STM32 HAL库的UART DMA发送方式存在一定的局限性,但通过上述方法,您仍然可以实现地址唤醒模式的多机通信。希望这些建议对您有所帮助!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分