|
HAL库里面仅给了下面6个:
- /** @defgroup RCC_System_Clock_Type RCC System Clock Type
- * @{
- */
- #define RCC_CLOCKTYPE_SYSCLK ((uint32_t)0x00000001)
- #define RCC_CLOCKTYPE_HCLK ((uint32_t)0x00000002)
- #define RCC_CLOCKTYPE_D1PCLK1 ((uint32_t)0x00000004)
- #define RCC_CLOCKTYPE_PCLK1 ((uint32_t)0x00000008)
- #define RCC_CLOCKTYPE_PCLK2 ((uint32_t)0x00000010)
- #define RCC_CLOCKTYPE_D3PCLK1 ((uint32_t)0x00000020)
复制代码
标准的总线初始化是下面这样,也仅初始了上面6个:
- /* Select PLL as system clock source and configure bus clocks dividers */
- RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \
- RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1);
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
- RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
- RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
- RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
- RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
- RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
- ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
- if(ret != HAL_OK)
- {
- Error_Handler();
- }
复制代码
那么问题来了:
RCC_CLOCKTYPE_SYSCLK 代表系统时钟
RCC_CLOCKTYPE_HCLK 代表AHB1,2,3,4时钟
RCC_CLOCKTYPE_PCLK1 代表APB1时钟
RCC_CLOCKTYPE_PCLK2 代表APB2时钟
RCC_CLOCKTYPE_D1PCLK1和RCC_CLOCKTYPE_D3PCLK1代表的是什么鬼?怎么没有RCC_CLOCKTYPE_PCLK3和RCC_CLOCKTYPE_PCLK4,最终的问题就在这里了。
其实RCC_CLOCKTYPE_D1PCLK1就是RCC_CLOCKTYPE_PCLK3,而RCC_CLOCKTYPE_D3PCLK1就是RCC_CLOCKTYPE_PCLK4,为什么这么说,根本原因看下面这个图就清晰了
PCLK3是D1PPRE分频产生的。
PCLK4是D3PPRE分频参数的。
所以HAL库起了这么一个神奇的名字。
|
|