野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17790|回复: 2

【提问】定时器中断和串口中断冲突

[复制链接]
发表于 2020-7-13 17:26:18 | 显示全部楼层 |阅读模式
向大家提个问题
我的一个程序里,同时打开了定时器中断和串口接收中断,定时器能正常计时,但是串口上就接收不到数据了
微信图片_20200713172300.png
上图main函数打开两个中断
微信图片_202007131723001.png
这个是定时器中断计数
微信图片_202007131723002.png
这个是串口接收函数
微信图片_202007131723003.png

微信图片_202007131723004.png
两个中断优先级我也调整过
只有不打开定时器中断,串口才能正常接收函数
想请各位帮我看看哪有问题


回复

使用道具 举报

发表于 2020-7-14 09:37:31 | 显示全部楼层
串口优先级高于定时器试试
建议把配置函数发出来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 09:46:26 | 显示全部楼层
还有梦与你 发表于 2020-7-14 09:37
串口优先级高于定时器试试
建议把配置函数发出来

/* TIM6 init function */
void MX_TIM6_Init(void)
{
  TIM_MasterConfigTypeDef sMasterConfig = {0};

  htim6.Instance = TIM6;
  htim6.Init.Prescaler = 71;
  htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim6.Init.Period = 1000;
  htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }

}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{

  if(tim_baseHandle->Instance==TIM6)
  {
  /* USER CODE BEGIN TIM6_MspInit 0 */

  /* USER CODE END TIM6_MspInit 0 */
    /* TIM6 clock enable */
    __HAL_RCC_TIM6_CLK_ENABLE();

    /* TIM6 interrupt Init */
    HAL_NVIC_SetPriority(TIM6_IRQn, 1, 0);
    HAL_NVIC_EnableIRQ(TIM6_IRQn);
  /* USER CODE BEGIN TIM6_MspInit 1 */

  /* USER CODE END TIM6_MspInit 1 */
  }
}
这是定时器配置,1ms中断一次,抢占优先级1

void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(uartHandle->Instance==UART4)
  {
  /* USER CODE BEGIN UART4_MspInit 0 */

  /* USER CODE END UART4_MspInit 0 */
    /* UART4 clock enable */
    __HAL_RCC_UART4_CLK_ENABLE();
  
    __HAL_RCC_GPIOC_CLK_ENABLE();
    /**UART4 GPIO Configuration   
    PC10     ------> UART4_TX
    PC11     ------> UART4_RX
    */
    GPIO_InitStruct.Pin = DIN4_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(DIN4_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = DOUT4_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(DOUT4_GPIO_Port, &GPIO_InitStruct);

    /* UART4 interrupt Init */
    HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(UART4_IRQn);
  /* USER CODE BEGIN UART4_MspInit 1 */

  /* USER CODE END UART4_MspInit 1 */
  }
这是串口4配置,抢占优先级0,比定时器高。串口4是和智能液晶屏通信的,当屏幕上有按下操作,会返回一个键值

每定时到1s,我往串口4里写一次时间,现在是只有上电开机第一次写时间,接收到串口4返回了“O”“K”,接下来就怎么也进不到串口中断了,写时间也不返回值,按屏幕也不返回键值


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 15:00 , Processed in 0.030501 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表