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

【NUCLEO-L496ZG评测2】定时器中断,继续点灯之旅

[复制链接]
jundao721 提问时间:2017-5-16 18:51 /
第二篇就是熟悉一下定时器,这都是常用的功能外设,当然验证定时器的中断还是得用LED灯才能看到效果。看Datasheet的话,会发现芯片有16个定时器。先试试16bit普通的定时器中断。
首先初始化库,时钟配置,如下所示:
  1. /** System Clock Configuration
  2. */
  3. void SystemClock_Config(void)
  4. {

  5.   RCC_OscInitTypeDef RCC_OscInitStruct;
  6.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  7.     /**Initializes the CPU, AHB and APB busses clocks
  8.     */
  9.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  10.   RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
  11.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  12.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  13.   RCC_OscInitStruct.PLL.PLLM = 1;
  14.   RCC_OscInitStruct.PLL.PLLN = 20;
  15.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  16.   RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  17.   RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  18.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  19.   {
  20.     Error_Handler();
  21.   }

  22.     /**Initializes the CPU, AHB and APB busses clocks
  23.     */
  24.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  25.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  26.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  27.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  28.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV16;
  29.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  30.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
  31.   {
  32.     Error_Handler();
  33.   }

  34.     /**Configure the main internal regulator output voltage
  35.     */
  36.   if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
  37.   {
  38.     Error_Handler();
  39.   }

  40.     /**Configure the Systick interrupt time
  41.     */
  42.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  43.     /**Configure the Systick
  44.     */
  45.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  46.   /* SysTick_IRQn interrupt configuration */
  47.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  48. }
复制代码

初始化引脚:
  1. GPIO_InitTypeDef GPIO_InitStruct;

  2.   /* GPIO Ports Clock Enable */
  3.   __HAL_RCC_GPIOH_CLK_ENABLE();
  4.   __HAL_RCC_GPIOB_CLK_ENABLE();

  5.   /*Configure GPIO pin Output Level */
  6.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);

  7.   /*Configure GPIO pin : PB14 */
  8.   GPIO_InitStruct.Pin = GPIO_PIN_14;
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  12.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
复制代码

初始化定时器2
  1. TIM_ClockConfigTypeDef sClockSourceConfig;
  2.   TIM_MasterConfigTypeDef sMasterConfig;

  3.   htim2.Instance = TIM2;
  4.   htim2.Init.Prescaler = 9999;
  5.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  6.   htim2.Init.Period = 999;
  7.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  8.   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  9.   {
  10.     Error_Handler();
  11.   }

  12.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  13.   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  14.   {
  15.     Error_Handler();
  16.   }

  17.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  18.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  19.   if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  20.   {
  21.     Error_Handler();
  22.   }
  23.   HAL_TIM_Base_Start_IT(&htim2);
复制代码

中断响应部分:
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  2. {
  3.      HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_14);
  4.     /* Insert delay 100 ms */
  5. //    HAL_Delay(100);
  6. }
复制代码

效果如图


图1

图1
收藏 1 评论0 发布时间:2017-5-16 18:51

举报

0个回答

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版