Skip to main content
shane mattner
Senior
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

PatrickF
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.

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.Tip of the day: Try Sidekick STM32 AI agent, see here
shane mattner
Senior
January 21, 2021

HAL_TIM_Base_Start_IT() was missing. Thanks for the reply