0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于stm32的PWM输出呼吸灯(包括stm32呼吸灯代码)

ss 来源:网络整理 2018-03-28 16:23 次阅读

基于stm32的pwm呼吸灯

使用定时器来控制I/O口输出PWM波形,从而驱动LED灯出现类似呼吸频率一般的亮灭。

硬件电路图:

基于stm32的pwm呼吸灯

我的收获:

基于stm32的pwm呼吸灯

这是STM32数据手册上对TIM3通用定时器复用功能重映象的描述,假设让PA6作为PWM输出,从图中可以看出PA6对应TIM3的通道1,

使能TIM3通道1的函数为

TIM_OC1Init();1

同样的,如果想要使能PA7,它对应的是TIM3的通道2,那么使能通道2的函数便是:

TIM_OC2Init()1

以此类推,需要注意,使能不同相同定时器不同通道的函数是有一点小差别的,防止在程序中调用TIM_OC1Init()函数来使能TIM3通道2这种情况的发生。

基于stm32的pwm呼吸灯

注意看这里,假设使用的是TIM3的通道1,那么这里就要写成

TIM3-》CCR11

类似的如果用TIM3定时器的通道2,这里就要相应的改为

TIM3-》CCR21

这同样是为了防止本来计划使用的是TIM3的通道1,反而在这里自摆乌龙写为了TIM-》CCR2的情况,这样的错误一般很隐蔽,不容易查找。

相应的程序已经上传,但是不知道为什么在这里无法显示程序的下载地址,需要下载可以去我的资源里下载。

工程文件为

Progect–》RVMDK(uv4)–》iSO_STM32

基于stm32的pwm呼吸灯

STM32PWM输出实现LED灯渐亮渐灭程序:

/**说明:

*PA0:KEY1;PA1:KEY2;

*PA2:LED1;PA3:LED2;

*PA9:USART1_TX;PA10:USART1_RX

*/

#include “stm32f10x.h”

#include “stm32f10x_rcc.h”

#include “stm32f10x_gpio.h”

#include “stm32f10x_tim.h”

#include “stm32f10x_pwr.h”

#include “stm32f10x_exti.h”

#include “system_stm32f10x.h”

#include “misc.h”

void RCC_Configuration(void);

void GPIO_Configuration(void);

void TIM2_Configuration(void);

void delay_ms(u16 time);

int main()

{

u8 led_fx=1;

u16 led_dt=0;

RCC_Configuration();

GPIO_Configuration();

TIM2_Configuration();

while(1)

{

delay_ms(10);

if(led_fx==1)

{

led_dt++;

}else{

led_dt--;

}

if(led_dt》100) led_fx=0;//可以和初始值一样

if(led_dt==0) led_fx=1;

TIM_SetCompare3(TIM2,led_dt);//通道3没有重影像是PA2对应LED1

TIM_SetCompare4(TIM2,led_dt);//通道4没有重影像是PA3对应LED2

}

}

void RCC_Configuration(void)

{

SystemInit();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

//GPIO_AFIODeInit();和下面相同效果,可以查看源码证明

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

}

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

//GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2,ENABLE);//端口映射函数

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;//GPIO_Pin_3对应channel3,主函数改为:TIM_SetCompare3

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

void TIM2_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_DeInit(TIM2);

TIM_InternalClockConfig(TIM2);

//定时器初始化

TIM_TimeBaseStructure.TIM_Period = 100-1;//初始值是100,2MHz=2000KHz,2MHz/100=0.02MHz,所有周期T=1/0.02MHz=50us,示波器显示周期应该为50us

TIM_TimeBaseStructure.TIM_Prescaler = 36-1;//36倍分频,72MHz/36=2MHz

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

//PWM初始化

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = 50;//占空比值是50,所以占空比是:50/100=50%

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

TIM_OC3Init(TIM2,&TIM_OCInitStructure);

TIM_OCInitStructure.TIM_Pulse = 20;

TIM_OC4Init(TIM2,&TIM_OCInitStructure);

//TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);

//TIM_ARRPreloadConfig(TIM2, ENABLE);

TIM_Cmd(TIM2,ENABLE);

TIM_CtrlPWMOutputs(TIM2,ENABLE);

}

