历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2020年01月30日 | STM32之timer3产生PWM

2020-01-30 来源:eefocus

一、简介


本文介绍STM32系列如何使用timer3的第3通道(PB0)产生38K频率的PWM。


二、实验平台


库版本:STM32F10x_StdPeriph_Lib_V3.5.0


编译软件:MDK4.53


硬件平台:STM32开发板(主芯片stm32f103c8t6)


仿真器:JLINK


三、版权声明


四、实验前提

1、在进行本文步骤前,请先阅读以下博文:

暂无


2、在进行本文步骤前,请先实现以下博文:

暂无


五、基础知识


暂无


六、实验步骤


1、编写并添加PWM驱动


1)编写驱动GUA_Timer3_PWM.c(存放在“……HARDWARE”)


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

//name:             GUA_Timer3_PWM.c               

//introduce:        定时器3的PWM驱动        

//author:           甜甜的大香瓜                     

//email:            897503845@qq.com         

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2017.01.14      

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

#include "stm32f10x.h" 

#include "GUA_Timer3_PWM.h"  

  

/*********************宏定义************************/    

//引脚宏  

#define GUA_TIMER3_PWM_PORT             GPIOB  

#define GUA_TIMER3_PWM_PIN              GPIO_Pin_0  

#define GUA_TIMER3_PWM_MODE             GPIO_Mode_AF_PP 

#define GUA_TIMER3_PWM_GPIO_CLOCK RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO 

#define GUA_TIMER3_PWM_PERIPH_CLOCK RCC_APB1Periph_TIM3  

 

//计数值  

#define GUA_TIMER3_PWM_PERIOD (72 - 1)  

 

/*********************内部函数声明************************/   

static void GUA_Timer3_PWM_IO_Init(void);

static void GUA_Timer3_PWM_Config_Init(GUA_U16 nGUA_Timer3_PWM_Prescaler);

 

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

//name:             GUA_Timer3_PWM_IO_Init             

//introduce:        定时器3的PWM的IO初始化           

//parameter:        none                   

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2017.01.14                        

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

static void GUA_Timer3_PWM_IO_Init(void)  

{      

//IO结构体  

GPIO_InitTypeDef GPIO_InitStructure;  

 

//时钟配置 

RCC_APB2PeriphClockCmd(GUA_TIMER3_PWM_GPIO_CLOCK, ENABLE);

 

//IO初始化

GPIO_InitStructure.GPIO_Pin = GUA_TIMER3_PWM_PIN;

GPIO_InitStructure.GPIO_Mode = GUA_TIMER3_PWM_MODE;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GUA_TIMER3_PWM_PORT, &GPIO_InitStructure);

}

 

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

//name:             GUA_Timer3_PWM_Config_Init             

//introduce:        定时器3的PWM的配置初始化           

//parameter:        nGUA_Timer3_PWM_Prescaler:预分频数值,如100则表示1000000/100=10000Hz 

//return:           none           

//author:           甜甜的大香瓜                   

//email:            897503845@qq.com       

//QQ group          香瓜单片机之STM8/STM32(164311667)                    

//changetime:       2017.01.14                        

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

static void GUA_Timer3_PWM_Config_Init(GUA_U16 nGUA_Timer3_PWM_Prescaler)  

{      

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  

TIM_OCInitTypeDef  TIM_OCInitStructure;  

  

//时钟配置

RCC_APB1PeriphClockCmd(GUA_TIMER3_PWM_PERIPH_CLOCK, ENABLE);  

//定时器配置

TIM_TimeBaseStructure.TIM_Period = GUA_TIMER3_PWM_PERIOD; //设置计数值  

TIM_TimeBaseStructure.TIM_Prescaler = nGUA_Timer3_PWM_Prescaler - 1; //设置预分频 

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分频系数:不分频  

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

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  

//PWM配置

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置为PWM模式1(小于计数值时为有效电平)  

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

TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值  

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //有效电平为低电平  

TIM_OC3Init(TIM3, &TIM_OCInitStructure); //使能通道3      

 

//默认关闭PWM

GUA_Timer3_PWM_Status(GUA_TIMER3_PWM_STATUS_OFF);

//使能

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //CH3预装载使能  

TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIM3重载寄存器ARR 

TIM_Cmd(TIM3, ENABLE); //使能定时器3  

}

 

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

