济南网站优化排名,wordpress自定义404页面模板,做app推广上哪些网站,军事新闻最新24小时问题描述
在使用STM32 I2C数据发送过程中#xff0c;发现每轮实际发送出去的数据总比在DMA配置中设定的传输数据个数要少一个。比方说#xff1a;DMA配置里设定的传输数据个数是10个#xff0c;结果发现在总线上只能发出9个#xff0c;经过进一步发现是少了最后一个数据。…问题描述
在使用STM32 I2C数据发送过程中发现每轮实际发送出去的数据总比在DMA配置中设定的传输数据个数要少一个。比方说DMA配置里设定的传输数据个数是10个结果发现在总线上只能发出9个经过进一步发现是少了最后一个数据。当对I2C接收到的数据进行DMA传输时没有异常。
关于I2C的DMA传输STM32技术参考手册部分有这么一段话 意思是说当DMA产生EOT标志后如果开启了EOT相关中断就进中断程序没有开启就进行软件查询做后续处理关闭DMA请求然后等待BTF事件之后执行STOP操作。
这里的BTF事件就是I2C数据收发过程中的数据字节是否传输完成的的事件。SR寄存器中的一个位
查看关于I2C发送代码发现他在检测到DMA产生EOT标志后他首先就是做的STOP操作然后关闭相关DMA请求。代码里没有检测BTF标志的过程。
这样做就会导致个问题。在最后一次DMA数据传输完成后数据刚放进I2C的DR寄存器还没来得及把这个新数据通过I2C发送出去因为用户程序立即做了STOP操作最后那个数据无法传输。