【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断
程序员文章站
2022-03-13 17:18:53
...
【STM32】HAL库 STM32CubeMX教程一 ---- TIM3定时器中断
示例详解:
基于硬件平台: STM32F103ZET6正点原子的精英板, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。
-
STM32CubeMX生成代码过程如下:
1>. 打开SWD - debug调试模式, STM32CubeMX生成的代码默认是没打开debug调试模式的
2>. 外部时钟配置, HSE选择为外部晶振
3>. CLOCK Configuration 配置如下: 选择HSE,PLL倍频为9,
4>. TIM3 配置如下:
启用TIM3,选择内部时钟源(Internal Clock),并设置好分频,计数;
打开TIM3中断
5>. GPIO口配置, 配置LED0,LED1脚位
6>. 生成代码配置
这样就生成了TIM3工程, 接下来我们需要修改main.c 和TIM.c 这2个文件; -
main.c 初始化TIM3后, 打开TIM3中断;
/**
* @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 */
}
- 在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例程就已经完成了!