历史上的今天
返回首页

历史上的今天

今天是:2024年09月03日(星期二)

正在发生

2019年09月03日 | STM32应用简章之PWM输出

2019-09-03 来源:eefocus

① 使能定时器3和相关IO口时钟。


         使能定时器3时钟:RCC_APB1PeriphClockCmd();


         使能GPIOB时钟:RCC_APB2PeriphClockCmd();


②     初始化IO口为复用功能输出。函数:GPIO_Init();


        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      


③这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置,


       所以需要开启AFIO时钟。同时设置重映射。


        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);


        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);


④    初始化定时器:ARR,PSC等:TIM_TimeBaseInit();


⑤    初始化输出比较参数:TIM_OC2Init();


⑥   使能预装载寄存器: TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);


⑦   使能定时器。T


void TIM3_PWM_Init(u16 arr,u16 psc)

{  

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

TIM_OCInitTypeDef  TIM_OCInitStructure;

 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5    

 

   //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.5

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2

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

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

 

   //初始化TIM3

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

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 Channel2 PWM模式  

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

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

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

TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2

 

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器

 

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

 

}

IM_Cmd();


⑧   不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2();


推荐阅读

史海拾趣

问答坊 | AI 解惑

wince如何接入局域网(急)

我用C#编写的。。wince要接入局域网,代码怎么写啊。。还有,如果接入局域网后,怎么样能访问指定服务器的共享文件啊。。谢谢 …

查看全部问答>

试用报告3-关于人脸识别的一些总结

经过这些天的查找资料,基本上人脸识别的算法都搞清了。。。下面简述一下各种算法: (1) FPGA硬件选型采用Xilinx公司的Vertex芯片。该单元由视频采集模块、异步FIFO模块、视频解码模块、I2C 配置接口模块、图像帧存控制模块、图像低级处理模块、通 ...…

查看全部问答>

大家好 我是新手上路 有点问题需要各位前辈的指点

我用的是Quartus11.0版本,它本身不带仿真,在调用Modelsim时,只能进行Gata level级仿真,而不能进行RTL级的仿真,晚辈很是纳闷,这是怎么回事 麻烦各位了…

查看全部问答>

关于TI无线芯片的工作电压

CC1101、CC2530都写的最大电压3.9V,工作电压为1.8(2.0)~3.6V。 那么如果电压时3.7V,是否能稳定工作?芯片有没有损坏的危险?还是芯片不会坏,单片机有故障等危险? 因为设计需要使用3.7V电池。实际回路中约3.67V。超过3.6V,故有此提问。请大家 ...…

查看全部问答>

S3C6410开发板转手

本人现有一块S3c6410开发板,有意需要者,可qq联系我941012879,有淘宝链接,和该板一摸一样http://item.taobao.com/item.htm?spm=a230r.1.10.91&id=9549882820…

查看全部问答>

TM1804 DEMO

流水燈LED還是要多棵一點,比較有感覺,所以再加一串上去一共14個led,TM1804是可以直接联級擴充的,MCU是用1T的51晶振12Mhz ,實物照:影片如下$(\'swf_fl7\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworkin ...…

查看全部问答>

EE Logic 基本参数及核心芯片

分析仪基本参数 1、采样率100MHz 2、采样通道16 3、存储容量(待定) 4、存储深度(待定) 5、测量范围0-5V 6、支持协议(有待开发) 核心芯片选择 1、USB接口芯片(CY7C68013A-100AXC)16位FIFO接口。 2、FPGA (EP2C5Q208C8N orEP2C8Q20 ...…

查看全部问答>

关于两片msp430g2553怎么使用同一个时钟的问题

本帖最后由 paulhyde 于 2014-9-15 03:09 编辑 如题,最近在做一个用示波器显示8个递减圆的题目,利用示波器的X-Y去显示,编程都编号的,但实际调试的时候发现两个单片机时钟不能同步,请问有什么办法可以使两片单片机使用同一个时钟啊? &nb ...…

查看全部问答>

关于protel99se在制作原理图时添加元件的问题

关于protel99se在制作原理图时添加元件时,老是添加不进去,并且显示File is not recognized 在网上搜一下,大家说这款软件不适合win7的。另外也有解决办法。 如下改可行:TypeCount=2Count=2File0=d:\\Program Files\\Design Explorer 99 SE\\Li ...…

查看全部问答>

利用MSP430定时器A输出三路PWM波

因为是刚学所以很多不刷洗的地方,现在让利用MSP430定时器A输出三路PWM波,之前用中断实现了,现在要求不能用中断,跪求各位大神们,怎么样才能在不用中断的情况下完成MSP430定时器A输出三路PWM波的要求啊,跪求!!! …

查看全部问答>