zoukankan      html  css  js  c++  java
  • STM32 STM32F4 寄存器怎么配置不上, 无法往寄存器写入数据

    当出现这个问题时,往往是因为你没有在RCC寄存器中把相关的时钟使能打开。

    配置寄存器之前记得调用"RCC_AxxxPeriphClockCmd"先打开需要配置的时钟源,别调用了“RCC_AxxxPeriphResetCmd"。

    相关函数定义源代码如下:

    /**
      * @brief  Enables or disables the AHB peripheral clock.
      * @param  RCC_AHBPeriph: specifies the AHB peripheral to gates its clock.
      *   
      *   For @b STM32_Connectivity_line_devices, this parameter can be any combination
      *   of the following values:        
      *     @arg RCC_AHBPeriph_DMA1
      *     @arg RCC_AHBPeriph_DMA2
      *     @arg RCC_AHBPeriph_SRAM
      *     @arg RCC_AHBPeriph_FLITF
      *     @arg RCC_AHBPeriph_CRC
      *     @arg RCC_AHBPeriph_OTG_FS    
      *     @arg RCC_AHBPeriph_ETH_MAC   
      *     @arg RCC_AHBPeriph_ETH_MAC_Tx
      *     @arg RCC_AHBPeriph_ETH_MAC_Rx
      * 
      *   For @b other_STM32_devices, this parameter can be any combination of the 
      *   following values:        
      *     @arg RCC_AHBPeriph_DMA1
      *     @arg RCC_AHBPeriph_DMA2
      *     @arg RCC_AHBPeriph_SRAM
      *     @arg RCC_AHBPeriph_FLITF
      *     @arg RCC_AHBPeriph_CRC
      *     @arg RCC_AHBPeriph_FSMC
      *     @arg RCC_AHBPeriph_SDIO
      *   
      * @note SRAM and FLITF clock can be disabled only during sleep mode.
      * @param  NewState: new state of the specified peripheral clock.
      *   This parameter can be: ENABLE or DISABLE.
      * @retval None
      */
    void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)
    {
      /* Check the parameters */
      assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph));
      assert_param(IS_FUNCTIONAL_STATE(NewState));
    
      if (NewState != DISABLE)
      {
        RCC->AHBENR |= RCC_AHBPeriph;
      }
      else
      {
        RCC->AHBENR &= ~RCC_AHBPeriph;
      }
    }
    
    /**
      * @brief  Enables or disables the High Speed APB (APB2) peripheral clock.
      * @param  RCC_APB2Periph: specifies the APB2 peripheral to gates its clock.
      *   This parameter can be any combination of the following values:
      *     @arg RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,
      *          RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,
      *          RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,
      *          RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,
      *          RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,
      *          RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17,
      *          RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10, RCC_APB2Periph_TIM11     
      * @param  NewState: new state of the specified peripheral clock.
      *   This parameter can be: ENABLE or DISABLE.
      * @retval None
      */
    void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
    {
      /* Check the parameters */
      assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
      assert_param(IS_FUNCTIONAL_STATE(NewState));
      if (NewState != DISABLE)
      {
        RCC->APB2ENR |= RCC_APB2Periph;
      }
      else
      {
        RCC->APB2ENR &= ~RCC_APB2Periph;
      }
    }
    
    /**
      * @brief  Enables or disables the Low Speed APB (APB1) peripheral clock.
      * @param  RCC_APB1Periph: specifies the APB1 peripheral to gates its clock.
      *   This parameter can be any combination of the following values:
      *     @arg RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4,
      *          RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7,
      *          RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3,
      *          RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4, 
      *          RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2,
      *          RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP,
      *          RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_CEC,
      *          RCC_APB1Periph_TIM12, RCC_APB1Periph_TIM13, RCC_APB1Periph_TIM14
      * @param  NewState: new state of the specified peripheral clock.
      *   This parameter can be: ENABLE or DISABLE.
      * @retval None
      */
    void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
    {
      /* Check the parameters */
      assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
      assert_param(IS_FUNCTIONAL_STATE(NewState));
      if (NewState != DISABLE)
      {
        RCC->APB1ENR |= RCC_APB1Periph;
      }
      else
      {
        RCC->APB1ENR &= ~RCC_APB1Periph;
      }
    }
  • 相关阅读:
    SQL SERVER 实现多个数据库之间表的联系,利用临时表枚举表中行数据
    [CCF CSP]201909-2 小明种苹果(续)
    Anaconda 安装 Python 库(MySQLdb)
    [CCF CSP]201903-4 消息传递接口
    [CCF CSP]201609-4 交通规划
    2019年12月CSP考试第三题化学方程式解法
    Leetcode.94.二叉树的中序遍历
    GENIA命名实体数据集解析代码
    git添加新用户
    C#语言 十大经典排序算法动画与解析!(动态演示+代码)(java改写成C# )
  • 原文地址:https://www.cnblogs.com/qiyuexin/p/8312813.html
Copyright © 2011-2022 走看看