首页 > 其他分享 >STM32定时器PWM

STM32定时器PWM

时间:2023-07-18 22:32:00浏览次数:32  
标签:TIM3 定时器 void STM32 TIM GPIO PWM

个人估计理解这个图片就差不多明白PWM了。用定时器的加减也一样

STM32定时器PWM_寄存器

使用PWM的时候要看PWM的相关IO引脚。CH1-CH4 对应OC配置的OC1-OC4

频率计算可以看前面的定时器文章。

PWM配置过程:

1:初始化相关的PWM引脚

2:初始化配置定时器   TIM_TimeBaseInit(TIM3,&TIM3_TimeBaseInitStruct);

3:配置OC  TIM_OC3Init(TIM3,&TIM3_OCInitStruct);这个要看相关引脚

4:开启定时器就可以了。CMD

配置占空比函数 :TIM_SetCompare3(TIM3,0)

选项:开启影子寄存器://void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

计算设置占空比时,是马上写入CCR,还是下一个周期写入。

GPIO配置:

/*

函数名:void rgb_init(void)

功能:初始化GPIOB

形参:

*/

void rgb_init(void)

{

 GPIO_InitTypeDef GPIOB_InitStruct;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//开启GBIOB的时钟

 GPIOB_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//GPIO模式 复用推挽//手册有说明

 GPIOB_InitStruct.GPIO_Pin=GPIO_Pin_0;//引脚选择

 GPIOB_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;//输出速度

 GPIO_Init(GPIOB,&GPIOB_InitStruct);

GPIO_SetBits(GPIOB,GPIO_Pin_0);//初始化时电平置高//电路驱动默认不启动

}

定时器和OC配置及开启(PWM配置)

/*

函数名:void time3_init(void)

功能:初始化定时器3

形参:

*/

void time3_init(void)

{

TIM_TimeBaseInitTypeDef TIM3_TimeBaseInitStruct;

TIM_OCInitTypeDef TIM3_OCInitStruct;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//开启定时器2的时钟

TIM3_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;//定时器不分频  分频 系统时钟/分频

TIM3_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//计时模式 向上

TIM3_TimeBaseInitStruct.TIM_Period=99;//ARR 重装载

TIM3_TimeBaseInitStruct.TIM_Prescaler=719;// PSC预分   实际计算 定时器时钟/arr+1/per+1=时间    1/时间=

TIM_TimeBaseInit(TIM3,&TIM3_TimeBaseInitStruct);

 

TIM_OCStructInit(&TIM3_OCInitStruct);

TIM3_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//设置为PWM模式1,

TIM3_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//PWM口的输出极性


TIM3_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//开启PWM输出

TIM3_OCInitStruct.TIM_Pulse=0;//CCR的第一次比较值

TIM_OC3Init(TIM3,&TIM3_OCInitStruct);

TIM_Cmd(TIM3,ENABLE);//定时器开始定时

TIM_SetCompare3(TIM3,0);//设置PWM占空比    50和重装载是有点关系的,CCR的值不能超过重装载。 现在是占空比50.

 

// 备注:这个函数会决定CCR的值是马上更新还是下一个周期更新 TIM_SetCompare3(TIM3,50);

//void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

//ARPE:自动重装载预装载允许位 (Auto-reload preload enable)  

//0:TIMx_ARR寄存器没有缓冲;

//1:TIMx_ARR寄存器被装入缓冲器。

}

到此就可以用TIM_SetCompare3函数去设置占空比了,占空比和ARR是有关系的,设置的占空比比可以超过ARR,

PWM可以用到步进驱动器;频率为速度。占空比一般为50,要开启中断。TIM_IT_CCX。比较寄存器的中断,看是那个,选择那个。



标签:TIM3,定时器,void,STM32,TIM,GPIO,PWM
From: https://blog.51cto.com/u_15919473/6769259

相关文章

  • stm32片上资源(2023/7/18)
     *NVIC &SysTick为片内资源 *NVIC:内核里面用于管理中断的设备,比如配置中断优先级这些东西 *SysTick:内核里面是一个定时器,主要用来给操作系统提供定时服务的。STM32可以加入操作系统的,比如FreeRTOS、UCOS等,如果用了这些操作系统,就需要用SysTick提供定时来进行任务切换功......
  • 02. STM32F1的系统框架
    一、STM32的系统框架  STM32F103采用的是Cortex-M3内核,内核即CPU,由ARM公司设计。ARM公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商(SOC)如ST、TI、NXP等,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。如GPIO、USART(串口)......
  • TIM-PWM边沿检测时TI1F_ED的应用解析
    TIM-PWM边沿检测时TI1F_ED的应用解析定时器框图TI1F_ED指示如下所示:以TIMx_CH1的信号为例:TI1FP1和TI1FP2解析:从TIMx_CH1进入的TI1信号,经过输入滤波器生成TI1F,再经过边沿检测器(捕获极性选择上升沿或下降沿)生成TI1FP1和TI1FP2。TI1F_ED解析:TI1经过边沿检测器后生成TI1F_ED信号(双边沿......
  • useEffect、异步请求、定时器使用useState闭包问题
    useEffect闭包问题:问题:useEffect使用useState会使调用的所有方法内部的state值为useEffect周期的值,即使在这个过程中useState的值变化也不能影响调用方法内获取到原始值解决方式:使用useCallabck可以避免由此产生的闭包问题异步请求、定时器等js闭包问题:问题:异步请求和定时器......
  • 01. 初识STM32
    一、什么是单片机  单片机(Single-ChipMicrocomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、......
  • python STM32
    如何在Python中使用STM32前言欢迎来到PythonSTM32入门教程!在本篇文章中,我将向你介绍如何在Python中使用STM32。STM32是一种基于ARMCortex-M内核的32位微控制器,具有广泛的应用领域,包括物联网、嵌入式系统和工业自动化等。通过本教程,你将学会如何在Python中编写STM32程序,并将其烧......
  • pwm驱动蜂鸣器
    IO口输出固定频率和占空比的PWM信号驱动蜂鸣器鸣响voidbuz(void){if(buz_flg){buz_cnt=200;//运行200ms0.2sPwm0Init(1000,500);//频率1k,占空比%50buz_flg=0;}if(buz_cnt==0){Pwm0Init(1000,0);//占空比为0,不......
  • STM32:rtthread_信号量
    1信号量  信号量是一种用于管理线程间资源关系的内核对象,线程可以获取或释放它从而达到同步或互斥的目的;  信号量可以运用在多种场合中,形成锁,同步(多个线程可访问同一资源),资源计数等关系,也能方便的用于线程与线程,中断与线程的同步中;  1.1semaphore信号量结构体//rtd......
  • 【雕爷学编程】Arduino动手做(161)---16路PWM舵机驱动板2
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • STM32笔记(3) RS485&MODBUS
    RS485通信以及modbus通信协议硬件层:rs485解决的是数据传输的问题,如何将0/1传输到另一端主机或从机将TTL电平通过485芯片转换成差分信号抗干扰能力强,传输距离远485芯片中集成了发送器和接收器:连接单片机io引脚通过高低电平来决定是发送方还是接收方两线半双工软件......