完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,我正在单步执行 Nucleo-F446RE 板上的代码并执行以下操作:
但是在我的代码的第 5 行之前,调试器显示 SB 标志仍然是 0b1,但是 LL_I2C_IsActiveFlag_SB 读取 SR1 寄存器,而 LL_I2C_TransmitData8 正在写入 DR 寄存器。那么为什么仍然设置标志?我在这里错过了什么吗? 我的第二个问题是关于 BTF 标志。 文档再次指出 BTF 标志是 “——当 NOSTRETCH=0 并且: – 在接收到新字节(包括 ACK 脉冲)且 DR 尚未读取时 然而(RxNE=1)。 – 在传输中,应发送新字节且 DR 尚未写入 (TxE=1)。 – 通过在 DR 寄存器中读取或写入软件或在启动后由硬件清除或 传输中或 PE=0 时的停止条件。 注意:BTF 位在 NACK 接收后未设置 如果要传输的下一个字节是 PEC(I2C_SR2 中的 TRA=1),则 BTF 位未设置 寄存器和 I2C_CR1 寄存器中的 PEC=1)” 那么为什么我要使用 TXE 和 RNXE 标志而不是 BTF?BTF 不应该是表示传输或接收完成的通用方式吗?或者仅在接收处的 NACK 中存在差异,即。TXE可能在传输后设置,但BTF只有在收到ACK时才会设置? 但是在我上面代码的第 10 行中,我曾经检查 BTF 标志,这导致这部分代码挂起,而切换到检查 TXE 标志使得运行得很好。这让我到了完全迷失的地步,为什么阅读前者会导致这种行为。 如果有人能解释其中的区别,我将不胜感激。谢谢! 引用来自 RM0390 第 24 章,但在阅读后我自己无法理解差异。 |
|
相关推荐
1个回答
|
|
但是在我的代码的第 5 行之前,调试器显示 SB 标志仍然是 0b1,但是 LL_I2C_IsActiveFlag_SB 读取 SR1 寄存器,
> 和 LL_I2C_TransmitData8 正在写入 DR 寄存器。那么为什么仍然设置标志?我在这里错过了什么吗? 也许调试器显示了一个缓存值。在软件中读取 SR1。 但也许不是。我从来没有检查过这个。 > BTF 我不知道,我不使用它。'F4 中的“较旧”I2C 模块非常复杂和古怪;如果与 RM 中的描述有许多偏差,我不会感到惊讶。其中一些可能在勘误表中 - 您检查过了吗? |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2642 浏览 1 评论
3208 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1783 浏览 1 评论
3611 浏览 6 评论
5989 浏览 21 评论
939浏览 4评论
1316浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
584浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1303浏览 3评论
1361浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 00:49 , Processed in 1.055475 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号