定时器

文章目录

  • 1
    • 1.1
    • 1.2
    • 1.3
    • 1.4
    • 1.5
  • 2
    • 2.1
    • 2.2 基本定时器 框图
    • 2.3
    • 2.4
      • 2.4.1
      • 2.4.2
      • 2.4.3
      • 2.4.4
      • 2.4.5
      • 2.4.6
    • 2.5 定时器 溢出时间计算方法
    • 2.6 定时器 中断 实验配置步骤
    • 2.7
      • 2.7.1
      • 2.7.2 和4
      • 2.7.3
      • 2.7.5
      • 2.7.6
  • 3
    • 3.1
    • 3.2
      • 3.2.1 时钟源
      • 3.2.2
      • 3.2.4
      • 3.2.6
    • 3.3
    • 3.4
      • 3.4.1
      • 3.4.2
      • 3.4.3
      • 3.4.4
      • 3.4.5
        • 3.4.5.1
        • 3.4.5.2
        • 3.4.5.3
        • 3.4.5.4
  • 4
    • 4.1
    • 4.2
    • 4.3
      • 4.3.1
      • 4.3.2
      • 4.3.3
      • 4.3.4
    • 4.4
    • 4.5
      • 4.5.1
      • 4.5.2
      • 4.5.3
      • 4.5.4
      • 4.5.5
      • 4.5.6
      • 4.5.7

在这里插入图片描述

  • 实验个数 1 4 4

1

在这里插入图片描述

  • 定时器定时原理 是 硬件定时

1.1

在这里插入图片描述

  • 51 里面 利用 机械周期 nop 为1

在这里插入图片描述

  • 那个称为 延时因子 F103 主频72MHZ 这个因子 这就72
  • 不精准 函数调用 压栈出栈 耗时 STM32 ARM架构 有流水线 (一条指令 需要多个指令 一条指令执行 分成多个步骤?)
  • 死等 比如延时 1s (cpu 1s内 啥也干不了了)

1.2

在这里插入图片描述

  • 时基 这里可以理解为 时钟源
  • TIM CLK 是 计数器 工作的时钟频率
  • 时间到了 产生一个事件??? 或者使能它产生一个中断

1.3

在这里插入图片描述

  • 实时时钟是 RTC

1.4

在这里插入图片描述

  • 预分频系数 这得是整数的
  • 溢出 时间到了 会产生 DMA请求
  • 这里F1 是 只有高级定时器 才有互补输出(H7的不是)

1.5

在这里插入图片描述

  • 这时基(用途) 说的是 定时功能
  • 这说输入输出 难道是1.4 捕获就是输入 互补就是比较?

2

在这里插入图片描述

2.1

在这里插入图片描述

  • 分频 1的时候 对应 2分频 0-> 1
  • 基本定时器溢出时 可触发DAC 产生一次 数模转换

2.2 基本定时器 框图

在这里插入图片描述

  • 时钟源来自 RCC? ????(RCC不是 复位和时钟控制吗)

  • 基本定时器 时钟源 只能来自 内部时钟

  • CNT计数器上有个 + 表示递增
    在这里插入图片描述

  • 溢出条件没看懂???

  • 影子 图上后面 有阴影 称为该寄存器 的影子寄存器

  • 写到ARR不起作用 要转移到 ARR影子寄存器才起作用

  • 影子寄存器 上面的寄存器 起到 缓冲作用
    在这里插入图片描述

  • 这U 是更新的意思

  • 默认下 计数器溢出 事件会产生 可设置不产生 中断和DMA请求 和这个相反
    在这里插入图片描述

  • 更新事件产生的第二种 方法

在这里插入图片描述

  • 更新事件的 作用 以及ARPE 位 决定ARR 是否具有缓冲

在这里插入图片描述

  • 控制计数器 复位 使能 计数
  • TRGO 触发输出 信号 (计数器 溢出时 会产生这个信号)

这再介绍一下 定时器 时钟源

在这里插入图片描述

  • 这并不是 挂载在哪个总线上 频率就是那个(倍频器)
    在这里插入图片描述
  • 这是 时钟树 在 参考手册里

在这里插入图片描述

  • 看了一下实例里 分频系数是多少

  • 所以 定时器 1~8 都是72M的

