在STM32的I2C从机模式下,响应NACK(即主机发送NACK后停止或重启)时,硬件状态机通常会自动进入IDLE状态并等待下一次START条件,无需软件干预。但若需确保可靠恢复,建议:1) 使能I2C的NACK中断(I2C_IT_NACK),在中断服务程序中清除NACK标志(I2C_SR1的AF位),并检查总线状态(BUSY位),若总线空闲则重新初始化从机地址匹配;2) 配置I2C的SMBus或超时机制(如I2C_TIMEOUT)防止总线挂死;3) 若使用DMA传输,需在NACK后禁用DMA并复位I2C外设(I2C_DeInit + I2C_Init),再重新使能。实操建议:在NACK中断里,先读SR1和SR3清除标志,再判断I2C_CR1的PE位,若PE被硬件清除则重新置位。对于STM32F1系列,注意AF位需软件清零,否则状态机卡住;F4/H7系列硬件自动恢复更完善,但仍建议软件监控。
mcuku 阿沐 · 2026-08-27