I2C,从stm32f4的STOP模式唤醒后,DCMI停止工作

时间:2019-05-31 13:08:01

标签: stm32 stm32f4

I2C模式唤醒后,DCMISTOP在我的自定义板上停止工作。在进入STOP模式之前,我要初始化GPIO。从STOP唤醒I2C后,我在读取HAL_BUSY时总是得到DCMI,而在STOP上的摄像头却得到一些随机数据,而不是jpeg图像。但是,如果我不对GPIO进行初始化,那么一切正常,没有任何问题,但是在void MX_GPIO_Deinit() { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pin = GPIO_PIN_All; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); /* Disable GPIOs clock */ __HAL_RCC_GPIOA_CLK_DISABLE(); __HAL_RCC_GPIOB_CLK_DISABLE(); __HAL_RCC_GPIOC_CLK_DISABLE(); __HAL_RCC_GPIOH_CLK_DISABLE(); } 模式下功耗更高。以下是我的GPIO取消初始化代码

I2C

DCMI模式唤醒后,是否可以正确重置STOPMX_I2C2_Init()?调用函数MX_DCMI_Init()I2C不起作用。处理此问题并使DCMICar.Builder().build()工作的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

可以使用RCC (重置和时钟控制)重置外围设备。

RCC...RSTR寄存器中找到与要复位的外设相对应的位,将它们设置为1,然后将其清除为0。对于DCMI,应该是

RCC->AHB2RSTR |= RCC_AHB2RSTR_DCMIRST;
RCC->AHB2RSTR &= ~RCC_AHB2RSTR_DCMIRST;

HAL提供了一些宏,使您无需查找寄存器名称,例如

__HAL_RCC_DCMI_FORCE_RESET();
__HAL_RCC_DCMI_RELEASE_RESET();

您可以在《参考手册》或HAL标头中找到I2C外设的寄存器位和宏。