历史上的今天
返回首页

历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2019年08月22日 | stm32使用tim3输出4路pwm(khz级)

2019-08-22 来源:eefocus

tim3_pwm4.h


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

TIM3输出4路pwm,单独控制占空比

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

 

#ifndef _PWM_

#define _PWM_

 

#include "stm32f10x.h"

 

#define  CLOCK 72000

 

extern u16 arr; //预加载值

 

extern u16 psc; //分频值

 

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

* 函 数 名         :TIM3_PWM_Init(u16 arr,u16 psc)

* 函数功能     : 4路pwm初始化函数

* 输    入         : 频率,分频

频率:

//Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)

* 输    出         : 无

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

void TIM3_PWM_Init(u16 Fpwm);

 

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

* 函 数 名         :ste_pwm1_duty(u16 value)

* 函数功能     : 设置pwm占空比函数

* 输    入         : 占空比

* 输    出         : 无

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

void ste_pwm1_duty(u16 value);

 

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

* 函 数 名         :ste_pwm2_duty(u16 value)

* 函数功能     : 设置pwm占空比函数

* 输    入         : 占空比

* 输    出         : 无

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

void ste_pwm2_duty(u16 value);

 

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

* 函 数 名         :ste_pwm3_duty(u16 value)

* 函数功能     : 设置pwm占空比函数

* 输    入         : 占空比

* 输    出         : 无

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

void ste_pwm3_duty(u16 value);

 

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

* 函 数 名         :ste_pwm4_duty(u16 value)

* 函数功能     : 设置pwm占空比函数

* 输    入         : 占空比

* 输    出         : 无

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

void ste_pwm4_duty(u16 value);

 

#endif

 


tim3_pwm4.c

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

TIM3输出4路pwm,单独控制占空比

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

 

 

 

#include "tim3_pwm4.h"

 

 

 

//PWM输出初始化

//arr:自动重装值

//psc:时钟预分频数

 

 u16 arr;

 u16 psc;

 

void TIM3_PWM_Init(u16 Fpwm)

{  

         GPIO_InitTypeDef GPIO_InitStructure;

        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        TIM_OCInitTypeDef  TIM_OCInitStructure;

 

arr=CLOCK/Fpwm-1; //不分频。PWM频率=72000/(899+1)=80Khz 

psc=0;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB , ENABLE);  //使能GPIO外设时钟使能

                                                                                     

                                                                             

 

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7 ; //TIM_CH1

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

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

        GPIO_Init(GPIOA, &GPIO_InitStructure);

 

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1 ; //TIM_CH1

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

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

        GPIO_Init(GPIOB, &GPIO_InitStructure);

 

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

        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频

        TIM_TimeBaseStructure.TIM_ClockDivision =0; //设置时钟分割:TDTS = Tck_tim

        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式

        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

//TIM3通道一

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2

        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

        TIM_OCInitStructure.TIM_Pulse = 1;  /*占空长度 0 – 周期(max)*/

        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

        TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

//TIM3通道二

  TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = 1; /*占空长度 0 – 周期(max)*/

  TIM_OC2Init(TIM3, &TIM_OCInitStructure);

  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

//TIM3通道三

  TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = 1; /*占空长度 0 – 周期(max)*/

  TIM_OC3Init(TIM3, &TIM_OCInitStructure);

  TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);

//TIM3通道四

  TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = 1; /*占空长度 0 – 周期(max)*/

  TIM_OC4Init(TIM3, &TIM_OCInitStructure);

  TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

 

  TIM_CtrlPWMOutputs(TIM3,ENABLE);        //MOE 主输出使能        

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

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

}

 

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

* 函 数 名         :ste_pwm1_duty(u16 value)

* 函数功能     : 设置pwm占空比函数

* 输    入         : 占空比

* 输    出         : 无

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

void ste_pwm1_duty(u16 value)

{

TIM3->CCR1=arr-(value*arr/100);

}

 

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

* 函 数 名         :ste_pwm2_duty(u16 value)

* 函数功能     : 设置pwm占空比函数

* 输    入         : 占空比

* 输    出         : 无

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

void ste_pwm2_duty(u16 value)

{

TIM3->CCR2=arr-(value*arr/100);

}

 

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

* 函 数 名         :ste_pwm3_duty(u16 value)

* 函数功能     : 设置pwm占空比函数

* 输    入         : 占空比

* 输    出         : 无

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

void ste_pwm3_duty(u16 value)

{

TIM3->CCR3=arr-(value*arr/100);

}

 

 

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

* 函 数 名         :ste_pwm4_duty(u16 value)

* 函数功能     : 设置pwm占空比函数

* 输    入         : 占空比

* 输    出         : 无

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

void ste_pwm4_duty(u16 value)

{

TIM3->CCR4=arr-(value*arr/100);

}



推荐阅读

史海拾趣

德力西(DELIXI)公司的发展小趣事

德力西非常重视品牌建设,通过全方位的品牌建设及宣传,不断提高品牌知名度和美誉度。同时,公司也加快了国际化步伐。2007年,德力西低压电器业务迈向企业国际化的新阶段,在全国范围内进行资本大重组、产品大联合、市场大拓展和技术大提高。这些努力使德力西在国际市场上也取得了一席之地。

HEIMANN公司的发展小趣事

1984年,胡成中偕其弟胡成国等人在浙江省乐清市创立了“乐清县求精开关厂”,这便是德力西的前身。当时,企业仅有3位股东,5万元的资本,8名员工,以及单一的热继电器产品。凭借“以质取胜”的经营理念和灵活的机制,德力西在温州市电器行业中逐渐崭露头角。

