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

STM32学习笔记-外部中断和外部时钟

文章目录

    • EXTI基本结构
        • AFIO
    • 定时器
      • 1. STM32 定时器的种类
      • 2. 定时器的主要功能
      • 3. 定时器的配置
      • 4. 定时器 PWM 输出模式
      • 5. 定时器中断配置
      • 输出比较
      • 1. 输出比较模式概述
      • 2. 输出比较模式的配置
        • 今天实在有点疲惫了,明天继续学吧。

EXTI基本结构

在这里插入图片描述

AFIO

中断引脚选择,所有GPIO都可以中断,但是相同的引脚Pin不可以, 注意9-5,10-15是相同的中断,所以要用标志位进行区分。
AFIO功能:外设复用功能:在STM32中,一个I/O引脚可以有多种功能,如GPIO、UART、SPI、I2C等。AFIO模块通过寄存器配置,使得某个引脚对应的特定外设功能可以被激活。
重映射功能:STM32的部分引脚默认功能可能会与其他外设冲突,AFIO提供了一种方法来将这些功能“重映射”到不同的引脚,以避免冲突。
事件控制器:AFIO还支持事件控制功能,可以将某些事件连接到I/O端口,用于唤醒低功耗模式等。
在这里插入图片描述
触发选择器用来选择检测方式,中断屏蔽寄存器确定开启哪些中断。/20是20根线的意思.

定时器

1. STM32 定时器的种类

STM32 的定时器根据功能分为以下几类:

  • 基本定时器(如 TIM6 和 TIM7):只有简单的计数功能,常用于周期性中断,不支持输入捕获和输出比较。
    在这里插入图片描述
    预分频器写定时器的计数频率可以通过预分频器进行进一步分频,计算公式为:
    F t i m = F c l k ( P S C + 1 ) F_{tim} = \frac{F_{clk}}{(PSC + 1)} Ftim=(PSC+1)Fclk
    其中, F c l k F_{clk} Fclk 是输入时钟频率, P S C PSC PSC 是预分频系数。
    计数器会不断自增。计数器和自动重装载相等,把计数器清零,重新计数。
    定时器主模式,通过主模式映射,实现硬件的自动化。

  • 通用定时器(如 TIM2、TIM3、TIM4 、TIM5等):支持输入捕获、输出比较、PWM 生成和计数器模式,应用灵活,功能较多。
    在这里插入图片描述
    向下计数模式,中央对齐(先向上中断,然后下去中断)。
    外部ETR经过滤波可以输入外部时钟

  • 高级定时器(如 TIM1 和 TIM8):功能强大,具备高级的 PWM 输出控制、死区时间控制、刹车控制等功能,适合用于电机控制等复杂应用场景。
    在这里插入图片描述
    多了计数器可以多次计数后再中断。
    DTG,死区,强力关断二极管。三相无刷电机。刹车输入电路,防止意外产生。

2. 定时器的主要功能

STM32 定时器具备以下核心功能:
在这里插入图片描述

  • 计时功能:通过计数来精确测量时间,可以实现时间延迟。
  • 输入捕获(Input Capture):捕获输入信号的脉冲宽度或周期。
  • 输出比较(Output Compare):在计数器达到某一预定值时产生输出事件。
  • PWM 输出:用于生成脉宽调制信号,常用于控制 LED 亮度或电机的速度。
  • 编码器接口模式:可以用于电机控制中的位置和速度测量。
    预分频缓冲器可以防止运行时频率变化对定时的影响。

3. 定时器的配置

STM32 定时器通过以下几个步骤进行配置:

  1. 时钟配置:定时器的计数频率由系统时钟分频得到。可以使用 RCC(Reset and Clock Control)模块来配置定时器时钟源。
    时钟树:
    在这里插入图片描述
    如果外部72MHz时钟出问题了,会使用内部8MHz的。CSS,检测外部时钟是否有问题。

  2. 预分频器(Prescaler)

  3. 计数器模式:定时器可以配置为向上计数、向下计数或中心对称模式(即先向上计数再向下计数,适用于 PWM)。

  4. 自动重装载值(ARR):计数器计数到这个值后会自动重置,并可触发中断或事件。通过调整 ARR 可以实现不同的定时周期。

  5. 中断和事件:配置定时器的中断,可以在计数到达特定值(如 ARR)时产生中断,从而执行特定任务。

4. 定时器 PWM 输出模式

PWM(脉宽调制)模式是 STM32 定时器的重要功能之一,通过 PWM 信号可以控制 LED 亮度、伺服电机角度、直流电机速度等。PWM 信号的占空比由定时器的计数值与比较寄存器的值来决定。

配置 PWM 输出模式的步骤如下:

  1. 选择 PWM 模式:将定时器的通道配置为 PWM 模式(如 PWM 模式 1 或 PWM 模式 2)。
  2. 设置占空比:设置比较寄存器 CCR 值来控制占空比,比较值占周期的比例决定 PWM 信号的高电平时间。
  3. 输出极性设置:可选择 PWM 信号的输出极性。
  4. 启动定时器:启用定时器,并在相关通道上产生 PWM 信号。

