简体   繁体   English

重置后,stm32f051r8t6 TIM14中断处理程序不起作用

[英]stm32f051r8t6 TIM14 interrupt handler not working after reset

I am using STM32CubeMX to generate code into IAR, and I am using a stm32f051r8t6 microcontroller, The problem I am having is that when first loading the code onto the chip, it all works perfect, however after pressing restart on either the board or IAR debugger, the TIM14 interrupt handler is not entered, but as soon as I leave the debugger and enter again, it starts working until I press restart. 我正在使用STM32CubeMX将代码生成到IAR中,并且正在使用stm32f051r8t6微控制器,我遇到的问题是,当第一次将代码加载到芯片上时,它们都可以正常工作,但是在板上或IAR调试器上按重新启动后,不会输入TIM14中断处理程序,但是一旦我离开调试器并再次进入,它就会开始工作,直到我按下重新启动。 Has anybody come across this problem before? 有人遇到过这个问题吗? My code is below 我的代码如下

static void MX_TIM14_Init(void);

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if (htim->Instance == TIM14)
  {
    HAL_GPIO_WritePin(GPIOA, USART1_TE_Pin, GPIO_PIN_SET);
  }
}

int main(void)
{
   /* USER CODE BEGIN 1 */

   /* USER CODE END 1 */

   /* MCU Configuration---------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the
  Systick.    */
  HAL_Init();

 /* USER CODE BEGIN Init */

 /* USER CODE END Init */

 /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  MX_TIM14_Init();

  HAL_TIM_Base_Start(&htim14);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
 while (1)
{
FslBufferControl();
MimModeCheck();
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
static void MX_TIM14_Init(void)
{

 /* USER CODE BEGIN TIM14_Init 0 */

 /* USER CODE END TIM14_Init 0 */

 /* USER CODE BEGIN TIM14_Init 1 */

 /* USER CODE END TIM14_Init 1 */
 htim14.Instance = TIM14;
 htim14.Init.Prescaler = 47999;
 htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
 htim14.Init.Period = 1;
 htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
 if (HAL_TIM_Base_Init(&htim14) != HAL_OK)
 {
  Error_Handler();
 }
 /* USER CODE BEGIN TIM14_Init 2 */

 /* USER CODE END TIM14_Init 2 */

 }

You need to add to enable the interrupt. 您需要添加以启用中断。

  MX_TIM14_Init();

  HAL_NVIC_EnableIRQ(TIM14_IRQn);   // <----------------------------

  HAL_TIM_Base_Start(&htim14);

Just check the IRQn TIM14 UG event number. 只需检查IRQn TIM14 UG事件编号。 They are defined in the IRQn_Type enum type defined in the STM32F___.h file where ___ is the model of your micro (you will find it in the include folder) 它们在STM32F___.h文件中定义的IRQn_Type枚举类型中定义,其中___是您的微型计算机的模型(您可以在include文件夹中找到它)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM