STM32 TIM1 PWM 输出

发布者:csw520最新更新时间:2017-11-02 来源: eefocus关键字:STM32  TIM1  PWM  输出 手机看文章 扫描二维码
随时随地手机看文章

 GPIO_InitTypeDef GPIO_InitStructure2;         

 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;        

 TIM_OCInitTypeDef TIM_OCInitStructure;        

 TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

 //第一步:配置时钟                 

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_TIM1,ENABLE);

 //第二步,配置goio口          

    GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_8;         

 GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;         

 GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;                 //设置为复用浮空输出         

 GPIO_Init(GPIOA,&GPIO_InitStructure2);        

 

         

 GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_13;         

 GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;         

 GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;                 //设置为复用浮空输出         

 GPIO_Init(GPIOB,&GPIO_InitStructure2);

 //第三步,定时器基本配置         

 TIM_TimeBaseStructure.TIM_Period=1000-1;                   // 自动重装载寄存器的值        

 TIM_TimeBaseStructure.TIM_Prescaler=72-1;                  // 时钟预分频数        

 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;      // 采样分频        

 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;  //向上计数        

 TIM_TimeBaseStructure.TIM_RepetitionCounter=0;      //重复寄存器,用于自动更新pwm占空比                       

 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

 //第四步pwm输出配置         

 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;                    //设置为pwm1输出模式         

 TIM_OCInitStructure.TIM_Pulse=500;                                 //设置占空比时间         

 TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;             //设置输出极性         

 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;        //使能该通道输出         

 

 //下面几个参数是高级定时器才会用到,通用定时器不用配置         

 TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;        //设置互补端输出极性         

 TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//使能互补端输出         

 TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;        //死区后输出状态         

 TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;//死区后互补端输出状态         

 TIM_OC1Init(TIM1,&TIM_OCInitStructure);                                            //按照指定参数初始化           

 

 //第五步,死区和刹车功能配置,高级定时器才有的,通用定时器不用配置         

 TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;//运行模式下输出

 TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;//空闲模式下输出选择          

 TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;         //锁定设置        

 TIM_BDTRInitStructure.TIM_DeadTime = 0x90;                                         //死区时间设置         

 TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;                 //刹车功能使能         

 TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;//刹车输入极性        

 TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;//自动输出使能         

 TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);

 //第六步,使能端的打开 

 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIMx在CCR1上的预装载寄存器         

 TIM_ARRPreloadConfig(TIM1, ENABLE);                //使能TIMx在ARR上的预装载寄存器         

 TIM_Cmd(TIM1,ENABLE);                              //打开TIM2         

 

 //下面这句是高级定时器才有的,输出pwm必须打开         

 TIM_CtrlPWMOutputs(TIM1, ENABLE);                                   //pwm输出使能,一定要记得打开

 // 在运行当中想要改变pwm的频率和占空比调用:

 TIM_SetAutoreload(TIM1,1000); 

 TIM_SetCompare1(TIM1,500);


关键字:STM32  TIM1  PWM  输出 引用地址:STM32 TIM1 PWM 输出

上一篇:STM32高级控制定时器1的使用
下一篇:STM32 TIM1 输出脉冲范例

推荐阅读最新更新时间:2024-03-16 15:42

