你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030 Tim1中断内变量

[复制链接]
sammychen 提问时间:2019-4-24 16:53 /
求助大侠,

Tim1 100us中断配置后,callback函数里面变量不能自减一直减到0;

void KeyDown(void)
{
if(!(KeyNum == KEY_NONEWKEY))
{
  KeyNumDelay = 50000;//5s base on 100us
}
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim1)
{
  KeyCntTimer--;
KeyDelay--;
KeyNumDelay--;
ErrorDisplayDelay--;
LEDDriver();
}

void MX_TIM1_Init(void)
{
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  htim1.Instance = TIM1;
  htim1.Init.Prescaler = 48-1;
  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim1.Init.Period = 100-1;
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;
  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
}

收藏 评论3 发布时间:2019-4-24 16:53

举报

3个回答
toofree 回答时间:2019-4-24 17:15:52
不能减到0,那么能减到几?
怎么判断不能减到0的?

关键是能不能减,只要能减,它就能减到0;
不能减的话,只能说明没有调用过HAL_TIM_PeriodElapsedCallback()。
如果没调用过,那么说明中断没配置对。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

wenyangzeng 回答时间:2019-4-24 19:07:26
由于C++编译器的优化等级不同,这句:if(!(keyNum==KEY_NONEWKEY))有可能会被忽略跳过。
是否改写成:
if(keyNum != KEY_NONEWKEY)

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

sammychen 回答时间:2019-4-25 15:39:19
感谢各位,是忽略了自减溢出问题了

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版