目录
定时器的基本概述
通过滴漏和漏沙瓶这两个例子简单讲述定时器的基本工作原理。
STM32的常见的定时器资源: 系统嘀嗒定时器SysTick、看门狗定时器WatchDog、实时时钟RTC、基本定时器、通用定时器、高级定时器。
系统嘀嗒定时器SysTick :这是一个集成在Cortex M3内核当中的定时器,它并不属于芯片厂商的外设,也就是说使用ARM内核的不同厂商,都拥有基本结构相同的系统定时器。主要目的是给RTOS提供时钟节拍做时间基准。
基本定时器:TIM6、TIM7。
通用定时器:TIM2、TIM3、TIM4、TIM5。在基本定时器的基础上,实现输出比较、输入捕获、PWM生成、单脉冲模式输出等功能。这类定时器最具代表性,使用也最广泛。
高级定时器:TIM1、TIM8。
STM32通用定时器的重要知识点
通用定时器的基本结构组成:
STM32的通用定时器,是一个通过可编程预分频器(Prescaler)驱动的16位自动重装主计数器(Counter Period)构成。可以对内部时钟或触发源以及外部时钟或触发源进行计数。
通用定时器的基本工作原理:
首先,定时器时钟信号送入16位可编程预分配器(Prescaler),该预分配器系数为0~65535之间的任意数值。预分配器溢出后,会向16位的主计数器(Counter Period)发出一个脉冲信号。
预分频器,本质上是一个加法计数器,预分频系数实际上就是加计数的溢出值。
定时器发生中断时间的计算方法:
定时时间 = (Prescaler+1 ) X (Counter Period+1) X 1/ 定时器时钟频率
时钟信号1KHz,Prescaler为9,Counter Period为999,定时时间?![图片[1] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[1] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/61e7f66b2ab3f51d91441027.jpg)
计算案例![图片[2] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[2] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/625283a2239250f7c583c9a6.jpg)
实训案例:外部中断信号控制LED灯开关
配置要点![图片[3] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[3] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/61e959112ab3f51d918abd73.jpg)
![图片[4] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[4] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/61e9598e2ab3f51d918b3e70.jpg)
![图片[5] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[5] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/61e95a492ab3f51d918c0546.jpg)
![图片[6] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[6] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/61e95cb32ab3f51d918e6065.jpg)
![图片[7] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[7] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/61e95ce12ab3f51d918ea09a.jpg)
![图片[8] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[8] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/6252892e239250f7c58f8ab2.jpg)
![图片[9] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[9] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/61e95d0f2ab3f51d918edad9.jpg)
![图片[10] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[10] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/625289fb239250f7c5911412.jpg)
在XMF07A或XMF07C开发板上,利用STM32CubeMX和Keil5协同开发,完成以下的功能:
【1】利用TIM2实现间隔定时,每隔0.2秒将LED1的开关状态翻转。
【2】利用TIM3实现间隔定时,每隔1秒将LED2的开关状态翻转。
【3】修改TIM2的初始化代码,改为每隔0.5秒将LED1的开关状态翻转。![图片[11] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客 图片[11] - 【4】基于STM32CubeMX-STM32定时器开发 - 我的学记|刘航宇的博客](https://pic.imgdb.cn/item/61e41dec2ab3f51d915b1661.jpg)
/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2) //处理TIM2间隔定时中断
{
AL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
}
if(htim->Instance == TIM3) //处理TIM3间隔定时中断
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
}
}
/* USER CODE END 0 *//* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2); //启动定时器TIM2
HAL_TIM_Base_Start_IT(&htim3); //启动定时器TIM3
//有IT的代表使能时钟中断
/* USER CODE END 2 */
请问使用定时器时,用最小系统板下载程序后没有问题,但是protues仿真就会报错Access to register of unclocked peripheral at 0x40000000 cause BUS_FAULT [U1_CM3CORE]是什么问题呢?
@溜~~~
此问题一般是protues版本的问题,可以尝试本站教程一提供的仿真开发板下载进行调试