STM32F303X单片机USB例程详细解析3

接上一篇文章。继续void Set_System(void)的分析。


1.3  RCC_AHBPeriphClockCmd()

位于USB_Example\Libraries\STM32F30x_StdPeriph_Driver\src\stm32f30x_rcc.c文件中。其主要功能也是使能或禁止AHB外设时钟。


/**
  * @brief  Enables or disables the AHB peripheral clock.
  * @note   After reset, the peripheral clock (used for registers read/write access)
  *         is disabled and the application software has to enable this clock before
  *         using it.   
  * @param  RCC_AHBPeriph: specifies the AHB peripheral to gates its clock.
  *   This parameter can be any combination of the following values:
  *     @arg RCC_AHBPeriph_GPIOA
  *     @arg RCC_AHBPeriph_GPIOB
  *     @arg RCC_AHBPeriph_GPIOC 
  *     @arg RCC_AHBPeriph_GPIOD
  *     @arg RCC_AHBPeriph_GPIOE 
  *     @arg RCC_AHBPeriph_GPIOF
  *     @arg RCC_AHBPeriph_TS
  *     @arg RCC_AHBPeriph_CRC
  *     @arg RCC_AHBPeriph_FLITF (has effect only when the Flash memory is in power down mode) 
  *     @arg RCC_AHBPeriph_SRAM
  *     @arg RCC_AHBPeriph_DMA2
  *     @arg RCC_AHBPeriph_DMA1
  *     @arg RCC_AHBPeriph_ADC34
  *     @arg RCC_AHBPeriph_ADC12     
  * @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;
  }
}


RCC、AHBENR的说明见前一篇文章,在此不再赘述。


“1. Set_System()”中调用RCC_AHBPeriphClockCmd()时传入的第一个参数RCC_AHBPeriph_GPIOA在USB_Example\Libraries\STM32F30x_StdPeriph_Driver\inc\stm32f30x_rcc.h中定义:

#define RCC_AHBPeriph_GPIOA               RCC_AHBENR_GPIOAEN

RCC_AHBENR_GPIOAEN在USB_Example1\Libraries\CMSIS\Device\ST\STM32F30x\Include\stm32f30x.h中定义:

#define  RCC_AHBENR_GPIOAEN                  ((uint32_t)0x00020000)        /*!< GPIOA clock enable */

对应手册P118中"Bit 17 IOPAEN: I/O port A clock enable"。


RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);  --------> 1.3 所实现功能为使能IO Port A时钟。



发布了34 篇原创文章 · 获赞 12 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/phmatthaus/article/details/50315627