Construyo un proyecto Keil para mi MCU STM32F103 con STM32CubeMx.
Mi objetivo es usar el canal TIM1 2 para controlar un zumbador. Quiero generar un PWM a 4KHz a través del canal 2 de TIM1. Configuré, con STM32CubeMx, el TIM1_Channel2 como "PWM Generator CH2".
El problema se refiere a la sesión de depuración. En particular, cuando inicio la sesión de depuración y cuando la MCU ejecuta la macro "__HAL_AFIO_REMAP_TIM1_ENABLE ()", la sesión de depuración se bloquea.
Este es el código de inicialización del temporizador generado por STM32CubeMx:
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(htim->Instance==TIM1)
{
/* USER CODE BEGIN TIM1_MspPostInit 0 */
/* USER CODE END TIM1_MspPostInit 0 */
/**TIM1 GPIO Configuration
PE11 ------> TIM1_CH2
*/
GPIO_InitStruct.Pin = GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
__HAL_AFIO_REMAP_TIM1_ENABLE();
/* USER CODE BEGIN TIM1_MspPostInit 1 */
/* USER CODE END TIM1_MspPostInit 1 */
}
}
Este problema está relacionado con la reasignación completa del pin Timer1.
¿Alguien tiene el mismo problema?
¡Gracias!
=== ACTUALIZACIÓN ===
¡Finalmente encontré algo de tiempo para probar la solución propuesta por @SamGibson y funciona! ¡Y gracias a @Rafiq Rahman por su código!
Gracias chicos por tu tiempo!
Este es el código que utilicé para volver a asignar el TIM1 y mantener la capacidad de generar el código con el Stm32CubeMX.
if(htim->Instance==TIM1)
{
/* USER CODE BEGIN TIM1_MspPostInit 0 */
#undef __HAL_AFIO_REMAP_TIM1_ENABLE
#define __HAL_AFIO_REMAP_TIM1_ENABLE() (0)
/* USER CODE END TIM1_MspPostInit 0 */
/**TIM1 GPIO Configuration
PE11 ------> TIM1_CH2
*/
GPIO_InitStruct.Pin = GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
__HAL_AFIO_REMAP_TIM1_ENABLE();
/* USER CODE BEGIN TIM1_MspPostInit 1 */
/* Make a copy of AFIO register */
volatile uint32_t afioRegisterCopy = AFIO->MAPR;
/* Clear Timer1 remap bits and + JTAG/SWD bits */
afioRegisterCopy &= ~((7 << 24) + (3 << 6));
/* To perform a full remap Timer1, bit 6-7 of
AFIO->MAPR must be set. Mask is 3 (11b) */
afioRegisterCopy |= (3 << 6);
/* Apply the new register configuration*/
AFIO->MAPR = afioRegisterCopy;
/* USER CODE END TIM1_MspPostInit 1 */
}