void delay_ms(u16 time)

{

u16 i=0;

while(time--)

{

i=12000;

while(i--);

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5186

    浏览量

    213830
  • STM32
    +关注

    关注

    2270

    文章

    10897

    浏览量

    355792
  • 呼吸灯
    +关注

    关注

    10

    文章

    110

    浏览量

    42724
收藏 人收藏

    评论

    相关推荐

    基于stm32PWM呼吸工程分享

    使用pwm波调整led的亮度,其中led的文件包含在附件里面,代码如下:通过TIM3通用定时器的CH1通道输出一个PWM波,并调整
    发表于 07-02 07:51

    基于stm32PWM呼吸工程分享

    使用pwm波调整led的亮度,其中led的文件包含在附件里面,代码如下:通过TIM3通用定时器的CH1通道输出一个PWM波,并调整
    发表于 07-06 07:37

    怎么通过PWM来实现呼吸

    说下我是怎么通过这个PWM来实现呼吸的。硬件的准备就不说了,想实现呼吸的你这个硬件配置肯定是莫得问题。我重点说下这个
    发表于 08-11 06:17

    STM32Cube如何配置PWM呼吸

    STM32Cube如何配置PWM呼吸
    发表于 11-23 07:17

    基于stm32 f103的pwm呼吸程序代码分享

    基于stm32 f103的pwm呼吸程序代码分享
    发表于 12-14 07:52

    PWM实现呼吸的应用

    stm32实现PWM最简单方法前言一、PWM概念二、PWM应用输出比较功能框图三、PWM
    发表于 01-21 13:18

    STM32呼吸的原理是什么

    前段时间学习stm32的时候就做过呼吸实验,浏览了一些博客后,做下总结呼吸原理其实是利用pwm
    发表于 02-21 07:26

    STM32实现PWM呼吸的程序合集免费下载

    本文档的主要内容详细介绍的是STM32实现PWM呼吸的程序合集免费下载。
    发表于 03-19 08:00 16次下载
    <b class='flag-5'>STM32</b>实现<b class='flag-5'>PWM</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>的程序合集免费下载

    STM32_PWM呼吸

    全面屏发展,因此很多手机取消了呼吸这一功能,取而代之的是息屏显示)2、什么是PWM?PWM:Pulse Width Modulation,脉冲宽度调制,是利用微处理器的数字
    发表于 11-26 12:21 20次下载
    <b class='flag-5'>STM32_PWM</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>

    STM32开发入门(三)——呼吸

    STM32开发入门(三)——呼吸
    发表于 12-07 17:36 25次下载
    <b class='flag-5'>STM32</b>开发入门(三)——<b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>

    STM32呼吸原理

    前段时间学习stm32的时候就做过呼吸实验,浏览了一些博客后,做下总结呼吸原理其实是利用pwm
    发表于 12-24 19:27 20次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>原理

    STM32 使用PWM实现呼吸

    STM32 PWM实现呼吸使用STM32F103ZET6 定时器4 CH2通道产生PWM波,在
    发表于 12-24 19:41 55次下载
    <b class='flag-5'>STM32</b> 使用<b class='flag-5'>PWM</b>实现<b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>

    stm32使用延时实现呼吸寄存器版

    stm32使用延时实现呼吸(寄存器)该实验是使用STM32F103C8T6实现,使用寄存器编程。呼吸
    发表于 01-18 10:33 0次下载
    <b class='flag-5'>stm32</b>使用延时实现<b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>寄存器版

    基于HAL库的STM32呼吸实验

    STM32 ,则可以更加便捷、灵活地实现呼吸的控制。因此,本文将介绍基于 STM32呼吸
    的头像 发表于 05-14 16:41 2077次阅读
    基于HAL库的<b class='flag-5'>STM32</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>实验

    通过STM32实现PWM呼吸的教程

    顾名思义,就是一个的亮度的变化,由亮变暗,从暗变亮,有一个渐变,规律的变化,像是人的呼吸,是呼吸,所以叫
    的头像 发表于 07-26 15:20 1.3w次阅读
    通过<b class='flag-5'>STM32</b>实现<b class='flag-5'>PWM</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>的教程