首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在stm32f4中从STOP模式唤醒后,I2C、DCMI停止工作

在stm32f4中从STOP模式唤醒后,I2C、DCMI停止工作
EN

Stack Overflow用户
提问于 2019-05-31 21:08:01
回答 1查看 367关注 0票数 0

STOP模式唤醒后,I2CDCMI在我的定制板上停止工作。我在进入STOP模式之前先取消初始化GPIO。在从I2CSTOP唤醒后,我总是得到读和写的HAL_BUSY,而对于DCMI上的相机,我得到一些随机数据而不是jpeg图像。但是,如果我不去初始化GPIO的,那么一切都很好,没有任何问题,但有更高的功耗在STOP模式。下面是我的GPIO反初始化代码

代码语言:javascript
复制
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();
}

是否有从STOP模式唤醒后正确重置I2CDCMI的方法?调用函数MX_I2C2_Init()MX_DCMI_Init()不起作用。处理这种情况并使I2CDCMI正常工作的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-05-31 22:17:46

可以使用 RCC (复位和时钟控制)复位外设。

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

代码语言:javascript
复制
RCC->AHB2RSTR |= RCC_AHB2RSTR_DCMIRST;
RCC->AHB2RSTR &= ~RCC_AHB2RSTR_DCMIRST;

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

代码语言:javascript
复制
__HAL_RCC_DCMI_FORCE_RESET();
__HAL_RCC_DCMI_RELEASE_RESET();

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56395718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档