当前位置: 首页 > news >正文

STM32定时器TIM控制

一、CubeMX的设置

1、新建工程,进行基本配置

2、配置定时器TIM2

1)定时器计算公式:(以下两条公式相同)

Tout = ((ARR+1) * PSC+1)) / Tclk
TimeOut = ((Prescaler + 1) * (Period + 1)) / TimeClockFren

Tout = TimeOut:定时器溢出时间(单位为us),多少触发(进入)一次TIM中断。
PSC = Prescaler:预分频系数(预分频器值)。
ARR = Period:自动重装载值,TIM计数当超过这个值,则清0重新计数。
Tclk = TimeClockFren:定时器的输入时钟频率(单位MHZ),当前使用的TIM2系统时钟频率。

eg: 

Tout = (71+1)*(999+1)/72 = 1000us
= 1 ms = 0.001 s

因此,定时器则0.001s触发一次中断。

2)配置分频系数为72-1,向上计数模式,计数周期为1000-1,使能自动重载模式。

3)开启定时器TIM2的中断

二、代码调试

在CubeMX中生成工程后,打开main.c添加中断响应之后所需的一些代码

main.c

  /* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim2); //以中断方式开启定时器2/* USER CODE END 2 */

上述添加的函数表示启动相应的定时器,“h”表示HAL库,“tim2”表示定时器2。

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
//定时器回调函数
//当到达指定定时值时进入中断执行中断任务
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static int i = 0; //定义一个静态变量iif(htim == &htim2) {//执行对应代码if(++i == 1000) //1s{i = 0;//对led灯或者其他外设进行操作HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);//对GPIO口的电平进行反转(低-高,高—低)HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_2);}}
}/* USER CODE END 0 */

上述以3个LED灯闪烁作为例子,可自行在CubeMX中设置

该函数为定时器的中断回调函数,当产生定时中断的时候,会自动调用这个函数。

在函数内部定义了一个静态变量:i ,当它等于1000的时候,才会执行if里面的代码。也就是说需要发生1000次中断,才会让LED的状态翻转。

前面根据公式计算出,一次定时中断的时间是0.001秒,所以1000次中断的时间是0.001*1000=1秒。也就是说每隔1秒,LED的状态翻转一次。

三、烧录结果

修改后,保存,编译、下载,重新上电。可以看到LED灯差不多每隔1秒翻转一次

http://www.lryc.cn/news/121157.html

相关文章:

  • 网络请求中,token和cookie有什么区别
  • Javaweb_xml
  • http相关知识点
  • 【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析
  • 走出迷宫(多组输入bfs)
  • Linux系统编程-终端、进程组、会话
  • Linux部分文件操作记录
  • Android系统-进程-Binder2-Java层
  • 体渲染原理及WebGL实现【Volume Rendering】
  • VUE3组件
  • 【iOS】autoreleasepool
  • 0基础学习VR全景平台篇 第80篇:Insta360 影石如何直播推流
  • 大语言模型之三 InstructGPT训练过程
  • ChatGPT在自动化报告和数据分析中的应用如何?
  • 面试热题(三数之和)
  • 在idea运行python文件
  • SQL - limit
  • 11. Redis基础知识
  • list模拟实现【引入反向迭代器】
  • 【华为OD机试】字符串变换最小字符串【2023 B卷|100分】
  • ARTS 挑战打卡的第8天 ---volatile 关键字在MCU中的作用,四个实例讲解(Tips)
  • 第二课-一键安装SD-Stable Diffusion 教程
  • Vue3 动态列 <el-table-column> 实现 formatter 的两种方法
  • 室温超导是什么?有哪些应用场景?
  • Windows+VMware+Ubuntu+Anaconda+VMware Tools
  • Xray配置文件详解
  • flink优化
  • docker: ERROR: Couldn‘t connect to Docker daemon at http+docker://localhost
  • 大模型在金融医疗、生命系统和物理仿真领域的创新应用探索
  • tensorflow / tensorflow-gpu cuda cudNN tensorRT 安装,启用显卡加速