【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断

【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断

示例详解:
基于硬件平台: STM32F103ZET6正点原子的精英板, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。

  1. STM32CubeMX生成代码过程如下:

    1>. 打开SWD - debug调试模式, STM32CubeMX生成的代码默认是没打开debug调试模式的 在这里插入图片描述
    2>. 外部时钟配置, HSE选择为外部晶振在这里插入图片描述
    3>. CLOCK Configuration 配置如下: 选择HSE,PLL倍频为9,
    【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断_第1张图片
    4>. TIM3 配置如下:
    启用TIM3,选择内部时钟源(Internal Clock),并设置好分频,计数;
    【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断_第2张图片
    打开TIM3中断
    【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断_第3张图片
    5>. GPIO口配置, 配置LED0,LED1脚位
    【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断_第4张图片
    6>. 生成代码配置
    【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断_第5张图片
    这样就生成了TIM3工程, 接下来我们需要修改main.c 和TIM.c 这2个文件;

  2. main.c 初始化TIM3后, 打开TIM3中断;
    【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断_第6张图片

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
	/*使能定时器3中断*/
	HAL_TIM_Base_Start_IT(&htim3);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
  1. 在TIM.c 文件中添加TIM3中断回调函数;

/* Includes ------------------------------------------------------------------*/
#include "tim.h"

/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	static uint8_t tim3Cnt = 0;
	if (htim == (&htim3))
	{
		if(++tim3Cnt >= 50)//10ms*50=500ms
		{
			tim3Cnt = 0;
			HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
			HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
		}
	}
}
/* USER CODE END 0 */

至此 TIM3例程就已经完成了!

你可能感兴趣的:(【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断)