基于STM32F103 PWM呼吸灯设计

发布者:csw520最新更新时间:2021-12-11 来源: eefocus关键字:STM32F103  PWM  呼吸灯 手机看文章 扫描二维码
随时随地手机看文章

1、线性呼吸灯

bsp.c


#include


void RCC_Configuration(void); /* 初始化系统时钟 */

void TIM3_Configuration(void); /* PWM配置 */


void  BSP_Init (void)

{

RCC_Configuration(); /* 初始化系统时钟 */

TIM3_Configuration(); /* PWM配置 */

}

/*********************************************************************************************************

* 名    称 :RCC_Configuration

* 功能描述 : 初始化系统时钟

* 输入参数 : none

* 返回参数 : none.

* 作    者 : 

* 修    改 :(日期、修改人名、修改原因)

* 特殊说明 : (特殊功能说明,例如:有参数检查等)

*********************************************************************************************************/

void RCC_Configuration(void)

{

SystemInit(); 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);

}


/*********************************************************************************************************

* 名    称 :TIM3_Configuration

* 功能描述 : 初始化定时器  PWM

* 输入参数 : none

* 返回参数 : none.

* 作    者 : 

* 修    改 :(日期、修改人名、修改原因)

* 特殊说明 : (特殊功能说明,例如:有参数检查等)

*********************************************************************************************************/

void TIM3_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

//通道1 PA7

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                    

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

//通道2 PA6

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                    

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

//通道3 PB0  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                    

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

//通道4 PB1

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                    

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

       

/* Time base configuration */

TIM_TimeBaseStructure.TIM_Period = (100- 1); //arr  设置在下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler = (40-1); //分频 psc  影响周期

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割,一般写0

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置为向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


/* PWM1 Mode configuration: Channel1*/

TIM_OCInitStructure.TIM_Pulse =0; // 初始值

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    //pwm模式1

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能通道

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平

//通道1

TIM_OC1Init(TIM3, &TIM_OCInitStructure);                   

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器

  //通道2 

TIM_OC2Init(TIM3, &TIM_OCInitStructure);                   

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器

//通道3 

TIM_OC3Init(TIM3, &TIM_OCInitStructure);                   

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器

//通道4

TIM_OC4Init(TIM3, &TIM_OCInitStructure);                   

TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器

TIM_Cmd(TIM3, ENABLE); /* 使能 */

}


main.c


#include

#include  


extern void  BSP_Init (void);


/*********************************************************************************************************

* 名    称 :main

* 功能描述 : 初始化STM32

* 输入参数 : none

* 返回参数 : none.

* 作    者 : 

* 修    改 :(日期、修改人名、修改原因)

* 特殊说明 : (特殊功能说明,例如:有参数检查等)

*********************************************************************************************************/ 

int main(void)

{

int  n1,n2,n3,n4;

int i;

n1=100;

n2=100;

n3=100;

n4=100;

BSP_Init();

while(1)

{     

for(i=0;i<100;i++)

{

  TIM_SetCompare1(TIM3,i);

  TIM_SetCompare2(TIM3,i);

  TIM_SetCompare3(TIM3,i);

  TIM_SetCompare4(TIM3,i);

delay_ms(19);

}

for(i=100;i>=0;i--)

{

  TIM_SetCompare1(TIM3,i);

  TIM_SetCompare2(TIM3,i);

  TIM_SetCompare3(TIM3,i);

  TIM_SetCompare4(TIM3,i);

delay_ms(19);

}

delay_ms(300);

}

}


2、正弦函数呼吸灯

bsp.c


#include


void RCC_Configuration(void); /* 初始化系统时钟 */

void TIM3_Configuration(void); /* PWM配置 */


void  BSP_Init (void)

{

RCC_Configuration(); /* 初始化系统时钟 */

TIM3_Configuration(); /* PWM配置 */

}

/*********************************************************************************************************

* 名    称 :RCC_Configuration

* 功能描述 : 初始化系统时钟

* 输入参数 : none

* 返回参数 : none.

* 作    者 : 

* 修    改 :(日期、修改人名、修改原因)

* 特殊说明 : (特殊功能说明,例如:有参数检查等)

*********************************************************************************************************/

void RCC_Configuration(void)

