历史上的今天
返回首页

历史上的今天

今天是:2025年04月20日(星期日)

正在发生

2021年04月20日 | STM32高级定时器1控制伺服直流电机

2021-04-20 来源:eefocus

简介:使用STM32也有很多年了,现在毕业临近了,就想写写,做做记录也希望能帮助到可以帮助的人。STM32定时器有很多的用途,我也不一一举例,我最常用的就是输出PWM,定时器,输入捕获以及编码盘模式等等。


第一 : 用STM32高级定时器1控制伺服直流电机


///////////////////////////////////////////


//定时器1PWM初始化 共4路可变掌控比/////////


//输入参数PWM1/2/3/4掌控比参数30000-60000//


//////////////////////////////////////////


void TIM1_PWM(unsigned int PWM1_Val,unsigned int PWM2_Val,unsigned int PWM3_Val,unsigned int PWM4_Val )


{


vu16 CCR1_Val = PWM1_Val;


vu16 CCR2_Val = PWM2_Val;


vu16 CCR3_Val = PWM3_Val;


vu16 CCR4_Val = PWM4_Val;


TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;


TIM_OCInitTypeDef TIM_OCInitStructure;


GPIO_InitTypeDef GPIO_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_TIM1 , ENABLE); //打开相应的定时器时钟和复用推挽输出对应I/O口时钟


//这里是定时器对应的是TOP值是60000


TIM_TimeBaseStructure.TIM_Period = 60000;//计数器向上最大计数到65535后产生更新事件,计数值归零


TIM_TimeBaseStructure.TIM_Prescaler = 2; //设置预分频器分频系数2 TIM_TimeBaseStructure.TIM_ClockDivision = 0;//设置了时钟分割


TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//选择向上计数


TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;


TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2 ;//PWM2模式


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


TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//TIM输出比较极性


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;//配着相对应的I/O


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


GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //翻转频率为50MHz


GPIO_Init(GPIOA, &GPIO_InitStructure);


TIM_OCInitStructure.TIM_Pulse = CCR1_Val;//比较数


TIM_OC1Init(TIM1, &TIM_OCInitStructure);//初始化定时1


TIM_OCInitStructure.TIM_Pulse = CCR2_Val;


TIM_OC2Init(TIM1, &TIM_OCInitStructure);//初始化定时1


TIM_OCInitStructure.TIM_Pulse = CCR3_Val;


TIM_OC3Init(TIM1, &TIM_OCInitStructure);//初始化定时1


TIM_OCInitStructure.TIM_Pulse = CCR4_Val;


TIM_OC4Init(TIM1, &TIM_OCInitStructure);//初始化定时1


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


TIM_CtrlPWMOutputs(TIM1,ENABLE);


}


在这个函数中我已经把STM32定时器输出PWM的模板写好了,你可以去改进也可以去深入的学习,即使有了程序还是不够的,你必须了解定时器工作的原理和它为什么能达到这样的效果,不然你仅仅只会使用而不能得心应手把它很好应用到你自己的项目中。


对于定时器你去学习单片机时肯定会遇到的一个很重要的问题,在视频教学里面有很多的讲解和看法,在这里我也来说说自己的看法。


定时器我认为就是一个只要你使能它,它就一直在计数的一个16位的计数器,从0到65535,当你配置了相应的定时器模式、TOP值、匹配值时,它就会在计数到相应的位置产生中断或者从新计数也就是说发生更新事件。就拿输出PWM来做解释,在上面我设定了TOP值为60000,设置了为PWM2模式,使定时器的输出极性为低。通俗的说就是当我在主函数中配置该定时器时,高级定时器TIM1就会启动,这里如果我设定比较值为30000,那么定时器一直计数,从0开始对应的I/O口为高电平,一旦定时器计数到30000,对应I/O口出现下降沿,电平发生改变,从高电平转变成低电平,然后计数到60000,定时器出现更新事件,对应的I/O出现上升沿,电平发生改变,从低电平转变成高电平。由此反复,从而形成50%占空比的PWM,这个函数可以自定义占空比,但是不能改变频率。


这里我只是很随意的讲解了定时器的比较简单的应用,如果你想深入的了解,就一定要去看芯片手册,看懂它,熟透它,只有这样你才能对它使用的得心应手,如果想做好就一定要去努力。


