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

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 回答时间:2024-9-20 09:43:10
xmshao 发表于 2024-9-19 18:10
我查看了相关代码,你提到的两个API函数并没有处理DMA请求。我是这样理解的:

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

对于Seq系列的API函数用法有专门详细的介绍吗?
xmshao 回答时间:2024-9-20 15:17:08

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

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

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版