//name:             GUA_Timer3_PWM_Status          

//introduce:        定时器3的PWM开关      

//parameter:        nGUA_Timer3_PWM_Status: GUA_TIMER3_PWM_STATUS_ON or GUA_TIMER3_PWM_STATUS_OFF        

//return:           none        

//author:           甜甜的大香瓜               

//email:            897503845@qq.com                  

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2017.01.14                        

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

void GUA_Timer3_PWM_Status(GUA_U8 nGUA_Timer3_PWM_Status)  

{  

  //打开PWM  

  if(nGUA_Timer3_PWM_Status == GUA_TIMER3_PWM_STATUS_ON)  

  {   

TIM_SetCounter(TIM3, 0);

TIM_CCxCmd(TIM3, TIM_Channel_3, TIM_CCx_Enable);

  }  

  //关闭PWM

  else  

  {  

TIM_CCxCmd(TIM3, TIM_Channel_3, TIM_CCx_Disable);

  }  

}  

  

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

//name:             GUA_Timer3_PWM_SetDutyCycle          

//introduce:        定时器3的PWM设置占空比      

//parameter:        nGUA_Timer3_PWM_DutyCycle: 0~100为0%~100%        

//return:           none        

//author:           甜甜的大香瓜               

//email:            897503845@qq.com                  

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2017.01.14                         

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

void GUA_Timer3_PWM_SetDutyCycle(GUA_U8 nGUA_Timer3_PWM_DutyCycle)  

{  

  TIM_SetCompare3(TIM3, GUA_TIMER3_PWM_PERIOD*nGUA_Timer3_PWM_DutyCycle/100);   

}  

  

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

//name:             GUA_Timer3_PWM_Init          

//introduce:        定时器3的PWM初始化       

//parameter:        nGUA_Timer3_PWM_Prescaler:预分频数值,如100则表示1000000/100=10000Hz        

//return:           none        

//author:           甜甜的大香瓜               

上一篇:STM32之限位开关

下一篇:STM32之SWD

推荐阅读

史海拾趣

Apex [Apex Microtechnology]公司的发展小趣事

在作为Cirrus Logic分公司运营了五年后,Apex Microtechnology于2012年重新回归独立私营状态。这次变革使得Apex Microtechnology能够更加灵活地应对市场变化,加速产品创新和研发。同时,公司也扩大了其业务范围,进一步巩固了在电子行业的地位。

ebm-papst公司的发展小趣事

在巩固欧洲市场的基础上,ebm-papst不断拓展全球市场,特别是亚洲市场。近年来,公司在亚洲市场的营收增长率一直保持在较高水平。为了进一步拓展亚洲市场,ebm-papst加大了在中国的产能建设,陆续在上海、西安等地进行扩建和新建产能。这些措施使得ebm-papst能够更好地满足亚洲市场的需求,并为其在全球市场的进一步发展奠定了坚实基础。

B&F Fastener Supply公司的发展小趣事

随着电子产品的日益小型化和复杂化,对紧固件的要求也越来越高。B&F Fastener Supply公司紧跟行业趋势,投入大量资源进行技术创新。公司成功研发出一系列适用于微型电子设备的紧固件产品,不仅满足了市场的迫切需求,还凭借出色的性能和稳定的品质赢得了客户的广泛认可。

Chenmoun Enterprise Ltd公司的发展小趣事

随着公司业务的不断扩张,Chenmoun Enterprise Ltd开始实施全球化战略布局。公司在全球范围内设立了研发中心和生产基地,充分利用各地的资源优势和人才优势,提升产品的竞争力。同时,公司积极开拓国际市场,与多家国际知名企业建立了紧密的合作关系,实现了业务的快速增长。