{

SystemInit(); 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);

}


/*********************************************************************************************************

* 名    称 :TIM3_Configuration

* 功能描述 : 初始化定时器  PWM

* 输入参数 : none

* 返回参数 : none.

* 作    者 : 

* 修    改 :(日期、修改人名、修改原因)

* 特殊说明 : (特殊功能说明,例如:有参数检查等)

*********************************************************************************************************/

void TIM3_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

//通道1 PA7

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                    

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

//通道2 PA6

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                    

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

//通道3 PB0  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                    

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

//通道4 PB1

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                    

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

       

/* Time base configuration */

TIM_TimeBaseStructure.TIM_Period = (100- 1); //arr  设置在下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler = (40-1); //分频 psc  影响周期

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割,一般写0

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置为向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


/* PWM1 Mode configuration: Channel1*/

TIM_OCInitStructure.TIM_Pulse =0; // 初始值

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    //pwm模式1

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能通道

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平

//通道1

TIM_OC1Init(TIM3, &TIM_OCInitStructure);                   

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器

  //通道2 

TIM_OC2Init(TIM3, &TIM_OCInitStructure);                   

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器

//通道3 

TIM_OC3Init(TIM3, &TIM_OCInitStructure);                   

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器

//通道4

TIM_OC4Init(TIM3, &TIM_OCInitStructure);                   

TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器

TIM_Cmd(TIM3, ENABLE); /* 使能 */

}


main.c


#include

#include  

#include

extern void  BSP_Init (void);


/*********************************************************************************************************

* 名    称 :main

* 功能描述 : 初始化STM32

* 输入参数 : none

* 返回参数 : none.

* 作    者 : 

* 修    改 :(日期、修改人名、修改原因)

* 特殊说明 : (特殊功能说明,例如:有参数检查等)

*********************************************************************************************************/ 

int main(void)

