1 Para este ejemplo se configura el Timer 3 del microcontrolador para generar una 2 señal PWM. Parte del código generado por CubeMX para inicializar el timer se 3 encuentra en el archivo `main.c`, en la función `MX_TIM3_Init`. Eliminando 4 comentarios utilizados por CubeMX, resulta en el código a continuación: 5 6 ```c 7 static void MX_TIM3_Init(void) 8 { 9 TIM_MasterConfigTypeDef sMasterConfig = {0}; 10 TIM_OC_InitTypeDef sConfigOC = {0}; 11 12 htim3.Instance = TIM3; 13 htim3.Init.Prescaler = 0; 14 htim3.Init.CounterMode = TIM_COUNTERMODE_UP; 15 htim3.Init.Period = 65535; 16 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; 17 htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; 18 19 if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) 20 { 21 Error_Handler(); 22 } 23 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; 24 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; 25 26 if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) 27 { 28 Error_Handler(); 29 } 30 31 sConfigOC.OCMode = TIM_OCMODE_PWM1; 32 sConfigOC.Pulse = 0; 33 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; 34 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; 35 if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) 36 { 37 Error_Handler(); 38 } 39 40 HAL_TIM_MspPostInit(&htim3); 41 } 42 ``` 43 44 Del codigo generado (y tambien de la interfaz en CubeMX) se observa que se 45 configura el timer 3 para contar de manera ascendente de 0 a 65536, esto en 46 conjunto con el reloj del timer define el período de la señal. El prescaler se 47 configura en 0 por lo que el reloj del timer es el reloj del bus al que esta 48 conectado, en el caso del timer 3, el bus es APB3, este bus es el bus de alta 49 velocidad y en este caso utiliza la misma frecuencia del microcontrolador, ya 50 que no hay prescaler. 51 52 El periodo en segundos total de la señal PWM generada viene dado por la 53 siguiente relacion: 54 55 $$T = Frecuencia / ((Periodo + 1)*(Prescaler + 1))$$ 56 57 Con la frecuencia del microcontrolador 64 MHz, prescaler nulo y periodo 65535 el 58 periodo resulta aproximadamente 1 ms, 1.024 ms para ser exactos. Para verificar 59 esto se puede ver en la captura `pwm.png` en la cual se observar que la 60 frecuencia (1/delta T arriba a la izquierda) es 976.5 Hz y el periodo (delta T) 61 1.02ms.
