软件复位之后I2C就不工作是为啥?
设备重新上电能用,但代码里NVIC_SystemReset后I2C就像死了一样,是硬件锁了?我以前只能靠硬复位清掉I2C锁死。 复位后有没有重新初始化I2C? 会不会是I2C没释放总线? 检查一下IO口是不是被锁了? 是不是没加延时I2C刚上电还没准备好? I2C状态寄存器你清了没? 你加了跳转Bootloader那种代码没? NVIC_SystemReset有时候不清外设状态要注意。 你用LL还是HAL?试过互换吗? 是不是总线拉低了卡住了START? 在STM32G0中,软件复位后I2C不工作通常与硬件初始化、时钟配置、引脚状态或软件逻辑相关 初始化代码未执行,复位后程序可能未执行到I2C初始化代码(如复位后直接进入主循环,未重新初始化外设) 复位后状态丢失,软件复位会重置所有外设寄存器,包括I2C的配置寄存器。若复位后未重新初始化I2C,其将处于默认状态(如禁用模式),导致无法工作 在复位处理函数或主程序初始化部分,重新配置I2C外设(如波特率、模式、地址等)。在复位后调用I2C_Init()函数,确保I2C被重新配置 时钟未重新配置,软件复位后,I2C的时钟可能被禁用(如RCC寄存器被重置),导致I2C无法工作 时钟配置错误,复位后未正确配置I2C时钟源或分频器,导致时钟频率不正确 在复位处理函数或初始化代码中,重新使能I2C时钟 检查时钟配置,确保I2C时钟源(如APB1)和分频器配置正确,满足I2C工作频率要求(通常为100kHz或400kHz) 引脚模式未重置,软件复位后,GPIO引脚可能被重置为默认模式(如输入模式),导致I2C无法正常通信
页:
[1]