[STM32F1] stm32 HAL 通用时钟调试笔记

[复制链接]
1734|5
 楼主| arronfu 发表于 2018-3-22 16:52 | 显示全部楼层 |阅读模式
目标:使用TIM5产生定时中断

启动:
1. 初始化,初始化代码如下
static void MX_TIM5_Init(void)
{

  TIM_ClockConfigTypeDef sClockSourceConfig;
  TIM_MasterConfigTypeDef sMasterConfig;

  htim5.Instance = TIM5;
  htim5.Init.Prescaler = 72-1;
  htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim5.Init.Period = 0xFFFFFFFF;
  htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

2. 启动定时器

  if(HAL_TIM_Base_Start_IT(&htim5) != HAL_OK)
  {
    /* Starting Error */
       
    while(1)printf("error\r\n");
  }

中断响应:
void TIM5_IRQHandler(void)
{
  /* USER CODE BEGIN TIM5_IRQn 0 */

  /* USER CODE END TIM5_IRQn 0 */
  HAL_TIM_IRQHandler(&htim5);
  /* USER CODE BEGIN TIM5_IRQn 1 */
  time++;
  /* USER CODE END TIM5_IRQn 1 */
}

中断响应中添加用户代码,尽量短,如上文只是添加变量自增。

应用程序中根据time,进行响应处理。
huangcunxiake 发表于 2018-3-22 18:27 | 显示全部楼层
如果是裸奔程序,那根本上我觉得是中断函数里不应该搞太多程序段,会影响其他中断,应该把各种标志开关放进去,在主程序处理,除非特别紧急的中断。
734774645 发表于 2018-3-22 22:59 | 显示全部楼层
STM32跟别的家库函数风格明显不同。
734774645 发表于 2018-3-22 22:59 | 显示全部楼层
参数喜欢搞的很长,这个是STM32特点,自从出了图形和配置工具,真滴不适合手工配置了。
 楼主| arronfu 发表于 2018-3-23 09:46 | 显示全部楼层
734774645 发表于 2018-3-22 22:59
参数喜欢搞的很长,这个是STM32特点,自从出了图形和配置工具,真滴不适合手工配置了。 ...

是的,点下图形,软件就形成好了
 楼主| arronfu 发表于 2018-3-23 09:48 | 显示全部楼层
huangcunxiake 发表于 2018-3-22 18:27
如果是裸奔程序,那根本上我觉得是中断函数里不应该搞太多程序段,会影响其他中断,应该把各种标志开关放进 ...

里面只有一个变量自增,其余的都在主函数里面
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

58

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部