当然定时器的时钟这块很是重要,也可以说STM32的时钟树是一定要了解,精通和熟透的东西,在这个我不讲解,在后面的过程中我会用一个比较大的篇幅去讲解STM32时钟树,还有一些我自己的看法。


希望能对有些初入的学者有所帮助,我也是记录我自己的学习历程,一起努力。


推荐阅读

史海拾趣

FREESCALE (NXP)公司的发展小趣事

FREESCALE (NXP) 公司发展的五个故事

故事一:从摩托罗拉剥离到独立上市

FREESCALE的前身可以追溯到摩托罗拉的半导体部门。2002年,面对半导体业务的持续亏损,摩托罗拉集团决定剥离该部门。2004年,摩托罗拉半导体产品事业部正式更名为FREESCALE半导体公司,并在次年成功上市。这一剥离与上市过程标志着FREESCALE作为一个独立实体的诞生,为其后续的发展奠定了基础。独立后的FREESCALE迅速调整战略,专注于嵌入式电子解决方案,特别是在汽车电子、工业控制等领域取得了显著成就。

故事二:与恩智浦(NXP)的合并

2015年,FREESCALE与另一家半导体巨头恩智浦(NXP)达成合并协议,这是半导体行业内的一次重大整合。合并后的公司成为全球最大的汽车半导体供应商之一,并在多个关键技术领域占据领先地位。此次合并不仅增强了双方的市场竞争力,还促进了资源共享和技术创新,为未来的增长开辟了更广阔的空间。合并后的公司在全球范围内拥有更强大的研发和销售网络,能够更好地服务于全球客户。

故事三:从亏损到盈利的转型

在成为独立公司之前,FREESCALE的前身——摩托罗拉的半导体部门曾长期面临亏损困境。然而,在剥离并独立运营后,FREESCALE通过一系列战略调整和市场拓展措施,成功实现了从亏损到盈利的转型。公司注重技术创新和产品研发,不断推出符合市场需求的新产品,同时加强与客户和合作伙伴的合作,共同推动行业发展。这些努力使得FREESCALE在激烈的市场竞争中脱颖而出,成为半导体行业的佼佼者。

故事四:技术创新的引领者

FREESCALE一直致力于技术创新,不断推动半导体技术的进步。公司在嵌入式处理器、模拟芯片、射频芯片等多个领域拥有深厚的技术积累和丰富的产品线。例如,FREESCALE推出的基于Arm Cortex-M系列的微控制器在智能家居、智能穿戴等领域得到了广泛应用;其汽车半导体产品更是广泛应用于高级驾驶员辅助系统、车载网络等领域,为汽车行业的智能化转型提供了有力支持。FREESCALE的技术创新不仅提升了自身产品的竞争力,也为整个行业的发展注入了新的活力。

故事五:全球布局与本地化服务

为了更好地服务全球客户,FREESCALE(及合并后的NXP)在全球范围内进行了广泛的布局。公司在多个国家和地区设立了研发中心、生产基地和销售网络,能够快速响应客户需求并提供本地化服务。同时,FREESCALE还积极与全球各地的合作伙伴建立紧密关系,共同推动技术创新和市场拓展。这种全球布局与本地化服务的策略使得FREESCALE能够更好地融入当地市场,为客户提供更加贴心和高效的服务。

Cicoil公司的发展小趣事

随着计算机技术的飞速发展,处理器成为了电子设备的核心部件。Cicoil公司看到了这一趋势,开始与处理器制造商展开合作。他们为处理器提供高质量的连接电缆,确保处理器能够稳定、高效地运行。这一合作使得Cicoil公司的电缆产品进一步深入到计算机领域,也为其带来了更多的商业机会。

GSN Electronics公司的发展小趣事

随着计算机技术的飞速发展,处理器成为了电子设备的核心部件。Cicoil公司看到了这一趋势,开始与处理器制造商展开合作。他们为处理器提供高质量的连接电缆,确保处理器能够稳定、高效地运行。这一合作使得Cicoil公司的电缆产品进一步深入到计算机领域,也为其带来了更多的商业机会。

CML公司的发展小趣事

