STM32-PWM输出

发布者:Qingfang最新更新时间:2018-08-15 来源: eefocus关键字:STM32  PWM输出 手机看文章 扫描二维码
随时随地手机看文章

    脉冲宽度调制,简称PWM。是一种利用数字信号来进行模拟信号的输出,拥有多种模式。主要的原理就是利用数字信号的高低电平的周期性变化来改变输出电压的平均值。从而达到模拟信号的输出模式。主要引用于电机调速,调光灯电路控制中。 

    在STM32中拥有多路PWM信号。每一个定时器的输出引脚都可以设置成相应的PWM信号的输出。PWM信号主要的参数有两个,周期的占空比。周期主要是由对应的定时器来确定。占空比就是PWM输出高电平的时间。假设现在定时的周期为2MS,在2MS中通过设置其中1MS引脚输出高电平。这样就可以说这个PWM的占空比为50%。 

    在程序运行中可以使用TIM_SetCompare1()来改变相应的占空比。这样就可以实现灵活的控制PWM信号的输出。


#include "Time.h"

#include "stm32f10x.h"


void TIM4_init(void)

{

    GPIO_InitTypeDef GPIO_InitStruc; 

    TIM_TimeBaseInitTypeDef TIM_struct;

    TIM_OCInitTypeDef TIM_ocinit;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);        //打开TIM4的时钟


    GPIO_InitStruc.GPIO_Mode=GPIO_Mode_AF_PP;                         

    GPIO_InitStruc.GPIO_Pin=GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8| GPIO_Pin_9;

    GPIO_InitStruc.GPIO_Speed=GPIO_Speed_50MHz;

    GPIO_Init(GPIOB,&GPIO_InitStruc);                                               //初始化PWM信号的输出引脚



    GPIO_InitStruc.GPIO_Mode=GPIO_Mode_Out_PP;                         

    GPIO_InitStruc.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1;

    GPIO_InitStruc.GPIO_Speed=GPIO_Speed_50MHz;

    GPIO_Init(GPIOA,&GPIO_InitStruc);   


    TIM_struct.TIM_Period=999;                                                          //设置定时器周期 72/72*1000 为1MS

    TIM_struct.TIM_CounterMode=TIM_CounterMode_Up;

    TIM_struct.TIM_ClockDivision=TIM_CKD_DIV1 ;

    TIM_struct.TIM_Prescaler=71;                                                        //定时器72分频


    TIM_TimeBaseInit(TIM4,&TIM_struct);

    //TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);


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

    TIM_ocinit.TIM_Pulse=200;                                                               //设置PWM初始占空比

    TIM_ocinit.TIM_OutputState=TIM_OutputState_Enable;          //使能pWM输出使能

    TIM_ocinit.TIM_OCPolarity=TIM_OCPolarity_High;                  //设置PWM信号极性


    TIM_OC1Init(TIM4,&TIM_ocinit);

    TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);


    TIM_OC2Init(TIM4,&TIM_ocinit);

    TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);


    TIM_OC3Init(TIM4,&TIM_ocinit);

    TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);


    TIM_OC4Init(TIM4,&TIM_ocinit);

    TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);


    TIM_Cmd(TIM4,ENABLE);

}

void TIM_PWM_Con(u16 DR1,u16 DR2,u16 DR3,u16 DR4)

{

    TIM_SetCompare1(TIM4,DR1);                                      //改变PWM的占空比

    TIM_SetCompare2(TIM4,DR2);

    TIM_SetCompare3(TIM4,DR3);

    TIM_SetCompare4(TIM4,DR4);

}


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

上一篇:STM32-串口IAP升级
下一篇:STM32-SPI之OLED

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

