STM32学习——硬件IIC调试遇到的问题

本文讲述了在调试STM32IIC过程中遇到的两个问题:写入时卡在EV5事件,可能因未完成写入就进行读取;以及读取时卡在EV6。解决方法包括确保写操作完成后进行读操作,以及在关键点添加延迟或逻辑判断,必要时通过断电复位修复EEPROM状态。
摘要由CSDN通过智能技术生成

序言

在调试STM32 IIC的时候,遇到了一些问题,在这里记录:

问题一:写入时卡死在EV5事件,无法等来标志位

EEPROM进入了一种状态,无法回复起始位的请求,就算重新烧入正确的程序也无法解除这种状态,必须通过断电重启的方法才能重置EEPROM

正确方法是先烧录进正确的程序,然后拔掉所有电源,让EEPROM断电一次,最后再次开机,自动运行正常程序,这样就可以了,否则会发生一些灵异BUG,比如两次烧录一样的程序,结果不一样,等等,这是由于外设没有复位导致的。

这种状态的产生多半是因为在程序中,EEPROM还没有写入完毕就进行了读取

问题2:读取时卡在EV6事件-无法等来标志位

这种情况的产生很有可能还是在EEPROM正在写入的时候,提前开始了读取

	I2C_EE_ByteWrite(&data,0x00);
	//delay_ms(15);
	EEPROM_RD_Byte(0x00, &data_read, 1);

如图没有添加延迟或者正确的逻辑判断就会导致在第一次运行Debug的时候,卡在EV6

然后再次运行正确的代码,在写入的时候就会卡在EV5,出现问题1

STM32F072RB是一款微控制器,其中包括硬件IIC(Inter-Integrated Circuit)功能。硬件IIC是一种串行通信协议,用于在芯片之间传输数据。在STM32F072RB上使用硬件IIC时,可以使用中断来处理接收和发送数据。常用的硬件IIC中断标志位包括:ADDR、RXNE、TXE和STOPF。 ADDR标志位在主机发送地址并与STM32从机匹配成功时被置位。如果启用了硬件IIC中断,当ADDR标志位被置位时,芯片将进入中断函数。 RXNE标志位在主机发送数据给STM32从机的情况下,每当接收数据寄存器接收到一个字节的数据时被置位。如果启用了硬件IIC中断,当RXNE标志位被置位时,芯片将进入中断函数。当从接收寄存器读取数据后,RXNE标志位将由硬件自动清零。 TXE标志位在作为STM32从机接收数据时,当发送数据寄存器为空时被置位。如果启用了硬件IIC中断,当TXE标志位被置位时,芯片将进入中断函数。一般在中断函数中,可以将数据填入发送数据寄存器,此时TXE标志位将被硬件自动清零。 STOPF标志位在主机发送停止信号结束通信时,当STM32从机接收到停止信号时被置位。如果启用了硬件IIC中断,当STOPF标志位被置位时,芯片将进入中断函数。 通过以上标志位的设置和处理,可以实现硬件IIC的数据接收和发送功能。请注意,每个中断标志位在处理完相关操作后都会由硬件自动清零,以确保正确的中断处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值