• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

IDLE中断的问题

Spirit 2018-10-26 浏览量:1108

遇到这样的现象: 遇到个现象: USART+DMA+IDLE中断

如果DMA的数据长度为5,你发了6个数据(01, 02, 03, 04, 05, 06), 此时会进入IDLE中断中。

那么5个数据会保存到DMA设置的内存中就是(01, 02,03,04, 05)

再继续发送3个数据(07, 08, 09),此时调试查看DMA设置的内存数据为(06, 07, 08, 09, 05)

DMA中断里什么都没做。

问题是: 第一次超出的一个字节数据被保存在什么地方?


正确答案是:在USART_DR寄存器里

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案

其他答案 数量:6
  • 这个看你DMA开始和结束传输操作的时机是什么时候,如果是主循环中轮询DMA开始操作的话,超过5长度的数据会自动丢失。

    • 发布于2018-10-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 保存在内存里,

    第一次发送 6个数据,大于 dma 长度,发一次发 5 个 再发 1 个,发两次,发完 6 个算发送完成。发完 5 个数据,uart 中不认为这次发送完了,还会继续把剩下的 1 个发送出去。然后 uart 才认为发送完。

    发送时候,是把 6 个数据的指针当作参数传递给 uart , 中间没有数据拷贝,所以你的原始数据在哪里,现在还是哪里,一般是内存。发送完成之前把数据改了,发送时候就发送修改过的数据。

    这些是可以测试的。

    • 发布于2018-10-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种要看你的DMA运行在何种模式之下,普通模式下最后一个会直接丢掉,循环模式下,最后一个会被保存在下一次最开始的哪个地方

    靠dmaInitStruct.DMA_Mode = XXX 实现配置

    • 发布于2018-10-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是保存在你的内存地址中的,使用的时候直接读取相关地址中的数据就可以
    • 发布于2018-11-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先要确定你的你的地址,一般来说都是地址的问题
    • 发布于2018-12-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 检查你的缓存地址里面的数据,有可能是你的地址设置错误
    • 发布于2018-11-28
    • 举报
    • 评论 0
    • -1
    • 0

相关问题

问题达人换一批

IDLE中断的问题