
【STM32】I2C与DMA结合使用进行AT24C02读写操作-基于标准库的仿printf和scanf实现
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
本教程讲解了如何在STM32微控制器上通过标准库,利用I2C与DMA技术高效地对AT24C02 EEPROM执行读写操作,并实现了类似printf和scanf的功能。
采用STM32F429IGT6单片机与Keil MDK 5.32版本进行开发,通过SysTick系统滴答定时器实现延时功能。LED_R、LED_G、LED_B分别连接至PH10, PH11, PH12;按键Key1和Key2则连接到PA0和PC13。
在Keil MDK 5.32的下载配置中,FLASH与SRAM共享同一缓冲区。I2C通信使用DMA方式与AT24C02进行数据交换,在发送过程中,起始位、设备地址及读写地址通过阻塞式发送完成,而实际的数据传输则依赖于DMA技术。
在接收操作中同样利用了DMA来处理数据的收发工作,但开始时先采用阻塞方式发送起始位和AT24C02的写入地址。当使用DMA进行数据传送期间,请务必等到BTF(即发送寄存器及移位寄存器均为空)事件发生后设置停止信号;切记不可在DMA传输完成中断中设定停止标志,因此时机正是最后一个字节正在被处理之时。
对于接收模式下,在接收到全部预期的数据量时触发的DMA传输结束中断应该立即发送停止命令,并且关闭I2C模块的DMA功能。此外,在执行读写转换并准备再次启动起始位前,请务必检查BTF事件,以确保先前的操作已经完全结束并且可以安全地继续下一步操作。
在仿printf函数将数据送入发送缓冲区之前,需要确认上一次通信是否已完成才能进行新的请求处理。
全部评论 (0)
还没有任何评论哟~