STM32_ USART输入输出的讲解
今天总结STM32F103串口,以工程实例来讲述。 工程现象: 1.间断发送字符 2.接收中断(接收字符,并发送该字符) 软件工程下载地址(360云盘): https://yunpan.cn/cPEI3zyQ7UqJv访问密码 ee52 讲述分如下几点: 一、串口时钟 这里的“时钟配置”函数在bsp.c文件下面; 使能串口1(RCC_APB2Periph_USART1)时钟。 二、USART1引脚配置 这里的“USART1引脚配置”函数在usart.c文件下面; 初始化串口使用引脚, 包含端口引脚、频率、输出类型。 三、串口配置 这里的“串口配置”函数在usart.c文件下面; 详见每一句后面都有注释。
[单片机]
STM32_ USART输入<font color='red'>输出</font>的讲解
STM32PWM的频率和占空比设定
在TEC控温项目中用到PWM的占空比来控制温度,这就需要占空比是连续可以变化的。 最开始也是到处找资料,找现成的例程,发现大家各说风云,最后还是没有建设性的结果。所以又请教了官方的固件库“STM32最新固件库v3.5”(存到百度网盘- 开发应用- stm32目录下了)呵呵,有现成的demo。开始好像是懂了也没有过多的去研究,也没有备份,就没去管他了。后来具体用的时候发现没有想象的那么简单,又倒腾了好久才搞清楚,问了不走弯路。这次决定用博客来记录一下现在的成果。配置文件如下: void TIME_ini(uint16_t Channel4Pulseset) { TIM_TimeBaseInitTypeDef TIM_Time
[单片机]
STM32 基础系列教程 8 - 互补PWM
前言 PWM及互补PWM是电机控制的基础,前面我们已经学习了PWM的产生,今天来学习一下互补PWM的产生,互补PWM就是两个互补的PWM的组合,用stm32 的高级定时器可以直接产生两路互补的PWM(即互补PWM)。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置: 系统时钟树 高级定时器TIM1配置
[单片机]
<font color='red'>STM32</font> 基础系列教程 8 - 互补<font color='red'>PWM</font>
一种基于STM32和PPG技术的腕戴式心率计设计
引言 心血管疾病是威胁人类生命健康的严重疾病,且发病年龄呈现年轻化的趋势。随着人们健康意识的增强,自我保健的需求不断增长,医院中精度高但使用不便的心电图仪已不能满足人们对心脏进行日常监护的需求。因此基于光电容积脉搏波(Photo-Plethysmography,简称PPG)技术的可穿戴式心率测量设备被广泛应用于心率监测领域。虽然市面上已有多种便携式心率仪,但大部分不能在人们进行日常活动时应用,只能进行短时间段的监测,不能有效抵抗运动干扰。夹于耳垂或头戴式的测量设备也不利于用户体验。 基于以上考虑,本文以STM32L152CB为控制核心,设计出了一款可以戴在手腕上的低功耗穿戴式心率计,设备体积小、携带方便、抗干扰能力强、测量精度
[单片机]
一种基于<font color='red'>STM32</font>和PPG技术的腕戴式心率计设计
STM32单片机的BOOT0和BOOT1运用原理
STM32三种发动形式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)体系存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是普通说的ISP顺序。这个区域的内容在芯片出厂后没有人可以修正或擦除,即它是一个ROM区。 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状况决议了芯片复位后从哪个区域开端执 行顺序,见下表: BOOT1=x BOOT0=0 从用户闪存发动,这是正常的任务形式。 BOOT1=0 BOOT0=1 从体系存储器发动,这种形式发动的顺序功用由厂家
[单片机]
高频下保持高输出阻抗的双极电流源
基于仪器和运算放大器的传统 电流源和电压/电流转换器在低频下提供很高的输出阻抗,这是因为放大器具有良好的低频 CMRR(共模抑制比)。在较高频率下,降低的 CMRR、固有的输出电容、转换率的局限性阻止了高质量电流源的实现。Analog Devices 公司的两款 200 MHz线路接收/放大 IC——AD8129 和 AD8130——提供了差分输入和显著的 CMRR,使它们成为构建高频恒流源的有力候选者。图 1 中的电路提供了良好的起点,但 AD8130 较高的输入偏置电流可能会在电流电平较低时影响输出电流精度。   为了克服这个问题,可以添加一个单位增益缓冲器IC 2 来隔离电流传感电阻器(图 2)。另外,可以利用缓冲放大器来
[电源管理]
高频下保持高<font color='red'>输出</font>阻抗的双极电流源
stm32电机控制之控制两路直流电机
  小车使用的电机是12v供电的直流电机,带编码器反馈,这样就可以采用闭环速度控制,这里电机使用PWM驱动,速度控制框图如下:   由以上框图可知,STM32通过定时器模块输出PWM波来控制两个直流电机的转动,通过改变PWM占空比的大小可以改变电机的转速,由于我们的控制目标是实现电机运行在速度范围内任意给定的速度,这里就需要采用闭环控制的思想,通过编码器获取电机的实时转速,通过与给定速度做差,将偏差作为PID控制器的输入,通过PID控制改变PWM占空比的大小,从而使电机的速度运行在给定的速度上。   这里使用的电机驱动芯片为TB6612,该芯片可以十分方便的驱动两个直流电机的运行,其驱动逻辑表如下:   AIN1,A
[单片机]
<font color='red'>stm32</font>电机控制之控制两路直流电机
STM32 定时器计数器 更新事件
向上计数模式 在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。 如果使用了重复计数器功能,在向上计数达到设置的重复计数次数(TIMx_RCR)时,产生更新事件(UEV);否则每次计数器溢出时才产生更新事件。 这样很容易误解 应该是否则每次计数器溢出时都产生更新事件,即不使用重复重复计数功能每次溢出都产生更新事件。 产生更新事件方式 1.设置了TIMx_CR1寄存器中的URS位(选择更新请求),在TIMx_EGR寄存器中(通过软件方式或者使用从模式控制器)设置UG位将产生一个更新事件UEV,但硬件不设置UIF标志(即不产生中断或DMA请求)
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved