资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
ALIENTEK 例说STM32 例说STM32 2020 6 5 广州市星翼电子科技有限公司 1 ALIENTEK开发板购买店铺店铺 ALIENTEK 第9讲定时器中断实验 9 1通用定时器简介9 2寄存器描述9 3通用定时器配置步骤9 4实验讲解 例说STM32 2 2020 6 5 广州市星翼电子科技有限公司 ALIENTEK 9 1通用定时器简介 例说STM32 3 2020 6 5 广州市星翼电子科技有限公司 STM32的定时器功能十分强大 有TIME1和TIME8等高级定时器 也有TIME2 TIME5等通用定时器 还有TIME6和TIME7等基本定时器 STM32的通用定时器是一个通过可编程预分频器 PSC 驱动的16位自动装载计数器 CNT 构成 STM32的通用定时器可以被用于 测量输入信号的脉冲长度 输入捕获 或者产生输出波形 输出比较和PWM 等 使用定时器预分频器和RCC时钟控制器预分频器 脉冲长度和波形周期可以在几个微秒到几个毫秒间调整 STM32的每个通用定时器都是完全独立的 没有互相共享的任何资源 ALIENTEK 例说STM32 4 2020 6 5 广州市星翼电子科技有限公司 STM3的通用TIMx x 2 3 4 5 定时器功能包括 1 16位向上 向下 向上 向下自动装载计数器 TIMx CNT 2 16位可编程 可以实时修改 预分频器 TIMx PSC 计数器时钟频率的分频系数为1 65535之间的任意数值 3 4个独立通道 TIMx CH1 4 这些通道可以用来作为 A 输入捕获B 输出比较C PWM生成 边缘或中间对齐模式 D 单脉冲模式输出 ALIENTEK 例说STM32 5 2020 6 5 广州市星翼电子科技有限公司 4 可使用外部信号 TIMx ETR 控制定时器和定时器互连 可以用1个定时器控制另外一个定时器 的同步电路 5 如下事件发生时产生中断 DMA A 更新 计数器向上溢出 向下溢出 计数器初始化 通过软件或者内部 外部触发 B 触发事件 计数器启动 停止 初始化或者由内部 外部触发计数 C 输入捕获D 输出比较E 支持针对定位的增量 正交 编码器和霍尔传感器电路F 触发输入作为外部时钟或者按周期的电流管理 ALIENTEK 9 2通用定时器寄存器描述 例说STM32 6 2020 6 5 广州市星翼电子科技有限公司 控制寄存器1 TIMx CR1 ALIENTEK 例说STM32 7 2020 6 5 广州市星翼电子科技有限公司 ALIENTEK 例说STM32 8 2020 6 5 广州市星翼电子科技有限公司 ALIENTEK 例说STM32 9 2020 6 5 广州市星翼电子科技有限公司 DMA 中断使能寄存器 TIMx DIER 该寄存器是一个16位的寄存器 这里我们仅关心它的第6位和第0位 第6位TIE为触发中断使能位 通过将该位置1使能TIMx的中断触发 注意只要是TIMx需要使用中断 该位必须为1 而第0位 则为允许更新中断位 通过置1 来允许由于更新事件所产生的中断 ALIENTEK 例说STM32 10 2020 6 5 广州市星翼电子科技有限公司 预分频寄存器 TIMx PSC 该寄存器用设置对时钟进行分频 然后提供给计数器 作为计数器的时钟 ALIENTEK 例说STM32 11 2020 6 5 广州市星翼电子科技有限公司 这里 我们的时钟来源有4个 1 内部时钟 CK INT 2 外部时钟模式1 外部输入脚 TIx 3 外部时钟模式2 外部触发输入 ETR 4 内部触发输入 ITRx 使用A定时器作为B定时器的预分频器 A为B提供时钟 这些时钟 具体选择哪个可以通过TIMx SMCR寄存器的相关位来设置 这里的CK INT时钟是从APB1倍频的来的 除非APB1的时钟分频数设置为1 否则通用定时器TIMx的时钟是APB1时钟的2倍 当APB1的时钟不分频的时候 通用定时器TIMx的时钟就等于APB1的时钟 这里还要注意的就是高级定时器的时钟不是来自APB1 而是来自APB2的 这里顺带介绍一下TIMx CNT寄存器 该寄存器是定时器的计数器 该寄存器存储了当前定时器的计数值 ALIENTEK 例说STM32 12 2020 6 5 广州市星翼电子科技有限公司 自动重装载寄存器 TIMx ARR 该寄存器在物理上实际对应着2个寄存器 一个是程序员可以直接操作的 另外一个是程序员看不到的 这个看不到的寄存器在 STM32参考手册 里面被叫做影子寄存器 事实上真正起作用的是影子寄存器 根据TIMx CR1寄存器中APRE位的设置 APRE 0时 预装载寄存器的内容可以随时传送到影子寄存器 此时2者是连通的 而APRE 1时 在每一次更新事件 UEV 时 才把预装在寄存器的内容传送到影子寄存器 ALIENTEK 例说STM32 13 2020 6 5 广州市星翼电子科技有限公司 这里 我们的时钟来源有4个 1 内部时钟 CK INT 2 外部时钟模式1 外部输入脚 TIx 3 外部时钟模式2 外部触发输入 ETR 4 内部触发输入 ITRx 使用A定时器作为B定时器的预分频器 A为B提供时钟 这些时钟 具体选择哪个可以通过TIMx SMCR寄存器的相关位来设置 这里的CK INT时钟是从APB1倍频的来的 除非APB1的时钟分频数设置为1 否则通用定时器TIMx的时钟是APB1时钟的2倍 当APB1的时钟不分频的时候 通用定时器TIMx的时钟就等于APB1的时钟 这里还要注意的就是高级定时器的时钟不是来自APB1 而是来自APB2的 这里顺带介绍一下TIMx CNT寄存器 该寄存器是定时器的计数器 该寄存器存储了当前定时器的计数值 ALIENTEK 例说STM32 14 2020 6 5 广州市星翼电子科技有限公司 状态寄存器 TIMx SR 该寄存器用来标记当前与定时器相关的各种事件 中断是否发生 具体每位的含义 请参考中文参考手册 ALIENTEK 9 3通用定时器配置步骤 例说STM32 15 2020 6 5 广州市星翼电子科技有限公司 1 TIM3时钟使能 这里我们通过APB1ENR的第1位来设置TIM3的时钟 因为Stm32 Clock Init函数里面把APB1的分频设置为2了 所以我们的TIM3时钟就是APB1时钟的2倍 等于系统时钟 72M 2 设置TIM3 ARR和TIM3 PSC的值 通过这两个寄存器 我们来设置自动重装的值 以及分频系数 这两个参数加上时钟频率就决定了定时器的溢出时间 ALIENTEK 例说STM32 16 2020 6 5 广州市星翼电子科技有限公司 3 设置TIM3 DIER允许更新中断 因为我们要使用TIM3的更新中断 所以设置DIER的UIE位 并使能触发中断 4 允许TIM3工作 光配置好定时器还不行 没有开启定时器 照样不能用 我们在配置完后要开启定时器 通过TIM3 CR1的CEN位来设置 ALIENTEK 例说STM32 17 2020 6 5 广州市星翼电子科技有限公司 5 TIM3中断分组设置 在定时器配置完了之后 因为要产生中断 必不可少的要设置NVIC相关寄存器 以使能TIM3中断 6 编写中断服务函数 在最后 还是要编写定时器中断服务函数 通过该函数来处理定时器产生的相关中断 在中断产生后 通过状态寄存器的值来判断此次产生的中断属于什么类型 然后执行相关的操作 我们这里使用的是更新 溢出 中断 所以在状态寄存器SR的最低位 在处理完中断之后应该向TIM3 SR的最低位写0 来清除该中断标志 ALIENTEK 9 4实验讲解 例说STM32 18 2020 6 5 广州市星翼电子科技有限公司 硬件设计 本章将通过TIM3的中断来控制DS1的亮灭 DS1是直接连接到PD2上的 所以电路上不需要任何改动 实验现象 DS0不停闪烁 每400ms闪烁一次 而DS1也是不停的闪烁 但是闪烁时间较DS0慢 1s一次 ALIENTEK 例说STM32 19 2020 6 5 广州市星翼电子科技有限公司 软件设计 timer c ALIENTEK 例说STM32 20 2020 6 5 广州市星翼电子科技有限公司 main函数
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号