打印
[STM32F0]

请问STM32F051的硬件I2C做从机接收时,怎么理解多字节接收?

[复制链接]
4303|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
piliming|  楼主 | 2014-5-26 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 piliming 于 2014-5-26 16:28 编辑

如题,我现在已经调试好了STM32F051的硬件I2C做从机,但现在项目需要接收多字节,自然而然想到查询或者中断来读接收寄存器,但这样做需要软件一个字节一个字节接收。难道没有类似一个大的缓冲区来同时接收多字节,最后我再软件选着性读取么?
看到051有个字节控制器,写得有点费解,我的理解就是个触发控制应答的。不知我理解得对否?
其实我的目的就是需要个字节控制器和接收字节缓冲区,我填入我需要接收到的字节数,我再到缓冲区去取。这样的单片机木有么?LPC据说有,但看资料代码也不是这么回事啊,忘知道的大神指教一下。
沙发
airwill| | 2014-5-26 17:38 | 只看该作者
应该是可以的. 从手册看, 可以通过DMA 来自动接收若干数据. 由于数据最大长度可达 65536, 实际上这样的整体性能是优于 FIFO 的方案的. 当然地址匹配的处理不能在 DMA 内, 另外别忘了 DMA 就一定要设置自动应答 ACK 哦.

使用特权

评论回复
板凳
香水城| | 2014-5-26 17:58 | 只看该作者
F0的I2C模块引入“NBYTE”,在slave角色来说,更大的意义在于:对从设备可以对每N个收到的字节进行应答与否的控制,即通过SBC=1(开启Byte counter),RELOAD=1,NBYTE=N来实现的。

而LZ需要的自动接收(无需CPU参与)N个数据,完全可以通过DMA来接收数据,只要配置DMA的counter=N,于是在接受完N的数据后,自动产生中断告知CPU来处理

使用特权

评论回复
地板
piliming|  楼主 | 2014-5-29 09:36 | 只看该作者
嗯,回复晚了,明白了,谢谢两位版主指点。

使用特权

评论回复
5
飘落枫叶| | 2016-6-1 16:57 | 只看该作者
请问LZ和两位boss。STM32F0中的I2C从机模式下,使用接受N个字节。从机在接收到第N个字节后,知道需要配置CR2寄存器内的NACK位发送一个结束,使得主机SDA拉高。但是每次接受一个字节,其ACK是配置后自动发送,还是需要在中断内软件写呢?,在STM32F1中CR1寄存器ACK位明确设置了在每次接受一个字节,其ACK是自动发送一个应答脉冲的,F0说明书太难理解。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:习惯自己,历练中。。。。。。

16

主题

189

帖子

1

粉丝