历史上的今天
今天是:2025年01月15日(星期三)
2019年01月15日 | stm32 定时器3产生指定数量的脉冲
2019-01-15 来源:eefocus
一、场景描述:利用PB5产生一定数量的脉冲信号。PB5是定时器3的第2通道。
二、产生PWM代码:
void Timer3_Configuration(void )
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_DeInit(TIM3);
// ƵÂÊ30K
//Õ¼¿Õ±È50%
// TIM_TimeBaseStructure.TIM_Period = 100-1;
//TIM_TimeBaseStructure.TIM_Prescaler =24-1;
// ƵÂÊ20K
//Õ¼¿Õ±È50%
// TIM_TimeBaseStructure.TIM_Period = 100-1;
//TIM_TimeBaseStructure.TIM_Prescaler =36-1;
// ƵÂÊ10K
//Õ¼¿Õ±È50%
// TIM_TimeBaseStructure.TIM_Period = 100-1;
// TIM_TimeBaseStructure.TIM_Prescaler =72-1;
// ƵÂÊK
//Õ¼¿Õ±È50%
TIM_TimeBaseStructure.TIM_Period = 300-1;
TIM_TimeBaseStructure.TIM_Prescaler =72-1;
// ƵÂÊ1K
//Õ¼¿Õ±È10%
//TIM_TimeBaseStructure.TIM_Period = 1000-1;
//TIM_TimeBaseStructure.TIM_Prescaler =72-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
//ʱÖÓ·ÖÆµ
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
//TIMÏòÉϼÆÊý
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIM3,TIM_FLAG_Update);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
//PWM1λÕý³£Õ¼¿Õ±Èģʽ£¬pwm2Ϊ·´¼«ÐÔģʽ
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
//ʹÄÜÊä³ö
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
//»¥²¹Êä³ö¹¦ÄܽûÖ¹
TIM_OCInitStructure.TIM_Pulse = 30;
//Õ¼¿Õʱ¼ä
TIM_OC2Init(TIM3,&TIM_OCInitStructure); //ͨµÀ2
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
// TIM_CtrlPWMOutputs(TIM3,ENABLE);
TIM_ARRPreloadConfig(TIM3, ENABLE);
//ʹÄÜTIMxÔÚARRPÉϵÄÔ¤×°ÔØ¼Ä´æÆ÷
//TIM_Cmd(TIM3, ENABLE);
TIM_Cmd(TIM3, DISABLE);
//ʹÄÜTIM3
}
三、引脚初始化

可以看出来,PB5复用功能是I2C的功能,需要进行重映射。
GPIO_InitStructure .GPIO_Pin=GPIO_Pin_8 ;
GPIO_InitStructure .GPIO_Speed =GPIO_Speed_10MHz;
GPIO_InitStructure .GPIO_Mode =GPIO_Mode_Out_PP ;//
GPIO_Init (GPIOB ,&GPIO_InitStructure );
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
四、脉冲计数
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus (TIM3 ,TIM_IT_Update )!=RESET )
{
MD_Pulse_Cnt++;
}
TIM_ClearITPendingBit(TIM3 ,TIM_IT_Update );
}
void main()
{
if(MD_Pulse_Cnt>500)
TIM_Cmd(TIM3,DISABLE);
}
五、总体思路。
在定时器初始化中打开中断,然后在中断里进行脉冲计数。
下一篇:LPC11C14 启动代码分析
史海拾趣
|
未来数字生活想实现,Windows Embedded缺不了! 近年来,信息家电、数码产品、智能手机及各种掌上型多媒体设备成为IT产业的潮流,除了以上所提到的电子产品以外,其实有更多的嵌入式应用隐身在不为人知的角落,从小到电子手表、电子体温计、翻译机等,到大如冷气机、电冰箱、电视机,甚至是路上 ...… 查看全部问答> |
|
几天前LED3216点阵屏控制板完工(见LED3216点阵屏控制板【图】),一有硬件就迫不及待地尝试写了这个电子钟的程序,很惭愧,移花接木随便搞了下,马上就要回家了,没时间弄了。因为只想搞出现象来,导致程序结构混乱,不具有代表性,升级也困难。以 ...… 查看全部问答> |
|
这是我大学的毕业设计,当时拿到题目时真不知道如何下手,花了我3个月的时间,直到论文写完,才真正理解ucos2的工作原理的,希望对有兴趣进入嵌入式系统学习的战友们有所帮助,同时也希望大家一起探讨学习。… 查看全部问答> |
|
求在深圳嵌入式硬件设计...我们要做i.MX51(Arm Cortex A8)产品.请有相关经验者与我联系,合作形式多样可选.谢谢!!!QQ705489316 要做的产品为:10.1寸的带触摸屏的平板电脑(类似于iPad) … 查看全部问答> |
|
我订制的操作系统上没有网上邻居,上网有些不方便,请问,如何添加自己的网上邻居?除了加入NETWORK USER INTERFACE组件外还需要其他什么组件? 谢谢… 查看全部问答> |




