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

TIM 实现定时中断【STM32L4】【实操】

使用定时器实现定时中断的功能:比如每1ms进入中断处理函数

使用STM32CubeMX配置TIM初始化

 先了解每个参数的含义,在进行配置

Counter Settings:  计数器基本设置

        Prescaler(PSC):  预分频器,设置预分频器系数

        Counter Mode:  技术模式,上/下/中央对齐

        Counter Period(AutoReload Register):  计数周期,ARR的值

        Internal Clock Division:  内部时钟频率,对输入到定时器内部的时钟进行分频,位于预分频器后面,作用是:数字滤波、信号同步、噪声抑制

        auto-reload preload:  自动装载预装载,影子寄存器,是否启用

Trigger Output(TRGO) Parameters:  触发输出参数 

        Master/Slave Mode:  主从模式选择

        Trigger Event Selection:  触发事件选择,触发输出TRGO

 **************************

使用的L4进入定时器的频率是 80Mhz

我们选择80分频,就是1Mhz,1000 / 1000 000 = 0.001s,就是1ms

int main(void)
{HAL_Init();SystemClock_Config();MX_TIM4_Init();// 以中断模式启动定时器// 启动后 会一直循环 不会停止if (HAL_TIM_Base_Start_IT(&htim4) != HAL_OK){Error_Handler();}while (1){}
}// 用户的中断回调函数 编写自己所需功能
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM4){// 比如使 LED 亮灭HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); }
}
void MX_TIM4_Init(void)
{ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; // TIM时钟配置结构体TIM_MasterConfigTypeDef sMasterConfig = {0};  // TIM主机配置结构体htim4.Instance = TIM4;htim4.Init.Prescaler = 79;        // 分频系数htim4.Init.CounterMode = TIM_COUNTERMODE_UP;      // 向上计数模式htim4.Init.Period = 1000;     // 计数周期htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;        // 内部时钟分频htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;    // 自动重装载影子寄存器if (HAL_TIM_Base_Init(&htim4) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;    //  选择内部时钟源if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;       // 主输出触发源复位sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;      // 不使能主机模式if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK){Error_Handler();} }void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{if(tim_baseHandle->Instance==TIM4){ __HAL_RCC_TIM4_CLK_ENABLE();        // 打开TIM4时钟/* TIM4 interrupt Init */HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);      // 设置TIM4中断优先级HAL_NVIC_EnableIRQ(TIM4_IRQn); }
}

 


 

http://www.dtcms.com/a/298399.html

相关文章:

  • 原生微信小程序如何调整开发版本
  • 全面解析MySQL(3)——CRUD进阶与数据库约束:构建健壮数据系统的基石
  • 数仓主题域划分
  • 机器学习(一)KNN,K近邻算法(K-Nearest Neighbors)
  • 不用电脑要不要关机?
  • win通过OpenSSL生成.ssh id_rsa密钥方法
  • 反射和SPI
  • 【DeepRare】疾病识别召回率100%
  • Haprxy七层代理
  • 呼叫中心系统管理权限功能配置
  • 深度学习篇---图片分辨率
  • Agentic RAG理解和简易实现
  • AMD官网下载失败,不让账户登录下载
  • 集合专题之Map
  • Kimi K2 大语言模型技术特性与应用实践分析
  • 初识opencv04——图像预处理3
  • 太极生两仪,两仪生四象,四象生八卦
  • mybatisX的自定义模板生成
  • 【深基12.例1】部分背包问题 Java
  • docker 挂载卷
  • 【C++】二叉搜索数
  • 使用Akshare获取股票历史数据
  • Avalonia 发布完cv到Linux上运行 出现字体丢失/不显示问题
  • [NLP]UPF基本语法及其在 native low power verification中的典型流程
  • 闲鱼多账号运营安全策略 如何规避同ip
  • MC_GearInPos电子齿轮
  • python-函数进阶、容器通用方法、字符串比大小(笔记)
  • 机器学习-SVM支持向量机
  • Unity UOS 多人联机
  • Go语言中的非类型安全指针