STM32学习——高级定时器

发布者:冷漠之心最新更新时间:2022-01-24 来源: eefocus关键字:stm32  高级定时器  脉宽 手机看文章 扫描二维码
随时随地手机看文章

高级定时器简介

在这里插入图片描述

1.输入捕获模式,可用来测频率或脉宽(原理:捕获到信号的跳变沿的时候,把计数器CNT的值锁存到捕获寄存器CCR中,把前后两次捕获到的CCR寄存器中的值相减,就可以算出脉宽或者频率。如果捕获的脉宽的时间长度超过你的捕获定时器的周期,就会发生溢出,需要进行额外的处理)

2.输出比较应用,主要应用为PWM输出


配置PWM输出,代码实现

(1)高级定时器TIM1的工作方式配置以及初始化

1.时基结构体TIM_TimeBaseInitTypeDef,配置预分频PSC,计数方式,定时器周期ARR,时钟分频(与死区时间相关),重复计数器(用不上)

2.输出比较结构体TIM_OCInitTypeDef,配置比较输出模式(PWM1),比较输出使能,比较互补输出使能,脉冲宽度,输出极性(决定PWM先高还是低),互补输出极性……

3.断路和死区结构体TIM_BDTRInitTypeDef,配置断路和死区的相关参数。


static void Advance_Tim_Mode_Config(void)

{

//开启定时器时钟,即内部时钟CK_INT=72M

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

/*===============时基结构体初始化================*/

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

//自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断

TIM_TimeBaseInitStructure.TIM_Period=8-1;

//驱动CNT计数器的时钟 = Fck_int/(psc+1)

TIM_TimeBaseInitStructure.TIM_Prescaler=9-1;

//时钟分频因子 ,配置死区时间时需要用到

TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;

//计数器计数模式,设置为向上计数

TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;

//重复计数器的值,没用到不用管

TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;

//初始化定时器

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);

/*==============输出比较结构体初始化============*/

TIM_OCInitTypeDef TIM_OCInitStructure;

//配置为PWM模式1

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;

//输出使能

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;

//互补输出使能

TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;

//设置占空比大小

TIM_OCInitStructure.TIM_Pulse=4;

//输出通道电平极性配置

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;

//互补输出通道电平极性配置

TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;

// 输出通道空闲电平极性配置

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

// 互补输出通道空闲电平极性配置

TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;

TIM_OC1Init(TIM1,&TIM_OCInitStructure);

/*================刹车和死区结构体初始化=================*/

TIM_BDTRInitTypeDef TIM_BDTRInitSturcture;

TIM_BDTRInitSturcture.TIM_OSSRState=TIM_OSSRState_Enable;

TIM_BDTRInitSturcture.TIM_OSSIState=TIM_OSSIState_Enable;

TIM_BDTRInitSturcture.TIM_LOCKLevel = TIM_LOCKLevel_1;

// 输出比较信号死区时间配置,具体如何计算可参考 BDTR:UTG[7:0]的描述

// 这里配置的死区时间为152ns

TIM_BDTRInitSturcture.TIM_DeadTime = 11;

TIM_BDTRInitSturcture.TIM_Break = TIM_Break_Enable;

// 当BKIN引脚检测到高电平的时候,输出比较信号被禁止,就好像是刹车一样

TIM_BDTRInitSturcture.TIM_BreakPolarity = TIM_BreakPolarity_High;

TIM_BDTRInitSturcture.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;

TIM_BDTRConfig(TIM1, &TIM_BDTRInitSturcture);

//使能计数器

TIM_Cmd(TIM1, ENABLE);

//主输出使能,当使用的是通用定时器时,这句不需要

TIM_CtrlPWMOutputs(TIM1,ENABLE);

}


(2)初始化输出以及断路对应的GPIO


static void Advance_Tim_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

//输出比较通道GPIO初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

//输出比较通道互补通道GPIO初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOB,&GPIO_InitStructure);

//输出比较通道刹车通道GPIO初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_ResetBits(GPIOB,GPIO_Pin_12);

}


(3)主函数中完成以上两步初始化就可以输出PWM

关键字:stm32  高级定时器  脉宽 引用地址:STM32学习——高级定时器

上一篇:STM32学习——MPU6050姿态传感器
下一篇:STM32学习——TIM基本定时器

推荐阅读最新更新时间:2024-11-11 17:30