Bce Sud公司的发展小趣事

面对市场的不断变化和消费者需求的日益多样化,Bce Sud始终坚持创新驱动的发展理念。公司不断推出新产品,从半导体芯片拓展到传感器、集成电路等领域,产品线日益丰富。这些创新产品不仅提升了公司的市场竞争力,也为消费者带来了更多选择。

Honeywell公司的发展小趣事

背景:近年来,随着全球对可持续发展和数字化转型的重视,霍尼韦尔积极调整战略方向。

发展:公司加大了在可持续技术和数字化转型领域的投入,推出了一系列创新的产品和解决方案。例如,在能源转型领域,霍尼韦尔与多家中国合作伙伴共同推动可持续航空燃料生产基地的建设;在智慧建筑领域,与腾讯云合作打造联合解决方案等。

关键事件:这些举措不仅体现了霍尼韦尔对可持续发展的承诺和责任担当,也展示了公司在数字化转型方面的前瞻性和创新能力。同时,这些合作也进一步巩固了霍尼韦尔在全球电子行业的领先地位。

问答坊 | AI 解惑

在Keil C51 uVision3 中调试w77E58如何设置才能使用片上的1K外部存贮器呀?

伟福V8仿真调试Winbond77E58不能正常使用片上1K外部存贮器的问题: 我用伟福V8/L仿真调试Winbond77E58板子, W77E58有片上1K外部存贮器,我不知是我的编译环境设置不对, 还是伟福不能仿真片上1K外部存贮器?在下面的程序中,将 int xdata i ...…

查看全部问答>

嵌入式程序运行时,硬件CPU空闲多少算正常状态?

嵌入式程序运行时,硬件CPU空闲多少算正常状态? ppc MPC8541 VxWorks…

查看全部问答>

ucosII上开发pdf查看应用程序

想在ucosII上开发一款pdf查看程序(平台君正 Xburst MIPS jz4740),现有Foxit Embedded PDF SDK可惜不免费!!!!!!!!! 总不能从头开发吧,难度太了点吧!!可有免费的库!!!推荐一个!!…

查看全部问答>

VS2005 调试问题

vs2005 编译发布成功,但弹出“unable to start debugging”这个问题怎么解决呢?先感谢各位回帖者,谢谢…

查看全部问答>

应届毕业生如何进军华为?

应届毕业生如何进军华为? 有没有在华为工作的前辈? 请指点指点,万分感谢!!!!…

查看全部问答>

【求助】74HC165的操作,只能控制一个按键,其他的控制不了,搞不明白

#define PL P2_3//SHIFT/LOAD引脚 #define CLOCK P2_4 #define SETBSC P2_5//OUTPUT QH引脚 read74hc165m() {uchar basic,c; PL=1; nop(); PL=0;//使能端为低电平时8位数据进入寄存器 nop(); PL=1;//高电平数据锁存,同时165数据自动 ...…

查看全部问答>

申请LM3S8962

三 书包小帮手  它的功能简单,却有很大的用处。我们大学生常常忘记星期几上什么课,几点上,教室在哪儿,老师的名字,电话等。它就像一个学习小管家,功能简单,外形小巧,可以放进书包上的挂饰,娃娃等,它采用防水功能。 它有个显示 ...…

查看全部问答>

万利EK-STM32F改了板子,资料怎么还是老的?

刚刚收到货,是两颗STM32芯片,ST3210-LK1 Rev.E板子和原理图根本就对不上网站上也没找到新的资料郁闷啊…

查看全部问答>

帮我看看STM32F103做RTC时的问题

我做了个RTC。。初始化时间然后查询出来都是正常的。。但是设置的时候代码如下: void RTC_WaitForLastTask(void) {   /* Loop until RTOFF flag is set */   while ((RTC->CRL & RTC_FLAG_RTOFF) == (u16)RESET) ...…

查看全部问答>