从I2C
模式唤醒后,DCMI
和STOP
在我的自定义板上停止工作。在进入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
模式唤醒后,是否可以正确重置STOP
和MX_I2C2_Init()
?调用函数MX_DCMI_Init()
和I2C
不起作用。处理此问题并使DCMI
和Car.Builder().build()
工作的正确方法是什么?
答案 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外设的寄存器位和宏。