首页 > 其他分享 >STM32标准库通用定时器输出比较

STM32标准库通用定时器输出比较

时间:2024-03-11 21:47:55浏览次数:25  
标签:TIM2 输出 定时器 STM32 TIM GPIO PWM OCMode

STM32标准库通用定时器输出比较

1. 初始化

void TIM2_Init()
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);                 //使能TIM2时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);                //使能GPIOA时钟
	
	GPIO_InitTypeDef GPIO_InitStructure;                                //定义一个GPIO_InitTypeDef类型的结构体
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;                  //定义一个TIM_TimeBaseInitTypeDef类型的结构体
	TIM_OCInitTypeDef TIM_OCInitStructure;                              //定义一个TIM_OCInitTypeDef类型的结构体
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                           //选择要控制的GPIO引脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                     //设置GPIO的模式为复用推挽
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                   //设置GPIO的输出速度为50MHz
	GPIO_Init(GPIOA,&GPIO_InitStructure);                               //初始化GPIOA
	
	TIM_TimeBaseInitStructure.TIM_Period = 1000-1;                      //设置在向上计数模式下计数器自动重装的值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 7200-1;                   //设置预分频的值
	TIM_TimeBaseInitStructure.TIM_ClockDivision  = TIM_CKD_DIV1;		//设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;		//设置计数器模式:向上计数
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);					//初始化TIM2
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Active;					//设置TIM2的通道3为PWM模式1
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;		//使能TIM2的通道3输出
	TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;			//设置TIM2的通道3空闲状态为高电平
	TIM_OC3Init(TIM2,&TIM_OCInitStructure);								//初始化TIM2的通道3
	
	TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);					//使能TIM2的通道3的预装载寄存器
	
	TIM_CtrlPWMOutputs(TIM2,ENABLE);									//使能TIM2的通道3的输出
	
	TIM_Cmd(TIM2,ENABLE);												//启动TIM2
}

输出比较模式与PWM模式大致相同,区别只有TIM_OCMode参数的不同。

  • TIM_OCMode:定时器比较模式
    • TIM_OCMode_Timing:定时器输出冻结,在这种情况下,不会触发输出通道的输出
    • TIM_OCMode_Active:单脉冲输出模式,在这种情况下会输出一个脉冲然后将输出通道置高
    • TIM_OCMode_Inactive:单脉冲输出模式,在这种情况下会输出一个脉冲然后将输出通道置低
    • TIM_OCMode_Toggle:定时器输出翻转模式,在这种情况下,通道会输出类似PWM的方波,但是该方波占空比固定为50%,且周期为同配置下PWM波的2倍。
    • TIM_OCMode_PWM1:定时器输出PWM模式1,在这种情况下,通道会输出PWM方波,占空比可变。
    • TIM_OCMode_PWM2:定时器输出PWM模式2,在这种情况下,通道会输出PWM方波,占空比可变,但该方波与TIM_OCMode_PWM1输出的方波反相。

标签:TIM2,输出,定时器,STM32,TIM,GPIO,PWM,OCMode
From: https://www.cnblogs.com/tqht7h/p/18067125

相关文章

  • STM32标准库通用定时器输入捕获
    STM32标准库定时器输入捕获1.输入捕获介绍输入捕获为STM32定时器的一个功能,可以用来测量输入信号的频率和占空比。具体原理:当输入信号经过比较捕获通道时,STM32会依据通道的极性设置决定是否触发捕获中断TIM_IT_CCx。此时定时器会将当前计数值TIMx->CNT的值保存在TIMx->CCRx中,通......
  • 实验1 C语言输入输出和简单程序编写
    task1_1.c`#include<stdio.h>include<stdlib.h>intmain(){printf("O\n");printf("\n");printf("II\n");printf("O\n");printf("\n");printf("II\n");system("pause&......
  • STM32移植完FATFS的ROM不够解决方法
    1.移植完FatFs之后会有语言包的支持,在map文件中也可以查看到也就是cc936.c这个文件现在cc936占用ROM大约为175030,在本项目中不需要中文支持所以取消掉即可,取消方法如下第一种方法(通过CubeMX配置的代码)不要使能中文文件名称就好了,记得改这个 第二种方法(库函数或者HAL库没有......
  • C# 启动 Python 不能及时获取输出信息
    结论:在print函数前加上sys.stdout.flush()。有的说加载print之后,都可以试试。fromtimeimportsleepimportsysif__name__=="__main__":sys.stdout.flush()print("Start")foriinrange(10000):#sys.stdout.write(str(i))sys.stdo......
  • Java基础输入输出
    好久不写普通Java,一上手发现简单的部分都忘记怎么写了……趁着这次练习,赶紧记一下packageorg.example;importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){//System.out.println("Helloworld!");Scannerscanner=ne......
  • 将MindSpore运行结果输出到log文件
    技术背景我们在Linux系统下使用一些深度学习框架(如MindSpore)运行脚本的时候,经常会用一些打印输出来判断当前执行的步骤,或者是使用打印输出来定位算法问题。但是在Linux系统下程序输出其实被分成了正确输出和错误输出,如果只是在屏幕上打印的话,会将两种输出同时打印出来。但是如果......
  • Go语言精进之路读书笔记第48条——使用expvar输出度量数据,辅助定位性能瓶颈点
    48.1expvar包的工作原理Go标准库中的expvar包提供了一种输出应用内部状态信息的标准化方案,这个方案标准化了以下三方面内容:数据输出接口形式输出数据的编码格式用户自定义性能指标的方法import(_"expvar""fmt""net/http")funcmain(){http.Hand......
  • 同个线程里,如果线程正在忙过程中,定时器时间到了会被延迟触发吗?
    同个线程里,如果线程正在忙过程中,定时器时间到了会被延迟触发吗?在同一线程中,如果线程正在忙过程中,定时器的触发事件会被延迟,直到线程空闲下来才会被触发。这是因为在QT中,线程和定时器的处理都是通过事件循环来完成的。当线程处于忙碌状态时,事件循环将会被阻塞,直到线程执行完当前的......
  • STM32的3种启动模式
    STM32的3种启动模式STM32启动模式介绍各种模式介绍boot0=0Flashmemory启动方式启动地址:0x08000000是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。基本上都是采用这种模式。boot0=1;boot1=0System......
  • STM32硬件IIC使用
    概述虽然STM32的硬件IIC据说有设计缺陷,但是经过我的实践,至少STM32F103的硬件IIC是没问题的。这里给出STM32的硬件IIC的使用以及编程思路。1.STM32硬件IIC引脚在这里给出STM32F103的硬件IIC引脚,方便查阅使用2.STM32硬件IIC使用流程STM32的硬件IIC我认为是非常具有借鉴意义的,......