|
发表于 2022-1-18 17:44:08
|
显示全部楼层
OC1
- /*
- *********************************************************************************************************
- * 函 数 名: TIM1_Config
- * 功能说明: 配置TIM1,用于触发ADC,当前配置的100KHz触发频率
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- static void TIM1_Config(void)
- {
- TIM_HandleTypeDef htim ={0};
- TIM_OC_InitTypeDef sConfig = {0};
- /* 使能时钟 */
- __HAL_RCC_TIM1_CLK_ENABLE();
-
- /*-----------------------------------------------------------------------
- bsp.c 文件中 void SystemClock_Config(void) 函数对时钟的配置如下:
- System Clock source = PLL (HSE)
- SYSCLK(Hz) = 400000000 (CPU Clock)
- HCLK(Hz) = 200000000 (AXI and AHBs Clock)
- AHB Prescaler = 2
- D1 APB3 Prescaler = 2 (APB3 Clock 100MHz)
- D2 APB1 Prescaler = 2 (APB1 Clock 100MHz)
- D2 APB2 Prescaler = 2 (APB2 Clock 100MHz)
- D3 APB4 Prescaler = 2 (APB4 Clock 100MHz)
- 因为APB1 prescaler != 1, 所以 APB1上的TIMxCLK = APB1 x 2 = 200MHz;
- 因为APB2 prescaler != 1, 所以 APB2上的TIMxCLK = APB2 x 2 = 200MHz;
- APB4上面的TIMxCLK没有分频,所以就是100MHz;
- APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13, TIM14,LPTIM1
- APB2 定时器有 TIM1, TIM8 , TIM15, TIM16,TIM17
- APB4 定时器有 LPTIM2,LPTIM3,LPTIM4,LPTIM5
- TIM12CLK = 200MHz/(Period + 1) / (Prescaler + 1) = 200MHz / 2000 / 1 = 100KHz
- ----------------------------------------------------------------------- */
- HAL_TIM_Base_DeInit(&htim);
-
- htim.Instance = TIM1;
- htim.Init.Period = 1999;
- htim.Init.Prescaler = 0;
- htim.Init.ClockDivision = 0;
- htim.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim.Init.RepetitionCounter = 0;
- HAL_TIM_Base_Init(&htim);
-
- sConfig.OCMode = TIM_OCMODE_PWM1;
- sConfig.OCPolarity = TIM_OCPOLARITY_LOW;
- /* 占空比50% */
- sConfig.Pulse = 1000;
- if(HAL_TIM_OC_ConfigChannel(&htim, &sConfig, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler(__FILE__, __LINE__);
- }
- /* 启动OC1 */
- if(HAL_TIM_OC_Start(&htim, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler(__FILE__, __LINE__);
- }
- }
复制代码
|
|