你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G070 I2C HAL库函数疑问

[复制链接]
huahuahnu 提问时间:2024-9-19 15:42 / 未解决
函数HAL_I2C_Slave_Seq_Transmit_IT和HAL_I2C_Slave_Seq_Receive_IT实现代码里有处理DMA请求,这是出于什么考虑?求解答!

收藏 评论5 发布时间:2024-9-19 15:42

举报

5个回答
butterflyspring 回答时间:2024-9-19 17:12:39
应该是防止之前的配置状态影响下面即将的设置。
xmshao 回答时间:2024-9-19 18:10:45
我查看了相关代码,你提到的两个API函数并没有处理DMA请求。我是这样理解的:


HAL_I2C_Slave_Seq_Transmit_IT函数的主要功能就是在I2C从设备模式下,顺序地将数据从I2C从设备 发送  到主设备。


它并没有直接处理DMA请求,只是检查了当前I2C的状态,如果当前处于接收状态,则禁用接收,包括可能正在进行的DMA接收。


另一个API函数HAL_I2C_Slave_Seq_Receive_IT的做法类似。如果当前I2C从设备处于发送状态,则需要禁用发送并中止可能正在进行的DMA发送。


简单点说,API函数根据当前I2C的状态切换传输方向。如果是要做发送,当检测到当前处于接收状态时,需要禁用接收中断并中止任何正


在进行的DMA接收传输;如果是要做接收,当检测到当前处于发送状态,需要禁用发送中断并中止任何正在进行的DMA发送传输。


最后,重新启用与当前操作相关的中断,以便继续处理相关中断请求。
huahuahnu 回答时间:7 天前
xmshao 发表于 2024-9-19 18:10
我查看了相关代码,你提到的两个API函数并没有处理DMA请求。我是这样理解的:

恩,表述有误,是终止DMA发送或者接收,看前面函数后缀有IT的都是处理中断方式的,后缀是DMA的就是处理DMA的,但只有这两个函数IT里要去判断DMA,就觉得有疑惑。

对于Seq系列的API函数用法有专门详细的介绍吗?
xmshao 回答时间:7 天前

huahuahnu 发表于 2024-9-20 09:43
恩,表述有误,是终止DMA发送或者接收,看前面函数后缀有IT的都是处理中断方式的,后缀是DMA的就是处理DM ...

理解。 关于这些顺序性操作的函数 你可以直接阅读相关函数说明。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版