STM32硬件IIC之DMA传输数据
扫描二维码
随时随地手机看文章
这里咱们说3个点
1.检查IIC总线上是否有指定地址的器件
2.IIC读取数据
3.IIC写数据
下面来一个一个详细说明
1.检查IIC总线上是否有指定地址的器件
1.判断是否总线忙,如果忙则等待2.产生起始位3.等待起始位产生完成4.发送器件地址(这里选择读写都是可以的)5.等待是否有ACK位回应,(这里有两种判断方法1.通过判断ACK标志2.通过判断ADDR标志),最好使用ADDR标志位6.清楚ADDR标志位7.产生停止位8.通过判断是否有ACK,就可以判断是否有指定地址的器件123456789
2.IIC读取数据
1.判断是否总线忙,如果忙则等待2.产生起始位3.等待起始位产生完成4.发送器件地址,这里方向上选择写数据5.等待发送完成,通过判断ADDR标志位是否置位6.清除ADDR标志位7.同时判断TXE位,这个在发送数据完成之后,也会被置位8.发送要读取内存的地址9.等待TXE位置位10.再次发送起始位11.等待起始位产生完成12.发送器件地址,这里方向上选择读数据13.等待发送完成,通过判断ADDR标志位是否置位14.使能LAST位,使能这个,就能做到在传输最后一个数据的时候,自动产生NACK14.开始用DMA传输下面的数据12345678910111213141516
3.IIC写数据
1.判断是否总线忙,如果忙则等待2.产生起始位3.等待起始位产生完成4.发送器件地址,这里方向上选择写数据5.等待发送完成,通过判断ADDR标志位是否置位6.清除ADDR标志位7.同时判断TXE位,这个在发送数据完成之后,也会被置位8.发送要读取内存的地址9.等待TXE位置位10.开始用DMA传输下面的数据11.在DMA传输完成中断中产生停止位