5. 定时器中断配置

STM32 定时器支持多种中断,例如更新中断、捕获中断、比较中断等。在使用中断时,需启用定时器和 NVIC(中断向量控制器)的中断通道。

配置步骤如下:

  1. 使能中断:在定时器的控制寄存器中设置中断使能位(如 TIM_IT_Update)。

  2. 配置中断优先级:在 NVIC 设置中断优先级。

  3. 编写中断服务函数:在中断处理函数中,编写定时器到期后的任务。

  4. 清除中断标志:在中断服务函数中执行完成后,清除中断标志位以避免重复触发。

输出比较

在这里插入图片描述

在 STM32 中,TIM(定时器)的输出比较模式(Output Compare)是定时器模块的一个重要功能,用于生成特定的事件或输出信号。在输出比较模式下,定时器会将计数器的值与指定的比较值进行比较,当计数器达到比较值时,定时器会触发相应的事件或输出信号。

1. 输出比较模式概述

输出比较模式的核心是将定时器的计数器(CNT)的值与预设的比较寄存器(CCR)中的值进行比较。每当计数器的值与比较值相等时,TIM 就会执行相应的动作,比如触发中断、产生输出信号等。

STM32 的定时器提供多种输出比较模式,常用的包括以下几种:

  • 冻结模式(Frozen Mode):计数器达到比较值时不会产生任何输出变化。
  • 活动电平模式(Active Level Mode):计数器达到比较值时将输出设为高电平。
  • 非活动电平模式(Inactive Level Mode):计数器达到比较值时将输出设为低电平。
  • 翻转模式(Toggle Mode):计数器达到比较值时翻转输出电平。
  • 强制输出模式(Force Active / Force Inactive):强制将输出设为高电平或低电平。
  • PWM 模式(PWM Mode 1 / PWM Mode 2):PWM Mode 1:在这种模式下,当计数器的值小于比较寄存器 CCR 的值时,输出为高电平;当计数器的值大于或等于 CCR 的值时,输出为低电平。因此,占空比与 CCR 的值成正比,CCR 越大,高电平持续的时间越长。
  • PWM Mode 2:在这种模式下,当计数器的值小于比较寄存器 CCR 的值时,输出为低电平;当计数器的值大于或等于 CCR 的值时,输出为高电平。

2. 输出比较模式的配置

在 STM32 中,输出比较模式可以通过以下步骤进行配置:

  1. 设置定时器时钟:启用定时器的时钟,设置预分频器(PSC)和自动重装载寄存器(ARR)以确定计数频率和周期。

  2. 选择输出比较模式:通过配置 TIMx_CCMRx 寄存器(捕获/比较模式寄存器),选择合适的输出比较模式,例如冻结模式、翻转模式等。

  3. 设置比较值:将比较值写入比较寄存器 TIMx_CCRy 中(其中 x 表示定时器编号,y 表示通道号),定时器会将 CNT 的值与 CCR 的值进行比较。

  4. 使能通道输出:通过 TIMx_CCER(捕获/比较使能寄存器)设置通道使能和极性,以允许信号输出。

  5. 启动定时器:设置 TIMx_CR1(控制寄存器 1)的使能位(CEN),开始定时器计数。

今天实在有点疲惫了,明天继续学吧。

http://www.kler.cn/a/383567.html

相关文章:

  • 在 Ubuntu 下使用 Tauri 打包 EXE 应用
  • 【day14】异常处理与Object类深入解析
  • 【QSS样式表 - ⑥】:QPushButton控件样式
  • python 内存管理
  • D102【python 接口自动化学习】- pytest进阶之fixture用法
  • C#+OpenCv深度学习开发(常用模型汇总)
  • 前端学习笔记—Vue3特性
  • web安全测试渗透案例知识点总结(下)——小白入狱
  • Zookeeper分布式锁实现
  • 一个百度、必应搜索引擎图片获取下载的工具包
  • 音频模型介绍
  • 数据结构 ——— 向上调整建堆和向下调整建堆的区别
  • Linux-shell实例手册-磁盘
  • 在Ubuntu 上实现 JAR 包的自启动
  • 强化学习问题设计技巧
  • Spring-Day7
  • springboot020基于Java的免税商品优选购物商城设计与实现
  • 一七四、JavaScript里Object的常用方法及其示例
  • 揭秘全向轮运动学:机动艺术与上下位机通信的智慧桥梁
  • 大模型低秩分解
  • Vue 2 + JavaScript + vuedraggable 集成案例
  • 【Effective C++】阅读笔记3
  • 深入了解逻辑回归:机器学习中的经典算法
  • 【css】overflow: hidden效果
  • 【设计模式】结构型模式(三):桥接模式、外观模式
  • 如何建购物网站提升用户体验