Hi,
Ich möchte auf einem STM32F4 den Timer1 mit dem Timer2 synchronisieren,
daher denke ich, ist der Slave Mode für Timer1 die richtige Wahl. Nun
habe ich das ganze versucht zu konfigurieren, jedoch scheint Timer1
nicht anzuspringen. Die CLK etc. ist freigeschaltet (Habe es mit CubeMX
konfiguriert und noch im MSP überprüft). Gestartet habe ich nur Timer2
mit HAL_TIM_PWM_Start(...), aber auch wenn ich Timer1 mit
HAL_TIM_OC_Start(...) starte, passiert nichts. Jemand eine Idee, was ich
falsch eingestellt habe?
Einstellungen Timer1:
1 | TIM_SlaveConfigTypeDef sSlaveConfig = {0};
|
2 | TIM_MasterConfigTypeDef sMasterConfig = {0};
|
3 | TIM_OC_InitTypeDef sConfigOC = {0};
|
4 |
|
5 | /* USER CODE BEGIN TIM1_Init 1 */
|
6 |
|
7 | /* USER CODE END TIM1_Init 1 */
|
8 | htim1.Instance = TIM1;
|
9 | htim1.Init.Prescaler = 0;
|
10 | htim1.Init.CounterMode = TIM_COUNTERMODE_Up;
|
11 | htim1.Init.Period = 5000;
|
12 | htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
13 | htim1.Init.RepetitionCounter = 0;
|
14 | htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
15 | if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
|
16 | {
|
17 | Error_Handler();
|
18 | }
|
19 | if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
|
20 | {
|
21 | Error_Handler();
|
22 | }
|
23 | sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
|
24 | sSlaveConfig.InputTrigger = TIM_TS_ITR2;
|
25 | if (HAL_TIM_SlaveConfigSynchro(&htim1, &sSlaveConfig) != HAL_OK)
|
26 | {
|
27 | Error_Handler();
|
28 | }
|
29 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
30 | sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
|
31 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
|
32 | if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
|
33 | {
|
34 | Error_Handler();
|
35 | }
|
36 | sConfigOC.OCMode = TIM_OCMODE_TIMING;
|
37 | sConfigOC.Pulse = 0;
|
38 | sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
39 | sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
40 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
41 | sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
|
42 | sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
43 | if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
44 | {
|
45 | Error_Handler();
|
46 | }
|
Einstelleungen Timer2:
1 | TIM_MasterConfigTypeDef sMasterConfig = {0};
|
2 | TIM_OC_InitTypeDef sConfigOC = {0};
|
3 |
|
4 | /* USER CODE BEGIN TIM2_Init 1 */
|
5 |
|
6 | /* USER CODE END TIM2_Init 1 */
|
7 | htim2.Instance = TIM2;
|
8 | htim2.Init.Prescaler = 0;
|
9 | htim2.Init.CounterMode = TIM_COUNTERMODE_Up;
|
10 | htim2.Init.Period = 5000;
|
11 | htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
12 | htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
13 | if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
14 | {
|
15 | Error_Handler();
|
16 | }
|
17 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_ENABLE;
|
18 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
|
19 | if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
20 | {
|
21 | Error_Handler();
|
22 | }
|
23 | sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
24 | sConfigOC.Pulse = 0;
|
25 | sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
26 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
27 | if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
28 | {
|
29 | Error_Handler();
|
30 | }
|
31 | if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
32 | {
|
33 | Error_Handler();
|
34 | }
|
35 | if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
|
36 | {
|
37 | Error_Handler();
|
38 | }
|
39 | /* USER CODE BEGIN TIM2_Init 2 */
|
40 |
|
41 | /* USER CODE END TIM2_Init 2 */
|
42 | HAL_TIM_MspPostInit(&htim2);
|