CAROLCABLE公司的发展小趣事

CAROLCABLE公司的创立,标志着电子线缆行业迎来了一位新的竞争者。在电子科技飞速发展的时代背景下,创始人凭借对线缆技术的深刻理解和市场需求的敏锐洞察,决定创立CAROLCABLE公司。公司初期,面临着资金短缺、技术瓶颈和市场认知度低等多重挑战。然而,创始人凭借着坚定的信念和不懈的努力,带领团队克服了一个又一个困难。他们积极研发新产品,优化生产工艺,提高产品质量,逐渐在市场上站稳了脚跟。

随着公司业务的不断拓展,CAROLCABLE开始与一些知名的电子企业建立合作关系,为其提供高质量的线缆产品。这些合作不仅为公司带来了稳定的订单和收入,也进一步提升了CAROLCABLE在行业内的知名度和影响力。

淩志比高公司的发展小趣事

为了进一步提升公司的知名度和影响力,淩志比高开始注重品牌建设和市场推广。公司积极参与行业展会、举办产品发布会等活动,与客户和合作伙伴建立了紧密的联系。同时,淩志比高还通过广告宣传、社交媒体营销等方式,提升了品牌知名度和美誉度。

Dfx公司的发展小趣事

随着智能家居市场的不断发展,某智能家居企业面临着如何将各种智能设备无缝连接、实现高效协同的挑战。通过引入DFX的设计理念,该企业成功实现了智能家居产品的标准化、模块化和可扩展性设计。这种设计方式使得不同设备之间可以方便地进行连接和通信,提高了系统的整体性能和用户体验。同时,该企业还通过优化生产流程和加强质量控制等手段,确保了产品的稳定性和可靠性。

这些故事虽然基于虚构的情境,但融入了电子行业中常见的实际问题和发展趋势。通过引入DFX的设计理念,这些企业成功解决了面临的挑战,提升了产品竞争力并赢得了市场的认可。

Flamar公司的发展小趣事

Flamar公司自成立以来,始终将技术创新视为企业发展的核心驱动力。在电子元件领域,公司研发团队成功开发出一种新型高性能磁耦合传送臂,这一创新产品凭借其高效、稳定的传输性能,在半导体设备制造中迅速获得市场认可。通过不断的技术迭代和优化,Flamar公司的磁耦合传送臂逐渐成为行业内的标杆产品,帮助公司在激烈的市场竞争中脱颖而出。

问答坊 | AI 解惑

uc_os2 for arm详解

郁闷,发点资料,uc_os2 for arm详解…

查看全部问答>

万用表使用技巧

一、指针表和数字表的选用:   1、指针表读取精度较差,但指针摆动的过程比较直观,其摆动速度幅度有时也能比较客观地反映了被测量的大小(比如测电视机数据总线(SDL)在传送数据时的轻微抖动);数字表读数直观,但数字变化的过程看起来很杂乱 ...…

查看全部问答>

adsv1.2 for arm 新建工程出现问题?望大侠帮帮忙

有哪位大侠知道下面的问题,请帮忙解答,本人不胜感激。 我用adsv1.2新建了一个工程文件然后make出现一个错误提示“error:All50E:Bad symbol  start.s line 635 ”。这里声明一下:创建工程时我添加的文件是fs2410用户光盘里的s3c2410_b ...…

查看全部问答>

请问如何修改Wince的开机界面,改成和手机的功能菜单一样,要怎么办?

请问如何修改Wince的开机界面,改成和手机的功能菜单一样,要怎么办?…

查看全部问答>

底薪 + 提成 + 分红 请Linux Wince 软硬件合作高手

行业PDA研发、销售 ARM7 ARM9 ARM11硬件平台 WINCE LINUX软件平台 QQ:1459635026 …

查看全部问答>

新手询问一下有关ARM的开发问题

想了解一下这个行业,但有很多问题不懂,想请教一下大家 1.为什么搞ARM需要一块什么开发板啊?是不是为了测试用呢?那我有一个ARM的游戏机(NDSL),不知道能不能用来测试呢? 2.我想在ARM游戏机上安装WinCE或Linux,不知道怎么安装? 3.ARM仿真 ...…

查看全部问答>

【已关闭】【征询贴】3.5寸TFT触摸屏

1.团长备案号:个人001 2.品牌:信利(全新原装) 26万色 3.团购价格:数量50-100个:38元,100-200个:35元,200个以上30元 4.预计团购发起日期:2011.2.28 5.预计团购结束日期:2011.3.15 6.报名方式:跟帖报名 [ 本帖最后由 wanghongyang ...…

查看全部问答>

arv32 ad转换连续采样模式

我用avr 32 进行ad采样,采用pa0口,设置为连续采样模式,但是每次采样的时候都只能显示第一次采样的结果,貌似联系的设置都没有效果呀,哪位大虾帮忙看看吧,谢谢哈,代码如下:void adc0_init(void) {//ADCSR = 0x00;   //disable adcA ...…

查看全部问答>

TI 电源设计小贴士39

欢迎来到电源设计小贴士!随着现在对更高效、更低成本电源解决方案需求的强调,我们创建了该专栏,就各种电源管理课题提出一些对您有帮助的小技巧。该专栏面向各级设计工程师。无论您是从事电源业务多年还是刚刚步入电源领域,您都可以在这里找到 ...…

查看全部问答>