STM32开发笔记29:STM32L0低功耗设计——STOP_RTC模式的真实功耗
单片机型号:STM32L053R8T6 本例程测试STOP_RTC模式的真实功耗,主程序如下: int main(void) { while(1) { HAL_Delay(5000); Target.HAL.Rtc.EnterStopRtcMode(); Target.HAL.SystemClock.SetMode(2); } } 系统进入主循环后,先进行5秒延时,然后进入低功耗模式,低功耗模式设置的RTC时间为4秒,4秒过后退出低功耗模式,重新进行时钟设置。 在进入main函数之前,执行了3个操作:时钟设置、低功耗设置和RTC设置,如下面程序: class CHAL { public:
[单片机]
STM32RTC实时时钟
我用的是STM32库函数:两个知识点: 一、RTC时钟框图分析(重要) 二、时间是怎样显示出来的(简析) 一、RTC时钟框图分析(重要) 先熟悉一下几个知识点: 1、STM32的实时时钟(RTC)是一个独立的定时器! 2、RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位火从待机模式唤醒后RTC的设置和时间维持不变。 RTC这章中,对RTC相关的寄存器的操作特别重要,我在这里不解释了,请查阅手册。。 先上图! RTC时钟框图分为完全独立的两个部分:1、APB1接口部分(用来RTC相关的寄存器);2、RTC核心; 第一部分:APB1接口。注意:这里涉及到寄存器RTC_
[单片机]
STM32RTC实时时钟
stm32库函数学习篇----通用定时器(PWM功能)
上午花了半天时间熟悉了stm32的PWM模块。中午利用午饭时间把PWM功能调试成功。当然,很简单的东西,也许很多前辈估计都不屑一顾的东西。 今天最大的感叹就是网络资源实在是个巨大的宝库,真的很庆幸,在这个复杂的社会环境里,在一个到处充斥着私心、私利的时代,各个网站,各个论坛上的众多网友都时刻保持着开源的氛围。学习一定要和他人交流,而网络提供了这么一个极好的平台。 废话少说,言归正传。 实现功能:采用定时器2的通道2,使PA1输出频率1K,占空比40的PWM波形,用PA8随意延时取反led灯,指示程序运行。 首先熟悉一下定时器的PWM相关部分。看图最明白 其实PWM就是定时器的一个比较功能而已。 CNT里的值不断++
[单片机]
<font color='red'>stm32</font>库函数学习篇----通用定时器(<font color='red'>PWM</font>功能)
基于STM32的物联网环境监测系统
本应用笔记以STM32单片机作为控制和数据处理的单元,使用AHT10、BH1750和BMP280传感器去监测周围的环境参数,在LCD屏完成传感器数据和相关信息的显示。 同时,采用了无线模组与单片机之间进行数据交互。当无线通讯模组成功连接网络,并接入机智云物联网云平台时,用户可以通过登录物联网云平台后台查看传感器上报的数据和进行远程控制。 01 总体方案设计 本环境监测系统设计选取了控制和数据处理能力强的ST32单片机作为核心部件。使用温湿度传感器对周围环境中的温度与湿度监测,选取高精度的光强度传感器完成对周围环境的光照强度的测量,对于气压数据的测量,将选取高精度的气压传感器完成工作。 该系统使用液晶显示屏幕完成对
[单片机]
基于<font color='red'>STM32</font>的物联网环境监测系统
PIC单片机输出比较(PWM)模块介绍
在Android红外遥控器项目中使用了输出比较OC1(PWM)模块来产生38KHz PWM脉冲,脉冲占空比与红外信号发射距离以及产品功耗有关。其中占空比越大,发射距离越远,功耗越大。红外载波的占空比一般在1/3左右。 将输出比较模块配置为PWM 操作,需要以下步骤: 1.将OCx输出配置为可用的外设引脚选择引脚之一。 2.计算所需的占空比并将计算结果装入 OCxR 寄存器。 3.计算所需的周期并将计算结果装入 OCxRS 寄存器。 4.选择当前的 OCx 作为同步源,方法是把 0x1F写入SYNCSEL 4:0 (OCxCON2 4:0 ),把 0 写入OCTRIG (OCxCON2 7 )。 5.通过写 OCTSEL2 2:
[单片机]
STM32问题记录:外设初始化与外设时钟使能
最近在STM32上写了一份串口通信的程序,但下载复位后串口却不能工作,初始化的代码如下: //发送/接收的GPIO、串口和中断的初始化结构体 GPIO_InitTypeDef GPIO_InitStructureTx; GPIO_InitTypeDef GPIO_InitStructureRx; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //设置发送和接收引脚 GPIO_InitStructureTx.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructureRx.GPIO_
[单片机]
STM32 对外设基地址,总线外设基地址和寄存器基地址的理解
前言 本博文基于STM32F103ZET6和MDK以及V3.5.0库函数; 本博文从Cortex-M3内核的寻址空间映射一直聊到库函数是怎样配置具体的某一个寄存器; 如有不足之处,多多指教; Cortex-M3存储器映射 由于STM32系列芯片为32位处理器,所谓32位处理器,也即是地址总线有32根,可寻址空间为2^32=4GB;如下图 从图片上可以看出,ARM公司已经为芯片生产厂商们划分好了存储映射空间;并且,0x40000000~0x5FFFFFFF这段地址,映射片上外设的寄存器地址;STM32F10x.h这个头文件正是吧STM32的所有寄存器进行地址映射,此文件通过宏定义的方式,将各个寄存器的地址转换为相应的符号名称,如
[单片机]
<font color='red'>STM32</font> 对外设基地址,总线外设基地址和寄存器基地址的理解
关于LM3S与STM32的粗浅对比
我用过STM32,现在又用LM3S。用后者的原因就是因其集成有网口。通过对比,我发现LM3S有一点不如STM32,就是外设的更新事件。STM32中可以通过更新事件机制实现外设之间直接打交道,而不必打扰CPU,从而大大提高了处理效率。但LM3S中就没这种机制,这是其一大不足。不知TI能否予以改进。 另外,LM3S的网口既然集成了MAC+PHY,为设么不集成协议?还要通过软件实现,耽误事。据我所知,对上述三者全部硬件实现的只有南韩的一款芯片W7100,是51核的。不知TI下一步能否硬件集成协议。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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