I build a Keil project for my STM32F103 MCU with STM32CubeMx.
My goal is use the TIM1 channel 2 for control a Buzzer. I want to generate a PWM at 4KHz through TIM1 channel 2. I configured, with STM32CubeMx, the TIM1_Channel2 as "PWM Generator CH2".
The problem regards the debug session. In particular, when I start the debug session and when the MCU executes the macro "__HAL_AFIO_REMAP_TIM1_ENABLE()" the debug session crash.
This is the timer initialisation code generated by 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 */
}
}
This issue is related to Timer1 pin full remap.
Anyone have the same issue?
Thanks!
=== UPDATE ===
Finally I found some time to test the solution proposed by @SamGibson an it works! And thanks to @Rafiq Rahman for his code!
Thanks guys for your time!
This is the code that I used to remap the TIM1 and maintain the ability to generate the code with the 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 */
}