Skip to main content
Graduate II
January 13, 2021
Solved

Timer Interrupts on M4 core - STM32MP157C

  • January 13, 2021
  • 1 reply
  • 1278 views

I'm trying to get TIM7 interrupts working with the STM32MP157C-DK2 kit. I've added the necessary configuration to the DTS file:

&m4_timers7 {
	pinctrl-names = "rproc_default";
	pinctrl-0 = <&timer7_pins>;
	status = "okay";
};

Do I need to enable the interrupt in the DTS file as well? I see in the M4 example DTS there is some configuration for a GPIO interrupt:

&m4_rproc {
	m4_system_resources {
		status = "okay";
 
		button {
			compatible = "rproc-srm-dev";
			interrupt-parent = <&gpioa>;
			interrupts = <14 2>;
			interrupt-names = "irq";
			status = "okay";
		};
 
		m4_led: m4_led {
			compatible = "rproc-srm-dev";
			pinctrl-names = "rproc_default", "rproc_sleep";
			pinctrl-0 = <&leds_orange_pins>;
			pinctrl-1 = <&leds_orange_sleep_pins>;
			status = "okay";
		};
	};
};

On the M4 side: I've configured TIM7 in CubeMX (prescalar: 10000, period: 100, interrupt enabled). The only configuration I see for TIM7 comes from MX_TIM7_Init():

void MX_TIM7_Init(void)
{
 TIM_MasterConfigTypeDef sMasterConfig = {0};
 
 htim7.Instance = TIM7;
 htim7.Init.Prescaler = 10000;
 htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
 htim7.Init.Period = 100;
 htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
 if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
 {
 Error_Handler();
 }
 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
 if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
 {
 Error_Handler();
 }
 
}

But I don't see anything about interrupts here. There is another function HAL_TIM_Base_MspInit() that I've tried to use without success. I tried calling this function after the init function above was called.

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{
 
 if(tim_baseHandle->Instance==TIM7)
 {
 /* USER CODE BEGIN TIM7_MspInit 0 */
 
 /* USER CODE END TIM7_MspInit 0 */
 /* TIM7 clock enable */
 __HAL_RCC_TIM7_CLK_ENABLE();
 
 /* TIM7 interrupt Init */
 HAL_NVIC_SetPriority(TIM7_IRQn, 5, 0);
 HAL_NVIC_EnableIRQ(TIM7_IRQn);
 /* USER CODE BEGIN TIM7_MspInit 1 */
 
 /* USER CODE END TIM7_MspInit 1 */
 }
}

Anyone have an idea what might be going on that the interrupt isn't firing?

    This topic has been closed for replies.
    Best answer by PatrickF

    Hi,

    did you started the timer in your main code (e.g. HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) ) ?

    Maybe missing the interrupt handler in stm32mp1xx_it.c

    Please have a look to examples in STM32CubeMP1, e.g. in Projects\STM32MP157C-EV1\Examples\LPTIM\LPTIM_PulseCounter (although not TIM, but usage at HAL level is very similar).

    STM32CubeMP1 is usually already loaded in your PC by CubeMX (e.g. on W10 in C:\Users\xxxx\STM32Cube\Repository) or could be loaded manually on st.com or on Github

    Regards.

    1 reply

    PatrickFAnswer
    Technical Moderator
    January 19, 2021

    Hi,

    did you started the timer in your main code (e.g. HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) ) ?

    Maybe missing the interrupt handler in stm32mp1xx_it.c

    Please have a look to examples in STM32CubeMP1, e.g. in Projects\STM32MP157C-EV1\Examples\LPTIM\LPTIM_PulseCounter (although not TIM, but usage at HAL level is very similar).

    STM32CubeMP1 is usually already loaded in your PC by CubeMX (e.g. on W10 in C:\Users\xxxx\STM32Cube\Repository) or could be loaded manually on st.com or on Github

    Regards.

    Graduate II
    January 21, 2021

    HAL_TIM_Base_Start_IT() was missing. Thanks for the reply