TIM-输出比较(PWM)——STM32

这篇具有很好参考价值的文章主要介绍了TIM-输出比较(PWM)——STM32。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TIM-输出比较——STM32

Oc (Output Compare) 输出比较
输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功能

tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件

tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
第一步,RCC开启时钟,把我们要用的TIM外设和GPIO外设的时钟打开
第二步,配置时基单元,包括这前面的时钟源选择
第三步,配置输出比较单元,里面包括这个CCR的值、输出比较模式、极性选择、输出使能这些参数。
第四步,配置GPIO,把PWM对应的GPIO口,初始化为复用推挽输出的配置。
第五步,就是运行控制了。启动计数器,这样就能输出PWM了。
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件

tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
预装功能就是影子寄存器(和缓冲寄存器类似)
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
带个N的就是高级定时器里互补通道的配置
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
如果你不想把所有成员都列一遍赋值,那就可以先用Stiuctlnit赋一个初始值,再更改你想改的值就行了,
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
只有把GPIO设置成复用推挽输出
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件

tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件

#include "stm32f10x.h"                  // Device header

void PWM_Inint(void)
{
	//第一步开启时钟,初始化RCC,选择TIM2
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	//设置输出PWM的GPIO端口
		//使能GPIOA的时钟 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	
	//GPIOA模式初始化
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//第二步选择时基单元的时钟,选择内部时钟,选择TIM2
	TIM_InternalClockConfig(TIM2);
	
	//第三步配置时基单元
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频系数 1分频
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//计数的模式 向上计数
	//频率为1KHz,占空比为50%的PWM波形
	//计数器溢出频率:CK CNT_OV = CKCNT /(ARR + 1)= CK PSC /(PSC + 1)/(ARR +1)
	//配置定时为1s,则CK CNT_OV=1;CKCNT=72MHz=72000000;
	TIM_TimeBaseInitStruct.TIM_Period = 100 - 1;//周期,ARR自动重装器的值 范围0~65536
	TIM_TimeBaseInitStruct.TIM_Prescaler = 720 - 1;//PSC预分频器的值 范围0~65536
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; //重复计数器的值 高级计数器才有
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
	
	//第四步配置输出中断
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//更新中断
	
	//清除中断标志位,能够避免刚初始化完就进中断的问题
	TIM_ClearFlag(TIM2,TIM_IT_Update);
	
	//第五步,配置输出比较单元,里面包括这个CCR的值、输出比较模式、极性选择、输出使能这些参数。
	TIM_OCInitTypeDef TIM_OCInitStruct;
	//先对结构体中的全部成员赋予初始值
	TIM_OCStructInit(&TIM_OCInitStruct);
	//在修改需要用到成员的值
	TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//设置输出比较的模式
	TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//设置输出比较的极性
	TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//设置输出比较的使能
	TIM_OCInitStruct.TIM_Pulse = 0;//50;//用来设置CCR 
	TIM_OC1Init(TIM2,&TIM_OCInitStruct);

	//第六步,运行控制
	TIM_Cmd(TIM2,ENABLE);
}

//让LED呈现呼吸灯的效果,那就是不断更改CCR的值就行了
void PWM_SetCompare1(uint16_t Compare)
{
	TIM_SetCompare1(TIM2,Compare);

}

#ifndef _PWM_H
#define _PWM_H

void PWM_Inint(void);
void PWM_SetCompare1(uint16_t Compare);

#endif

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "KEY.h"
#include "PWM.h"

uint8_t i;//定义一个全局变量

int main(void)
{

	
	while(1)
	{
			for(i=0;i<100;i++)
			{
				PWM_SetCompare1(i);
				Delay_ms(10);
			}
			
			for(i=0;i<100;i++)
			{
				PWM_SetCompare1(100-i);
				Delay_ms(10);
			}
	}
}

引脚重映射

tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
需要用到AFIO。
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
如果你想让PA15、PB3、PB4这三个引脚当做GPIO来使用的话;
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件
如果你想重映射定时器或者其他外设的复用引脚
tim_ocmode_pwm1,STM32,stm32,单片机,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-695277.html

	//第一步开启时钟,初始化RCC,选择TIM2
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	
		//实现重映射,将TIM2_CH2通道重映射到PA15
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//打开AFIO时钟
	GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);
	//关闭PA15端口的复用
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
	
	//设置输出PWM的GPIO端口
		//使能GPIOA的时钟 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	
	//GPIOA模式初始化
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;//GPIO_Pin_0;//将PA0改到PA15了
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);