2.3

在这里插入图片描述

  • 递增又叫 向上
    在这里插入图片描述
  • PSC是1 这是 二分频 (前面说过+1)
  • 更新中断 标志位 硬件 置1 如果配置了 会产生中断(中断服务函数里 会把标志位清0)

在这里插入图片描述
在这里插入图片描述

  • 这个自动重载 感觉有点不一样

2.4

2.4.1

在这里插入图片描述

  • 这介绍了 缓冲 可以具有的作用 减小误差(改值情况下 要用?
  • 两种场景 一种 亮1s 灭 2s 另一种 亮1s 灭1s
  • 第一种必须用缓冲 不用的话 你改ARR 的值会有误差
  • 第二种 不用改ARR的值

在这里插入图片描述

  • 这个寄存器的作用

2.4.2

在这里插入图片描述

  • 这个前面 框图说过 这两默认都不开
  • 这用不到 DMA请求

2.4.3

在这里插入图片描述

2.4.4

在这里插入图片描述

  • rw 可读可写 计数器运行时 也可写数据

2.4.5

在这里插入图片描述

  • 这体现 +1了
  • 感觉这个预分频 应该和时钟那讲的无关 (随意设的)

2.4.6

在这里插入图片描述

2.5 定时器 溢出时间计算方法

在这里插入图片描述

  • 这有两 定时器时钟频率 计数器的时钟频率才是真的
  • 不懂ARR为啥是+1不是+2
  • 他解释加1 好像是 如果ARR=0不能直接溢出吧 所以要前面有一个周期 (前面模式 那实列那 开始cnt变化时 前面确实有一个)
    在这里插入图片描述
  • 懂了 0到1 是1次

2.6 定时器 中断 实验配置步骤

在这里插入图片描述

  • 这给了一种方法 像这种给好了的HAL库函数 还是配置的 肯定看形参 的结构体成员 有啥
    在这里插入图片描述
  • 感觉和串口 步骤差不多 都是 MSP 回调 和 中断回调
  • 为啥这有两使能中断(应该是总分)
    在这里插入图片描述
  • HAL中断处理 公用函数 通过SR来判断 发生哪个中断

下面通过实例 来理解这几个函数

在这里插入图片描述

  • 这是HAL库 外设初始化函数 参数的句柄 就前两用到了 后面的不用

在这里插入图片描述
在这里插入图片描述

  • 这存放着 外设寄存器基地址的宏 (存放着寄存器 信息)

在这里插入图片描述

  • 预分频系数 就是操作PSC寄存器
  • 用不到 第二个 计数模式 只有 递增 时钟分频因子(通用 高级 有) 第5个(高级有)

在这里插入图片描述

  • 最后那个成员 相当于 CR1 里的位7
    在这里插入图片描述

在这里插入图片描述

  • 程序里 就是1左移 7个位

  • 下面那结构体 只用了 三个成员

配置步骤三的函数

在这里插入图片描述

  • 使能定时器 中断 具体哪个看参数 (这是更新中断)

在这里插入图片描述

  • 基本定时器 只用到 这个更新中断

在这里插入图片描述

  • 第二个功能是 使能计数器 CR1寄存器 位0

在这里插入图片描述

  • 实例中也是 操作位0 1左移0位

2.7

在这里插入图片描述

  • 产生更新中断 有两种方式 定时器 溢出 和 软件 置ug位 产生软件更新事件 从而产生 更新中断
    在这里插入图片描述
  • 一般带 PSC的值 算ARR

在这里插入图片描述

  • 这PSC为了 和72 能约
  • 单位 是 s HZ

以跑马灯实验为工程模板

在这里插入图片描述

  • 新建文件 添加btim.c 分组

在这里插入图片描述

  • 要HAL库函数 添加对应文件进文组(这应该也体现 extern作用 不用添加头文件)

2.7.1

在这里插入图片描述

在这里插入图片描述

  • 这找不到这个结构体 (写btim.h 就能找到 HAL库的了 我是看到+号下面 就一个btim.h 没其他的知道的) 正点的sys.h 有东西 这种类型的东西 都不用extern一下吗 直接就用了 明明没在一个文件里
  • 第二 这参数用的是指针 传过去 变量的地址
  • 这handle 是句柄
    在这里插入图片描述
  • init结构体 里 最后一个 因为 这 arr的值不用变 所以不管
  • 完成这个函数 所需的结构体了

2.7.2 和4

在这里插入图片描述
在这里插入图片描述

  • 找时钟使能 就去这 或者ex
  • 搜索 TIM 找到对应函数 再2改成 6 全局
    在这里插入图片描述
  • 再设置NVIC 参数 中断号 找就行

2.7.3

在这里插入图片描述

在这里插入图片描述

2.7.5

在这里插入图片描述

  • 去 启动文件里面 找 中断服务函数的名

在这里插入图片描述

2.7.6

在这里插入图片描述
在这里插入图片描述

  • 加led.c 头文件

  • 声明 那个自己创的函数

main.c

在这里插入图片描述

  • 这delay 500 没影响 是中断

在这里插入图片描述

  • 正点的 PB5 某些引脚 引出来了
    在这里插入图片描述
  • 频率1HZ 就是两个0.5s 占空比 50%

3

在这里插入图片描述

  • 3.3 里还会有个 通用定时器 中断实验

3.1

在这里插入图片描述

  • 多了 ADC
  • 不仅更新事件 会产生中断 /DMA请求
  • 可以级连

在这里插入图片描述

  • 数据手册可以看对应芯片 有几个定时器 (看来是芯片自带的 不是原子加的

3.2

在这里插入图片描述
在这里插入图片描述

  • 定时器 核心 计数器或者时基单元

在这里插入图片描述

  • 包含基本定时器 所有功能
  • TRGO 触发输出信号

3.2.1 时钟源

在这里插入图片描述

  • 四类 时钟源来源
  • 内部触发输入时钟
  • IO口复用 为定时器ETR引脚 外部时钟模式二
  • 外部时钟模式1 来自通道一和通道二

教一下去哪找 ETR 和通道1 2

  • 数据手册 直接搜 CH ETR
  • 或者原理图 搜

3.2.2

在这里插入图片描述

  • 触发输出信号 多出来 到 其他定时器 和ADC
  • 级联:定时器触发输出信号 接到下一个定时器 触发输入信号

3.2.4

  • XOR 异或门 霍尔传感器电路(电机) 用的 一般用不到 可忽略

在这里插入图片描述

  • 因为输入捕获 所以外部来 IO复用为通道

在这里插入图片描述

  • 会有毛刺部分 高频 滤波去掉
    在这里插入图片描述

  • 这两信号看你 的配置 可配置TI1 到IC1 和IC2(一般 这用通道1 就映射到 输入捕获通道1)

  • 可以把右边 理解为 输入捕获通道1 和 2 (ic input capture

  • 预分频器 这里 沿 会产生捕获事件 把CNT的值 转移到 捕获/比较1 寄存器

  • 可用于测量 脉冲时间

在这里插入图片描述

  • CC1是捕获中断 可开启

3.2.6

在这里插入图片描述

  • 程序员 往比较寄存器 写入比较值
  • 这有影子寄存器 更新事件发生 才会写下去 可以硬件 也可以软件更新
  • 当cnt== 影子寄存器的值 会改变输出参考信号
  • OC1REF 输出参考信号 默认高电平有效?
  • 比较事件 / 可开启比较中断
  • 输出控制有8种输出模式 如:pwm输出模式
  • 输出信号 受到 模式 输出参考信号 和下面那个影响 下面那个信号会把输出参考信号强制清0

在这里插入图片描述

  • 左右的通道是 分时复用

3.3

在这里插入图片描述

  • TI1F_ED 双边沿检测 两都计数

计数器时钟源 寄存器设置方法

在这里插入图片描述
1.
在这里插入图片描述

  • ECE 也= 0
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 就是从这

在这里插入图片描述

  • 这就能看出来 SMS 就是把TRGI 连到后面
    在这里插入图片描述
  • ECE=1 就是上面那个 相同功效时钟源都来自 ETR引脚
    在这里插入图片描述
  • TS 位 应该是 连起来 这两

详细介绍 外部时钟模式1

在这里插入图片描述

  • 知道哪个位 在那一步
    在这里插入图片描述
    在这里插入图片描述
  • 不一定 是稳定高电平 掺杂毛刺信号

在这里插入图片描述
在这里插入图片描述

  • 看清谁和谁之间的 分频
  • CK_INT 是定时器 时钟源频率
  • 这取倒数 时间和频率的关系
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • TRGI那 看的是上升沿 (CC2P那只起反向作用?)

详细介绍 外部时钟模式2

在这里插入图片描述

  • ECE 置 1 或另一种方法
  • 这边缘检测器 怎么都是反向的
  • 这图写对应哪个寄存器了

在这里插入图片描述
在这里插入图片描述

讲一下级联

在这里插入图片描述

  • SMS TS能看懂
  • 主模式有点纳闷 前面都是从模式(选择啥的)
    在这里插入图片描述
    在这里插入图片描述
  • 没有基本定时器

解读 通用定时器 中断实验

在这里插入图片描述
在这里插入图片描述

  • 中断服务函数 和基本的那个实验不同 没用HAL库公共中断处理 而是自己写的 判断标志位(是不是用了 就不用自己写判断标志位了)- ???
  • 再清除标志位

在这里插入图片描述

3.4

感觉这个输出就是 一部分CCRx 下一部分比较后的信号输出
pwm就是 高低电平 矩形

在这里插入图片描述

3.4.1

在这里插入图片描述

主电路的

在这里插入图片描述

  • 比较结果 会到 输出控制里

在这里插入图片描述

  • 正在写CCR1的时候 值不会被转移下去

在这里插入图片描述

输出部分的

在这里插入图片描述

  • 输出参考信号 由左边三个信号控制
  • OC1后面就是通道1了

看一下 寄存器的具体配置

在这里插入图片描述
在这里插入图片描述

  • 8种输出模式

在这里插入图片描述

在这里插入图片描述

  • ETRF 来自这

在这里插入图片描述
在这里插入图片描述

3.4.2

在这里插入图片描述

  • x 的值 1~4
  • IO那其实是上面OCx
  • 周期 ARR控制(计数器频率不变的话 (时钟频率 分频系数)) 占空比CCRx控制

3.4.3

在这里插入图片描述

  • CCMR1寄存器是管 通道1 和 2的
  • 向上计数 递增模式
  • REF那个是参考电平

在这里插入图片描述

  • 这个逻辑电平 应该是 最后通道的 (他说的不是)

3.4.4

在这里插入图片描述

  • HAL库外设初始化 初始化结构体
  • 宏难道是__开头的?

在这里插入图片描述

  • 基础定时器 那函数对应的BASE

实例里看一下这些函数

在这里插入图片描述

  • 弹幕说到时钟在哪配置了?

  • config 那个函数

  • 这个代码里 init里为啥没NVIC(没中断)
    在这里插入图片描述

  • config函数里面形参有 这个定时器输出比较初始化结构体

  • 第4个 高级定时器 18 才有

  • 第5个 用的少

  • 后面是互补输出 也是高级的

  • PWM实验 就看前三个

start函数 输出使能 和 计数器使能

在这里插入图片描述

这个挺重要
在这里插入图片描述

在这里插入图片描述

COMARE 函数
在这里插入图片描述

  • 就是往CCRx 里面写值

  • 在main函数里

  • 操作 捕获/比较寄存器
    在这里插入图片描述

使能通道预装载

  • 这个是可选的 实例中没用到( 是0的意思吗

在这里插入图片描述
在这里插入图片描述

3.4.5

先看一下IO口

在这里插入图片描述

  • 原理图上有LED 但是没写出来定时器(可能因为 重映射??)
    在这里插入图片描述
  • 用一下 重映射功能

实战 以跑马灯为例

  • BSP下新建TIMER文件夹 新建文件 gtim.c
  • 写一下基本的
    在这里插入图片描述
  • 这个好像只在这出现过
3.4.5.1

在这里插入图片描述

在这里插入图片描述

  • 这是g 开头 基本那个是b开头

  • ch好像是通道 y是几

  • TIM3 是因为 LED0 能重映射为 TIM3的

  • 模式那个搜一下 ref(一般就在一个文件里 和出现ref的)

  • 找不到那个函数 记得添加分组 以跑马灯为模板的话
    在这里插入图片描述

  • 这跳转不了 但编译不报错

在这里插入图片描述
在这里插入图片描述

  • 加上前面每次添加了文件后 直接在左边这里添加分组都没有 (所以 复制其他的 这里指向的是之前的)
3.4.5.2

在这里插入图片描述

  • 这直接把led.c 里的部分代码拿过来了
  • 改了名字 推挽复用(是指的复用吗 包括重映射功能 之前好像用过单纯复用的???) 加时钟开启
  • 好像知道为啥定时器不用配置时钟了 时钟树 里面不都整好了
  • 打开重映射的时钟
    在这里插入图片描述
    在这里插入图片描述
  • HAL库这么整上面的寄存器
    在这里插入图片描述
3.4.5.3

在这里插入图片描述
在这里插入图片描述

  • 通道这个打几个就会出提示
3.4.5.4

在这里插入图片描述
在这里插入图片描述

  • 再写一下main 和 声明

在这里插入图片描述
在这里插入图片描述

  • 2 KHZ 50%占空比
  • 应该灯看不出来是 时间太快了 视觉残留

实现呼吸灯效果 🐂

在这里插入图片描述

  • 波形的占空比 一直在变
  • dir是方向
  • 没了for 用while 这种变数的 感觉
    在这里插入图片描述
    在这里插入图片描述
  • 比较值变化过程
  • 每10ms 往CCR2里写入

在这里插入图片描述

  • ARR是500 当CCR2为0时 都是 1 当CCR2为300时 >300 时为 1 占空比40%
  • 占空比 40~100

通用定时器 先到这

4

在这里插入图片描述

4.1

在这里插入图片描述

  • 断路输入 刹车信号输入
  • 下面是比 前面通用多的

4.2

在这里插入图片描述

  • 时钟源部分 和通用定时器一样
  • 这是不一样的部分 刹车输入引脚 互补输出通道

在这里插入图片描述

  • 通用时 溢出就产生 U(更新事件) 和UI(更新中断)
  • 寄存器设置 值 溢出一次 值-1 直到0 才产生U 和 (UI)
  • 通道4 没有互补通道
  • DTG寄存器 设置死区时间
  • BI(刹车中断?)来到输出控制

4.3

在这里插入图片描述

4.3.1

在这里插入图片描述

  • 边沿对齐模式(向上 向下)

在这里插入图片描述

  • 中心对齐的 CNT = ARR - 1 CNT = 1
  • 再同步就是 再往影子寄存器里发一次 重置值 RCR寄存器 这里有效位是框图里的REP 上面起缓冲作用(影子寄存器)

4.3.2

在这里插入图片描述

  • 指定个数 就是用重复计数器

在这里插入图片描述

  • 输出的开关

4.3.3

在这里插入图片描述

  • 6 的主输出 高级定时器才有

在这里插入图片描述
在这里插入图片描述

  • 定时器输出比较 初始化结构体 用前三个

4.3.4

在这里插入图片描述

  • 看一下TIM8_CH1在哪
    在这里插入图片描述
  • 看LED1在哪
    在这里插入图片描述
  • 杜邦线 连起来 排针引出来了
    在这里插入图片描述
    在这里插入图片描述
  • 溢出时间 是 0.5s
  • 这解释了 为啥这个倒数就是 PWM的周期 (溢出一次 正好对应一次PWM)

实战(以跑马灯为例)

  • 新建 TIMER (atim.c)

在这里插入图片描述

  • PWM
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 使能输出
  • 使能主输出 MOE位
  • 使能计数器 CR1寄存器 位0

下面开始指定个数

在这里插入图片描述

在这里插入图片描述

  • 所以uint8
  • 最大255 RCR 溢出266次 产生U 以及 UI

在这里插入图片描述

  • 这软件更新 为了把 RCR的值 写影子寄存器里

  • 这更新应该是为了 进入中断

  • 启动计数器 因为中断后里 我们设置关闭计数器

  • 软件更新 第二个参数是 事件源
    在这里插入图片描述

中断服务函数

在这里插入图片描述

  • 说明为啥-1
    在这里插入图片描述

  • 这里的更新 应该只改变RCR的值 而不会再进中断(类似同优先级中断 不打断?)

  • 下一句 打开计数器可以 注释一下试试

  • ~这个是取反(也不知道这怎么靠上了 视频里也是中间的)

在这里插入图片描述

为啥不用disable 关闭 计数器

在这里插入图片描述

  • 因为它要先判断 通道和互补通道关了没 才会关计数器

在这里插入图片描述

  • 这个1左移0位 是找到该位 下面它的介绍 0的时候关闭
    在这里插入图片描述

  • 这里不管 通道 所以用寄存器 方法操作

main 函数

  • 包含头文件
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 然后再把key文件加进来

在这里插入图片描述

  • 忘记 在atim.h 声明了

  • 改一下 PE5
    在这里插入图片描述

  • led_init 里配置的也是输出 这两都输出 会冲突

在这里插入图片描述

  • 这再 开 时钟 感觉没必要

  • 自己试一下 他用示波器看了


summary : 中断就是为了 指定个数
RCR是必要的 这种方法里
两次 软件更新意义要知道(验证一下 把第二次后面 启动计数器关了)

- 输出比较先不看 (少看了)(里面是翻转模式 不是pwm1 2)

4.4

在这里插入图片描述

4.5

在这里插入图片描述

4.5.1

在这里插入图片描述

  • x=1~3
  • 死区时间 oc 和 ocN 都是无效电平(这图里 是 低电平 有效???
  • 左右两个死区时间 相等

4.5.2

在这里插入图片描述

  • 同侧 不能同时导通 短路 OC 和OCN 不能同时 有效电平(这里可能是低 (控制))

  • 在这里插入图片描述

  • 不是因为mos管 反转 需要时间? 延迟??(切换时?来的电平 有延迟 所以等?)(应该就是说的mos管 )
    在这里插入图片描述

  • 如果不加 死区控制 可能有一瞬间 短路

4.5.3

在这里插入图片描述

  • 输出比较模式 包括 PWM1
  • 电机可以复用为ETR引脚(来自IO的复用)

在这里插入图片描述

  • CC1P 是极性选择

在这里插入图片描述

  • MOE 是 主输出模式??(输出通道 互补 总开关)

4.5.4

在这里插入图片描述

  • Ft 是定时器时钟源 F1 72M
  • 左边是 右边的式子

在这里插入图片描述

  • BDTR刹车死区寄存器
  • 1s= 10^-3 ns

4.5.5

在这里插入图片描述
在这里插入图片描述

  • 输出由这些位控制

  • 硬件会强制使 不同时高电平
    在这里插入图片描述

  • MOE 主输出模式 0(空闲模式) 1(运行模式)

  • OSSI 空闲模式下 关闭状态用的???

  • 第二个 看上面表75

  • BIF 刹车中断标志位

看上面的表75
在这里插入图片描述

  • 运行模式时 OSSI没用
  • OSSR 是运行模式关闭状态 空闲模式下为X

在这里插入图片描述

  • 和4.5.3 这里正好对上了

  • CCxE 是输出使能位

  • 在这里插入图片描述

  • 会把输出使能位 置1

  • 输出参考信号 那个受 CNT 和 CCR影响 (以及ETR引脚)

在这里插入图片描述

  • 与定时器断开 是指输出参考信号咋变 和输出无关
  • OCx=CCxp 输出信号等于极性
  • 使能 输出使能 位 置0(上面出现)(关闭输出)
    在这里插入图片描述
  • MOE=0 刹车

在这里插入图片描述

  • 感觉就是这个 使能 输出使能 这个位 变了

4.5.6

在这里插入图片描述

在这里插入图片描述

  • PWM这个和BASE那个一样 都是 初始化定时器基础参数

  • BDTR是 刹车和死区 寄存器
    在这里插入图片描述

  • 该结构体被前面第三个 函数用

  • 后面两 是 刹车后的 (互补)输出通道 状态设置

介绍一下上面结构体 对应的 寄存器
在这里插入图片描述

  • CCxp CCxNP 极性选择

在这里插入图片描述

  • 刹车后 状态选择

在这里插入图片描述

  • 该结构体 第四个函数用

对应寄存器

  • 参考手册 BDTR
  • 锁定 这个一般用不到

4.5.7

在这里插入图片描述

  • DTG 8位
  • 输出空闲状态 是 指 刹车后的
  • 比以前 多了底下两个

在这里插入图片描述

  • 死区时间5.56us(微秒)

在这里插入图片描述
在这里插入图片描述

  • 此处是 高电平导通 设置高为 有效电平

开始咯

在这里插入图片描述

  • 以跑马灯为模板
  • BSP 下新建TIMER atim.c atim.h
  • 添加 TIMER分组 和 HAL库 tim的驱动

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 对应HAL 库 里 这个

在这里插入图片描述

在这里插入图片描述

  • NVIC 这没用
  • GPIO 所以先看一下 用哪些IO 口
    在这里插入图片描述
    在这里插入图片描述
  • 这是重映射方式 使用
    在这里插入图片描述
  • 也是 重映射

在这里插入图片描述

  • 重映射 的寄存器

在这里插入图片描述

  • 3 左移 六位 对应上

在这里插入图片描述

  • __ 开头 应该就是宏

在这里插入图片描述
在这里插入图片描述

  • 设置有效电平 前面H桥 那得是 高电平(就算设置成低 逻辑反一下 应该也行 )
  • 空闲 状态这都给0 肯定不转

在这里插入图片描述
在这里插入图片描述

  • 用到的结构体

在这里插入图片描述

在这里插入图片描述

  • 死区时间一会在这设置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • main函数

在这里插入图片描述

  • 700是 因为要70% (应该也可能 300?)

在这里插入图片描述

  • 死区时间

在这里插入图片描述

  • 也 可以用数字看
  • /2 死区时间 和之前算的 差不多 5.5 5.6

在这里插入图片描述

  • 接入刹车信号后(PA15 接右边3.3V)

在这里插入图片描述

  • 全设置成有效 就成无效电平了
  • 一高一低可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习实验------Adaboost算法

第1关:什么是集成学习 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 第2关: Boosting 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 第3关:Adaboost算法流程 任务描述 本关任务:用Python实现Adaboost,并通过鸢尾花数据集…

捕食者优化算法,原理详解,MATLAB代码免费获取

捕食者优化算法(Hunter–prey optimization,HPO)是一种受自然启发的群智能优化算法。该算法的灵感来自于捕食动物(如狮子、豹和狼)以及猎物(如雄鹿和瞪羚)的行为。动物狩猎行为有很多场景,其中一些场景已经转化为优化算法。本文使…

如何选择一款安全高效的数据自动同步工具?

随着科技的不断发展,企业处理的数据量愈发庞大。数字化浪潮的涌现使得数据在业务活动和决策中的角色变得日益重要,然而这些数据往往分布在不同的位置,需要进行同步和分类,以便更有效地利用。以下是一些常见的数据自动同步场景&…

UE5 像素流web 交互2

进来点个关注不迷路谢谢! ue 像素流交互多参数匹配 主要运用像素流的解析json 状态: 测试结果: 浏览器控制台: 接下来编写事件传递 关注下吧!

模板编译之入口分析

Vue 是一个渐进式 JavaScript 框架,提供了简单易用的模板语法,帮助开发者以声明式的方式构建用户界面。Vue 的模板编译原理是其核心之一,它将模板字符串编译成渲染函数,并在运行时高效地更新 DOM。本文将深入探讨 Vue 模板编译的原…

【机器学习300问】96、怎么理解卷积神经网络CNN中的卷积操作?

卷积操作是卷积神经网络(CNN)中的一种核心组件。要讲清楚卷积操作,我们只需要回答以下四个问题:什么是卷积核?卷积运算的规则是什么?padding是什么?stride是什么? 下面让我以图像处理…

27寸2K显示器 - HKC G27H2

HKC G27H2是一款面向电竞市场的高性能显示器,以其2K分辨率和180Hz的刷新率作为主要卖点,旨在为玩家提供流畅而清晰的视觉体验。配备HDR 400技术和95% DCI-P3色域覆盖,这款显示器还支持升降旋转支架,为用户提供了高度的人体工程学适…

阿尔杰姆·卢金采访

近年来,在中俄两国元首亲自擘画、战略引领下,两国新时代全面战略协作伙伴关系成熟坚韧、稳如泰山,树立了新型大国关系的新范式。中俄关系走出了一条大国战略互信、邻里友好的相处之道,给两国人民带来了实实在在的好处,…

Python爬虫:爬取B站视频(最新、能用且讲解详细)【01】

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️如遇文章付费,可先看…

Android Notes

maven 版本发布 1、小于 AGP7 使用 maven 插件 apply plugin: maven uploadArchives {repositories {mavenDeployer {pom.groupId GROUP_IDpom.artifactId ARTIFACT_IDpom.version VERSION//正式版本repository(url: RELEASE_URL) {authentication(userName: userName, p…

世界上首位AI程序员诞生,AI将成为人类的对手吗?

3月13日,世界上第一位AI程序员Devin诞生,不仅能自主学习新技术,自己改Bug,甚至还能训练和微调自己的AI模型,表现已然远超GPT-4等“顶流选手”。 AI的学习速度如此之快,人类的教育能否跟上“机器学习”的速…

SQLServer表变量

表变量是本地变量的一种特殊类型,它有助于临时存储数据; 要声明表变量,使用declare,而局部变量的名称必须以符号开头; TABLE关键字指定此变量是表变量,然后还要定义列名和数据类型; 下面定义一个表变量&#xff0c…

嵌入式全栈开发学习笔记---C语言笔试复习大全21(编程题25~30)

目录 25、实现字符串的排序。(输入hello world good,输出good hello world,其中字符串个数任意) 26、输入两个有序的字符串(从小到大),合并成一个有序的字符串。(输入cdhxyz fjln …

1076: 判断给定有向图是否存在回路

解法&#xff1a; 直观的方法用邻接矩阵dfs,这是错误的代码 #include<iostream> #include<vector> using namespace std; int arr[100][100]; int f 0; void dfs(vector<int>& a, int u) {a[u] 1;for (int i 0; i < a.size(); i) {if (arr[u][i]…

2024 一键批量下载微博内容/图片/视频/评论/转发数据,导出excel和pdf

以李健的微博为例&#xff0c;抓取2010-2024年所有的微博数据excel&#xff0c;包含微博链接&#xff0c;微博内容&#xff0c;发布时间&#xff0c;点赞数&#xff0c;转发数&#xff0c;评论数&#xff0c;话题等。 每个月的微博转评赞总数曲线&#xff0c;2015年是高峰。 微…

Centos7静态路由和动态路由

路由&#xff0c;即路由选择&#xff08;Routing&#xff09;&#xff0c;是指在计算机网络中选择数据传输路径的过程。路由器&#xff08;Router&#xff09;是执行路由选择功能的网络设备。路由的主要目的是在复杂的网络结构中&#xff0c;选择最佳路径将数据包从源节点传递到…

自回归模型(二):具有自回归误差的回归

让我们考虑一个问题&#xff0c;其中我们有一个y变量和多个x变量&#xff0c;它们都被测量为时间序列。举个例子&#xff0c;我们可以将y设定为高速公路上每月的事故数量&#xff0c;而x则表示每月在高速公路上的交通量&#xff0c;观测时间为连续的120个月。一个多元&#xff…

使用 MPI 做 3D 带状矩阵的转置

目的&#xff1a;整个大矩阵从 [Nx, Ny, Nz] 转到 [Nz, Nx, Ny] 每个进程的输入&#xff1a;大矩阵的 [Nx / total_proc_num, Ny, Nz] 的部分 每个进程的输出&#xff1a;大矩阵的 [Nz / total_proc_num, Nx, Ny] 的部分 一开始我大概有一个想法&#xff0c;假设两个进程的话…

HTTP 请求的完整过程

HTTP 请求的完整过程 当用户在浏览器输入网址回车之后&#xff0c;网络协议都做了哪些工作呢? 首先工作的是 浏览器应用程序&#xff0c;他要解析出 URL中的域名 根据域名获取对应的ip地址&#xff0c;首先从浏览器缓存中査看&#xff0c;如下可以査看浏览器中域名对应ip的解…

想当安卓开发工程师?学习路线分享!

安卓开发学习路线 在前几篇文章中,对安卓开发岗位的岗位要求做了一些科普,本节文章将介绍安卓开发岗位的学习路线。 目前,网络上有很多面经、算法题解、算法课等学习资料,如何合理利用这些资料成为技术求职者的一大困惑。笔者整理了一份安卓开发岗位学习路线供大家参考,…