7082|5

1412

帖子

3

TA的资源

版主

楼主
 

STM32定时器(自动重装)经验分享 [复制链接]

本帖最后由 annysky2012 于 2021-2-5 14:19 编辑

有网友在论坛发帖求教,定时器明明初始化时设置的定时值是1us,而自己设置定时值(1S)以后,而实际为4s。

网友帖子(https://bbs.eeworld.com.cn/thread-1156521-1-1.html)在这里。

经过自己对STM32的中文手册的查看,以及使用自己开发板运行后,现象依旧如此,开始也是百思不得其解。通过查看资料得知,原来网友把自动重装值设置的有问题。

 

现定义几个参数值:

//arr:自动重装值。

// psc:时钟预分频数 

//定时器溢出间计算方法  :Tout=((arr+1)*(psc+1))/Ft us.

//Ft=定时器工作频率单位 :Mhz

 

根据定时器的溢出时间计算方法,自动重装值和分频系数在设置时必须减一。而自动重装值又不能为0(这是不允许的)。所以在配置的时候,我们可以这样:

  • TIM_TimeBaseStructure.TIM_Period = 2-1; //2 u second
  • TIM_TimeBaseStructure.TIM_Prescaler = 24-1;//PrescalerValue

所以,Tout=((arr+1)*(psc+1))/Ft=(TIM_Period +1)*(TIM_Prescaler+1)/24000000 = 2*24/24000000=2us。

 

也就是每进一次中断时2us,在设置计数次数时要注意。

以下为回环函数:

/* USER CODE BEGIN 4 */
//定时时间2us
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    static uint32_t TimerCount = 0;
    if(htim->Instance==TIM7)
    {
        TimerCount++;
        if(TimerCount>250)//0.5mS
        {
            TimerCount=0;
            HAL_GPIO_TogglePin(LD1_GPIO_Port,LD1_Pin); 
        }
    }
}
/* USER CODE END 4 */

定时器初始化:

/**
  * @brief TIM7 Initialization Function
  * @param None
  * @retval None
  */
static void MX_TIM7_Init(void)
{

  /* USER CODE BEGIN TIM7_Init 0 */

  /* USER CODE END TIM7_Init 0 */

  TIM_MasterConfigTypeDef sMasterConfig = {0};

  /* USER CODE BEGIN TIM7_Init 1 */

  /* USER CODE END TIM7_Init 1 */
  htim7.Instance = TIM7;
  htim7.Init.Prescaler = 108-1;
  htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim7.Init.Period = 2-1;
  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();
  }
  /* USER CODE BEGIN TIM7_Init 2 */
    HAL_TIM_Base_Start_IT(&htim7); 
  
  /* USER CODE END TIM7_Init 2 */

}

底层函数:

/**
* @brief TIM_Base MSP Initialization
* This function configures the hardware resources used in this example
* @param htim_base: TIM_Base handle pointer
* @retval None
*/
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{
  if(htim_base->Instance==TIM7)
  {
  /* USER CODE BEGIN TIM7_MspInit 0 */

  /* USER CODE END TIM7_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_TIM7_CLK_ENABLE();
    /* TIM7 interrupt Init */
    HAL_NVIC_SetPriority(TIM7_IRQn, 4, 0);
    HAL_NVIC_EnableIRQ(TIM7_IRQn);
  /* USER CODE BEGIN TIM7_MspInit 1 */

  /* USER CODE END TIM7_MspInit 1 */
  }

}

中断函数:

/**
  * @brief This function handles TIM7 global interrupt.
  */
void TIM7_IRQHandler(void)
{
  /* USER CODE BEGIN TIM7_IRQn 0 */

  /* USER CODE END TIM7_IRQn 0 */
  HAL_TIM_IRQHandler(&htim7);
  /* USER CODE BEGIN TIM7_IRQn 1 */

  /* USER CODE END TIM7_IRQn 1 */
}

运行结果:

此帖出自stm32/stm8论坛

最新回复

谢谢分享   详情 回复 发表于 2021-2-23 22:11

赞赏

1

查看全部赞赏

点赞(1) 关注
个人签名

没有什么不可以,我就是我,不一样的烟火! 

 

回复
举报

1万

帖子

2854

TA的资源

管理员

沙发
 

赞@!!!!!感谢楼主分享~楼主太有心了

此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

持续努力~~~~~  详情 回复 发表于 2021-2-5 14:43
 
个人签名

玩板看这里:

https://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!

 

回复

1412

帖子

3

TA的资源

版主

板凳
 
okhxyyo 发表于 2021-2-5 14:42 赞@!!!!!感谢楼主分享~楼主太有心了

持续努力~~~~~

此帖出自stm32/stm8论坛

点评

谢谢分享  详情 回复 发表于 2021-2-6 08:59
 
个人签名

没有什么不可以,我就是我,不一样的烟火! 

 

回复

1万

帖子

16

TA的资源

版主

4
 

谢谢分享

此帖出自stm32/stm8论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

5
 

谢谢分享,学习了

此帖出自stm32/stm8论坛
 
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

6
 

谢谢分享

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表