到了这里,关于TIM-输出比较(PWM)——STM32的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32外设之TIM定时器使用及输出比较模式PWM生成,PWM频率和占空比计算,文末有固件库TIM驱动文件的函数讲解

    过来人的经验分享: TIM定时器在我们学习STM32的过程中是一个重要且稍微有点难度的外设了,就拿从学校里做的项目来说用到的也是一些基本的外设配置和传感器等等。TIM作为外设中稍微有点难度的外设相当关键,学好TIM,对以后学习单片机开发也有很大帮助。 定时器是stm3

    2024年02月07日
    浏览(45)
  • TIM输出比较(PWM)

      目录 一、输出比较 二、PWM简介  三、通用定时器的输出比较模块怎样输出PWM波形  四、输出比较8种模式 模式的介绍 (1)冻结 (2)匹配时电平翻转 (3)CNT与CCR无效,REF强制为无效电平或者有效电平

    2024年02月02日
    浏览(35)
  • STM32F4使用高级定时器(TIM1和TIM8)输出PWM问题

    STM32F4使用高级定时器(TIM1和TIM8)输出PWM时要使用TIM_CtrlPWMOutputs使能PWM输出,否则不会输出PWM波形,这一点是和通用定时器输出PWM不一样的地方,通用定时器是不用配置TIM_CtrlPWMOutputs函数的。、

    2024年02月15日
    浏览(41)
  • STM32f103,TIM1,TIM2,TIM3,TIM4,TIM5,TIM8,4路PWM输出配置(保姆级)

    没什么可说的,想说的都写在注释里了,重要的事情说三遍:看注释,看注释,看注释 定时器的.c文件: /***************************************************************************** TIM1,TIM2,TIM3,TIM4,TIM5,TIM8输出4路PWM配置 要用TIM2-TIM5记得注销TIM1,TIM8 要用TIM1,TIM8记得注销TIM2-TIM5 默认:TIM2-TIM5 注

    2023年04月08日
    浏览(38)
  • STM32F105RBT6 使用定时器TIM3输出PWM波

    2.1 相关函数 RCC_APB1PeriphClockCmd、GPIO_Init、TIM_TimeBaseInit、TIM_OC4Init、TIM_OC4PreloadConfig、NVIC_Init、TIM_ITConfig、TIM_Cmd、 3.1 在启动文件里面找到TIM3 对应的中断入口函数,也就是中断服务函数 TIM3_IRQHandler 4.1 中断服务函数需要快速地执行完毕。中断服务函数应该避免执行太多的计算复

    2024年02月08日
    浏览(47)
  • 沁恒CH32V307使用记录:使用TIM输出PWM信号

    使用TIM输出PWM信号是单片机中比较常用的一个功能。这篇文章将对CH32V307中相关内容进行说明。 本文使用沁恒官方的开发板 (CH32V307-EVT-R1沁恒RISC-V模块MCU赤兔评估板) 进行演示。 CH32V307拥有多个定时器,只有通用定时器和高级定时器支持PWM输出功能,需要注意的是不同的定

    2024年02月17日
    浏览(71)
  • STM32 TIM PWM高阶操作:刹车及状态约束

    刹车及状态约束是STM32 TIM PWM控制里面比较复杂的一部分,涉及到PWM波形产生前,中,后的管脚状态输出。 这里先引入两个描述,一个是“半高阻”,意思是STM32管脚输出高阻时, 内部 的上拉或者下拉设置仍然有效。一个是“全高阻”,意思是STM32管脚输出高阻时, 内部 上拉

    2024年01月24日
    浏览(24)
  • 【单片机】STM32单片机,定时器,多路PWM,TIM1、TIM2、TIM3、TIM4,STM32F103

    下图是定时器相关引脚: 在《STM32中文参考手册V10.pdf》有写: TIM1 的PWM是带互补输出的,较为高级和复杂,有兴趣可以参考其他介绍文章,这里的代码让7个引脚输出PWM。 调用: 这里没有重映射,注意不能把PA9 PA10 初始化成串口去了。 timer.c timer.h 调用: 这里没有重映射。

    2024年02月11日
    浏览(65)
  • STM32--TIM定时中断&TIM输出比较

    目录 一.TIM中断 1.TIM简介 2.定时器类型 1)基本定时器 2)通用定时器 3)高级定时器  3.时基单元   二.TIM输出比较 1.输出比较简介OC 2.PWM 1.PWM简介 2.PWM结构  3.参数计算  3.输出比较通道(通用) 1)输出模式控制器 2)至主模式控制器 3)极性选择 4)输出使能电路 5)OCx——

    2024年04月09日
    浏览(42)
  • 关于STM32利用TIM+PWM+DMA控制WS2812

    MCU:STM32F103c8t6 开发工具:STM32CubeMX  使用板子参考原理图:STM32F103C8T6最小系统板开源链接 脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等但宽度不一致的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输

    2024年02月01日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包