STM32的UART使用DMA操作不要入的坑

  • UART发送:HAL_UART_Transmit_DMA(&huat1,tx_data, 6);在完成各种初始化之后(或者是进入while之前)调用一次这个UART dma发送函数就可以不用管了。
  • 变量“tx_data”是在while()里实时更新的,这个串口dma发送函数不管你"tx_data"有没有更新,只要上一帧数据发送完毕,就接着发下一帧。
  • 所以就有问题了,有时候tx_data更新了一半,就被DMA挪走发送了。就比如说上次计算的值是1,那么 int32_t tx_data=0x0001;这次计算的值是-2,那么tx_data应该=0xFFFE,于是刚更新到0xFF,后面的两个字节“01“还没来得及更新,就被DMA挪走发送,DMA挪走的值就是”0xFF01“,结果在次级的stm32接收端总是经常出现这种特别大的错误值。
  • 为了稳妥,发送的时候不用DMA了,就用HAL_UART_Transmit();
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值