STM32 printf函数详解
本实验所用的硬件:STM32F103RTB6 实验所用的晶振: 8M 实验所用的ST官方库:3.5版 C语言中的标准库中所用的标准输出函数,默认的输出设备是显示器,要实现串口或LCD的输出,必须重新定义标准库函数里与输出函数相关的函数。 1.下面首先介绍怎么根据官方3.5库里面的标准例程 printf 修改成自己的 printf 工程: 下边是官方提供的例程: //Includes ------------------------------------------------------------------ #include stm32f10x.h #include stm32_eval.h #include s
[单片机]
STM32的GPIO介绍及电路图讲解
STM32的GPIO介绍 STM32引脚说明 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。 STM32的大部分引脚除了当GPIO使用之外,还可以复用位外设功能引脚(比如串口),这部分在【STM32】STM32端口复
[单片机]
<font color='red'>STM32</font>的GPIO介绍及电路图讲解
STM32自学笔记——外部中断
stm32的每个IO口都可以作为外部中断的入口。stm32f103的中断控制器支持19个外部中断/事件请求(question1:外部中断和时间请求的区别?),这19个外部中断中0-15对应外部IO口的输入中断16连接到PVD输出(question2:什么是PVD输出?)17连接到RTC闹钟事件(question3:这有什么意义)18连接到USB唤醒事件(question4:USB唤醒事件是什么?)。由上可以看出stm32供IO的中断线只有16个但是stm32的IO口远远不止16个那么怎么一一对应呢?于是 STM32 就这样设计, GPIO 的管教 GPIOx.0~GPIOx.15(x=A,B,C,D,E, F,G)分别对应中断线
[单片机]
stm32 boot启动经验
STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区 域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执 行程序 不同的下载方式对应STM32启动方式也不同,如下图是STM32三种启动方式: ● 第一种启动方式是最常用的用户FLASH启动,正常工作
[单片机]
<font color='red'>stm32</font> boot启动经验
基于STM32的FreeRTOS开发(1)----FreeRTOS简介
为什么使用freertos FreeRTOS 是一个免费和开源的实时操作系统,它主要用于嵌入式系统。它非常轻量级,可以在很小的硬件资源上运行,因此非常适合在限制硬件资源的嵌入式系统中使用。 FreeRTOS提供了一组简单的任务管理功能,可以让您在嵌入式系统中实现多任务环境,这对于涉及多个独立功能的系统是非常重要的。它还提供了一些高级功能,如事件组、信号量、邮箱等,可用于实现任务之间的同步和通信。 FreeRTOS还提供了许多可移植性,可以在各种不同的硬件平台上运行,并且有大量的文档和示例代码可以帮助您快速上手。 总之,FreeRTOS是一个非常受欢迎的嵌入式实时操作系统,因为它简单易用,资源占用小,功能丰富,可移植性好,对于嵌入式
[单片机]
基于<font color='red'>STM32</font>的FreeRTOS开发(1)----FreeRTOS简介
STM32 USB虚拟串口问题汇总
汇总1:STM32的USB例程修改步骤,来自http://blog.csdn.net/cy757/archive/2010/01/01/5117610.aspx 以下是笔者将ST的Custom_HID例程修改为“自定义USB设备”例程时总结出来的,因为笔者也是刚刚学USB开发不久,某些方面理解错误在所难免,请各位大虾指正。 一、usb_desc.c文件 根据你程序使用的通信方式修改。usb_desc.h文件中定义要根据usb_desc.c文件中的数组的大小;ConfigDescriptor 下添加需要处理的端点;根据需要添加或删除报告描述符(主要用于HID)和CDC接口描述符(主要用于实现USB转串口)等。具体方法可以下载个“
[单片机]
STM32笔记(八)---通信概念
一、串并行概念 1-1 概念 按数据传送的方式,通讯可分为串行通讯与并行通讯。 串行通讯是指设备之间通过少量数据信号线(一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。 并行通讯一般是指使用 8、 16、 32 及 64 根或更多的数据线进行传输的通讯方式。 并行通讯就像多个车道的公路,可以同时传输多个数据位的数据,而串行通讯就像单个车道的公路,同一时刻只能传输一个数据位的数据。 常见串行通信:USART、I2C、SPI 常见并行通信:SDIO(4位)、FSMC(16位) 1-2 串行与并行通信的特性对比 二、 全双工、半双工及单工通讯 USART、SPI均可为半/全全双
[单片机]
<font color='red'>STM32</font>笔记(八)---通信概念
STM32之八定时器中断
STM32的通用定时器是一个通过可编程预分频器(PSC)驱动的16 位自动装载计数器(CNT)构成。STM32的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。 使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32的每个通用定时器都是完全独立的,没有互相共享的任何资源。 STM3的通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括: 1)16位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。 2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65535之间
[单片机]
<font color='red'>STM32</font>之八<font color='red'>定时器</font>中断
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved