STM32笔记之十:工作工作,PWM输出

发布者:CW13236066525最新更新时间:2015-09-29 来源: eefocus关键字:STM32  PWM输出 手机看文章 扫描二维码
随时随地手机看文章
a)        目的:基础PWM输出,以及中断配合应用。输出选用PB1,配置为TIM3_CH4,是目标板的LED6控制脚。

b)        对于简单的PWM输出应用,暂时无需考虑TIM1的高级功能之区别。

c)        初始化函数定义:

void TIM_Configuration(void);  //定义TIM初始化函数

d)        初始化函数调用:

TIM_Configuration();  //TIM初始化函数调用

e)        初始化函数,不同于前面模块,TIM的初始化分为两部分——基本初始化和通道初始化:

void TIM_Configuration(void)//TIM初始化函数

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//定时器初始化结构

  TIM_OCInitTypeDef  TIM_OCInitStructure;//通道输出初始化结构

//TIM3初始化

  TIM_TimeBaseStructure.TIM_Period = 0xFFFF;        //周期0~FFFF

  TIM_TimeBaseStructure.TIM_Prescaler = 5;          //时钟分频

  TIM_TimeBaseStructure.TIM_ClockDivision = 0;      //时钟分割

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);   //基本初始化

  TIM_ITConfig(TIM3, TIM_IT_CC4, ENABLE);//打开中断,中断需要这行代码

//TIM3通道初始化

  TIM_OCStructInit(& TIM_OCInitStructure);                                                //默认参数

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;          //工作状态

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;         //设定为输出,需要PWM输出才需要这行代码

  TIM_OCInitStructure.TIM_Pulse = 0x2000;                    //占空长度

  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;      //高电平

  TIM_OC4Init(TIM3, &TIM_OCInitStructure);                   //通道初始化

  TIM_Cmd(TIM3,ENABLE);                                      //启动TIM3

}

f)        RCC初始化函数中加入TIM时钟开启:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM3, ENABLE);

g)        GPIO里面将输入和输出管脚模式进行设置。信号:AF_PP,50MHz。

h)        使用中断的话在NVIC里添加如下代码:

//打开TIM2中断

  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;  //通道

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;//占先级

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;           //响应级

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //启动

  NVIC_Init(&NVIC_InitStructure);                                            //初始化

中断代码:

void TIM2_IRQHandler(void)

{

  if (TIM_GetITStatus(TIM2, TIM_IT_CC4) != RESET)       //判断中断来源

  {

    TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);            //清除中断标志

    GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_11)));//变换LED色彩

    IC4value = TIM_GetCapture4(TIM2);                   //获取捕捉数值

  }  

}

i)        简单应用:

//改变占空比

TIM_SetCompare4(TIM3, 变量);

j)        注意事项:

管脚的IO输出模式是根据应用来定,比如如果用PWM输出驱动LED则应该将相应管脚设为AF_PP,否则单片机没有输出。
关键字:STM32  PWM输出 引用地址:STM32笔记之十:工作工作,PWM输出

上一篇:STM32笔记之九:打断它来为我办事,EXIT (外部I/O中断)应用
下一篇:STM32笔记之十一:捕捉精彩瞬间,脉冲方波长度捕获

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

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