{

int  n1,n2,n3,n4;

int i;

n1=100;

n2=100;

n3=100;

n4=100;

BSP_Init();

while(1)

{     

for(i=0;i<314;i++)

{

  TIM_SetCompare1(TIM3,100*sin(i/100.0));

  TIM_SetCompare2(TIM3,100*sin(i/100.0));

  TIM_SetCompare3(TIM3,100*sin(i/100.0));

  TIM_SetCompare4(TIM3,100*sin(i/100.0));

delay_ms(10);

}

for(i=314;i>=0;i--)

{

  TIM_SetCompare1(TIM3,100*sin(i/100.0));

  TIM_SetCompare2(TIM3,100*sin(i/100.0));

  TIM_SetCompare3(TIM3,100*sin(i/100.0));

  TIM_SetCompare4(TIM3,100*sin(i/100.0));

[1] [2]
关键字:STM32F103  PWM  呼吸灯 引用地址:基于STM32F103 PWM呼吸灯设计

上一篇:stm32 pwm波 输出的对应通道
下一篇:stm32之定时器运用———呼吸灯

推荐阅读最新更新时间:2024-11-23 12:15

atmega8 例程:T1定时器 快速PWM
/* * 函数库说明:ATMEGE8 T1定时器 快速PWM * 版本: v1.0 * 修改: 庞辉 * 修改日期: 2011年08月11日 * * 说明: OC1A 20khz 50%占空比 * OC1B 10khz 33%占空比 * 且在溢出中断中频率不断改变 * * 版本更新: * *注意:快速PWM模式 WGM1=5,6,7,14,15 *
[单片机]
基于STM32F103的语音识别汽车空调控制系统设计
引言 现在汽车上使用的电器越来越多,驾驶员需要手动操作的电器开关也越来越多,不但增加了驾驶员的负担,还影响了行车安全。本文以STM32F103VET6(以下简称STM32)芯片为控制核心,采用高性能LD3320语音识别芯片,设计基于语音识别的汽车空调控制系统。该系统可以用语音有效控制汽车空调,减轻了驾驶员的操作负担,保证行车过程中的安全。 1 系统硬件设计 运用语音识别技术,结合各种传感器对车身内外的环境(如气温、阳光强度等)以及制冷压缩机的状态等多种参数进行实时检测,与设定参数相比较,微控制器经过运算处理做出判断,输出相应的调节和控制信号。执行机构经过实时调整和修正,实现对车厢内空气环境全方位、多功能的调节和控制。系统的执行
[单片机]
基于<font color='red'>STM32F103</font>的语音识别汽车空调控制系统设计
MSP430电容触摸转轮和LED PWM输出设计
简介 电容触摸技术作为一种实用、时尚的人机交互方式,已经被广泛的应用到各种电子产品,小到电灯开关,大到平板电脑、触摸桌等。随之而来的是考验产品设计者如何发挥智慧,在把产品用户界面设计得方便简洁的同时,又能呈现产品绚丽的外观,从而带来良好的用户体验。 LED 显示由于界面友好,可以实时反映触摸的位置信息,在电容触摸产品设计中得到广泛应用。本设计正是利用了大量的LED 来实现呼吸灯、轨迹灯的特效,可以为例如灯光、音量、温度等带有调节功能的产品提供设计参考。 德州仪器 的MSP430 系列单片机以低功耗和外设模块的丰富性而著称,而针对电容触摸应用,MSP430 的PIN RO 电容触摸检测方式支持IO 口直接连接检测电极,不需要任
[电源管理]
MSP430电容触摸转轮和LED <font color='red'>PWM</font>输出设计
STM32F103程序设计-1-STM32开发环境的建立
STM32开发环境的建立需要使用的软件有两个,一个是编写单片机程序的软件Keil MDK,另一个是串口下载程序时要使用的软件MCUISP。如果使用仿真器下载程序的话则需要安装仿真器的驱动程序,这个在以后的课程中将进行讲解。下面先看一下孟老师给大家的相关软件如下图所示。 其中mdk_513.exe为Keil MDK的安装包,该软件的安装一路点击Next,直到最后看到Finish安装结束。安装结束后打开软件,软件界面如下图所示。 点击上图中的按钮将弹出一个安装各种型号单片机所需包的界面,如下图所示。 Keil5与之前版本不同的是要单独安装你所使用单片机的相应安装包。如果在线联网不成功,有很大的可能是软件没能连到相关网站上,
[单片机]
<font color='red'>STM32F103</font>程序设计-1-STM32开发环境的建立
STM32F103 PB口用作独立按键
前一段时间由于项目需要画了一个STM32F103的最小系统板,项目中需要很多硬件资源于是我将PB口作为独立按键输入口,板子打样回来后测试其他一切都还不错但在独立按键测试时出现了问题,测试时采用的是扫描方式,按键支持连续喝不连续两种方式,出现以下问题: 1、单次按键时没有任何反应 2、连续模式下PB3口控制下的LED一直闪烁,其他按键触发也不正常。 今天突然想起来解决这个问题,于是百度了许久才发现PB3与JTAG复用,于是关闭JTAG后解决了问题,现在和大家分享下希望对大家有用。 独立按键扫描方式程序如下(使用PB口关闭JTAG用红色字体标记): #ifndef __key_H #define __key_H #include
[单片机]
基于SE3910的高性能隔离式AC/DC电源解决方案
目前,在100W以下电源方案中,一般都使用脉冲宽度调制(PWM)控制芯片来实现PWM的调制,开关控制模式相对直流工作模式有很高的工作效率,使用反激离线工作模式,提高了系统工作的安全性,非常适合应用在便携式充电设备及电源适配器,比如,手机充电器,电源适配器等,因此,AC/DC PWM开关电源芯片在市场上的需求量非常大。不过传统的AC/DC电源方案都是使用变压器次级线圈反馈模式(SSR),变压器次级反馈工作模式都需要低压端的恒压-恒流控制芯片协助完成电压的转换和实现恒流,此类应用方案增加了系统应用复杂程度,同时还增加系统方案的设计成本,本文要介绍的AC/DC电源控制芯片是思旺电子的SE3910,这是一款变压器原边线圈反馈模式(PS
[电源管理]
基于PWM降压转换器AP3003的车载充电器
随着电子技术的不断发展,移动多媒体设备正逐渐成为人们生活中不可缺少的工具,与这些产品相对应的充电器设计也越来越受到关注。按照充电器的使用场合,可以分成家用型充电器和车载充电器,一般手机自带的充电器多数是家用型,即交流输入型;车载充电器是一种直流输入型的充电器,它的出现使移动设备的充电场合更加多样化。很多公司都生产了可实现车载充电器方案的控制芯片,比如BCD公司的AZ34063A/C、AZ494B/D和AP3003等。 AZ34063A/C方案的优点是成本较低,缺点是限流点不准确,过热问题较为普遍;AZ494B/D方案的优点是设计灵活性较强,缺点是外围器件选择较复杂,需要选择合适的功率管、驱动电路,同时需要进行环
[汽车电子]
基于<font color='red'>PWM</font>降压转换器AP3003的车载充电器
STM32的PWM输出及频率和脉宽(占空比)的计算
一、stm32的pwm输出引脚是使用的IO口的复用功能。 二、T2~T5这4个通用定时器均可输出4路PWM CH1~CH4。 三、我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并在最后给出tim3的ch1和ch2两路pwm输出的c代码(已在STM32F103RBT6上测试成功,大家放心使用!)。 四、给出了PWM频率和占空比的计算公式。 步骤如下: 1、使能TIM3时钟 RCC- APB1ENR |= 1 1; 2、配置对应引脚(PA6)的复用输出功能 GPIOA- CRL &= 0XF0FFFFFF;//PA6清0 GPIOA- CRL |= 0X0B000000;//复用功能输出(推挽
[单片机]

推荐帖子

MSP430FR2433外设参考驱动代码
MSP430FR2433外设参考驱动代码是外设参考驱动的测试代码
江长活 微控制器 MCU
ESP8266wifi模块AT指令测试显示可以接收信号但是不能返回信息怎么回事
如题ESP8266wifi模块AT指令测试显示可以接收信号但是不能返回信息怎么回事首先确认波特率对不对,引脚上下拉对不对。我记得以前用着模块也不行,好像刷了下固件就可以了主要保证你的硬件保证没有问题,切记,ESP8266工作时峰值电流五百多ma1,上电电流要保证。几百MA。(刚上电一下)如故正确,板子没问题灯会闪几下。2,TX,RX要接正确。保证串口正常。3,先要敲AT这个命令。后面就可以敲AT+。。。注意AT指令都要带回车的。
zhangchenhui 瑞萨电子MCU
鉴别真代理、假代理的方法
看它的业务介绍,如果说同时代理几家相互竞争的产品的,肯定是假的。如网上说什么代理EMC,SONIX,十速等等的,100%是假的。鉴别真代理、假代理的方法真?假?真真假假???待试
gina 单片机
电源变压器
请问这种普通电源变压器,带负载时表面温度一般控制在多少摄氏度℃比较合适?网上购买这种电源变压器,都说足功率足功率,不知道有什么方法来判断变压器是否真的足功率呢?电源变压器“这种普通电源变压器,带负载时表面温度一般控制在多少摄氏度℃比较合适?”粗略判断,你的手可以较长时间(例如半分钟到一分钟)按在变压器铁芯表面。功率够不够的判断依据是在温升有限(如楼上maychang说的那样,手可以勉强耐受)的前提下,输出电压幅值和空载比下降不多,满足标称。另一个检验办法是反着来,按标称给负载,至少
wswddwsw 电源技术
脉宽调制(PWM)的基本原理及其应用实例(转)
本帖最后由paulhyde于2014-9-1509:30编辑关键字:PWMPIC16C67制动器DSP微控制器脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。模拟电路模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定
马子007 电子竞赛
驱动钛丝(SMA)的可靠性设计(2) 不同厂家生产的钛丝有什么区别
前言形状记忆合金(Shapememoryalloy,SMA),也叫形态记忆合金、镍钛记忆合金,它是由TI(钛)-IN(镍)材料组成,这里我们方便描述,简称钛丝或者驱动钛丝。第2节不同厂家生产的钛丝有什么区别目前全球的钛丝生产厂家,同样规格的钛丝特性都不同,选择合适自己产品的钛丝至关重要,我们需要检测和验证不同厂家的钛丝,能否满足自己产品的需求。下面我们从3个维度简单地讲一讲。1、先说下驱动钛丝的温度指标,分别是相变温度、相变温度偏差值、环境适应温度。
272151979 综合技术交流
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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