在完成了数十年的成功发展后,CML并未满足于现状。公司开始着手制定面向未来的战略规划,旨在继续保持在半导体行业的领先地位。CML加大了对新兴技术的研发投入,如人工智能、物联网等领域,积极探索新的应用场景和市场机会。同时,公司还加强了与国际同行的合作与交流,不断提升自身的技术水平和市场竞争力。通过这些努力,CML为未来的发展奠定了坚实的基础,展望着更加辉煌的未来。

以上是基于CML公司发展历程的五个可能故事。请注意,这些故事虽然基于事实进行构建,但并非真实的历史记录。如需了解更多关于CML公司的具体发展历程和故事,建议查阅相关文献或访问公司官方网站。

Etron公司的发展小趣事

在发展过程中,钰创科技非常注重与产业链上下游企业的合作与共赢。公司积极与国内外知名企业开展合作,共同研发新技术、新产品,推动整个产业链的升级和发展。同时,钰创科技也积极参与行业交流和合作活动,与同行分享经验和技术成果,促进整个行业的共同进步。

昆泰(CHRONTEL)公司的发展小趣事

进入21世纪后,昆泰的创始人Dr. Gillings不满足于CRO企业的平稳收益和稳定现金流,他开始寻求与药企建立更加紧密的战略合作伙伴关系。为此,昆泰在2000年成立了PharmaBio部门,通过资金、技术和销售团队为客户提供全方位的支持。这一战略转型不仅使昆泰与药企建立了深厚的合作关系,还为其带来了丰厚的回报。

问答坊 | AI 解惑

现场测试宝马车的压力传感器

飞思卡尔在汽车电子领域主要使用的是加速度和压力传感器。它们的特点:环保、安全、智能和低成本。在针对大多数的汽车厂家,飞思卡尔推出不同功能的传感器。目前有双轴和3轴的加速度传感器。也有正在实验中的角速度传感器(陀螺仪)。这个图片中, ...…

查看全部问答>

Stellaris是什么东东

Stellaris是什么啊,怎么从来没听说过,哪位牛人给讲讲。悬赏芯币5枚。 [ 本帖最后由 天地一孤砂 于 2010-1-7 16:30 编辑 ]…

查看全部问答>

FFT结果出错

      我使用的器件是DM6437,当我从外部导入的数据只有2048点时,调用“DSP_fft32x32 ”这一库函数进行运算后,结果正确。而当我导入的数据为21000个时,只取前2048点做FFT,调用库函数后作出的结果就很不正确了;而我将 ...…

查看全部问答>

驱动程序改I/O APIC重定向表

老师让暑期搞定这个问题,眼看大半时间过去,后面还有奥运。。。还没有进展!求助~~ 先谢了 把问题简单的说: 过去我们进dos可以捕获到中断,现在想直接用v86捕获中断,可是v86直接破活不到?老师让写个驱动让v86直接捕获!不知道这个方法是否可行 ...…

查看全部问答>

最近开始搞WinCE 下的开发 . 不知道使用什么开发工具比较好!

就现在而言, 大家觉得用vs2005中的vc 好呢,还是用  .net 精简版的! 或者使用evc4 甚至于 evb!不知道使用那个好些, 本人对vc不熟悉 ,但是对vb挺熟悉的 . 不知道有没有其他开发工具呢.  …

查看全部问答>

23都选还是只选3??? 99SE拼版的时候 小弟着急

2 keep net nr 3.dupicate design 23都选还是只选3??? 99SE拼版的时候…

查看全部问答>

关于驱动2次安装问题

按照网上各种网址上的安装介绍,装驱动连续安装2次就行了,可是我使用厂家给的驱动只能装1次  第二次装不了。。。得到截图如下,悲催的  怎么解决啊 USB型的430仿真器…

查看全部问答>

有没有免费的quartus II ip core??

altera 的ip core是不是都要付费的啊?…

查看全部问答>

【TI视频】基于TMS320F2812 DSP的方向盘电机控制系统

2012 TI C2000及MCU大奖赛,本科组,控制系统类,上海交通大学,基于TMS320F2812DSP的方向盘电机控制系统   $(\'swf_A7F\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'al ...…

查看全部问答>

开始搞搞Qsys

其实我一直不想搞这个东西,但最近要搞单板的测试,写C代码相对于Verilog来说,要简单的多啊,还是学习学习吧。立贴明志,哈哈!…

查看全部问答>