- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
NUCLEO教程之三:定个时
好吧,我必须得承认,NUCLEO板子上的外设实在有限,能够玩的不多,所以我还在玩LED。只不过
这次我们用到定时器,让定时器控制LED来闪烁!
定时器的本质就是个计数器,先指定一个计数上限,然后让计数器开始计数,当计数值到达上限或下限
了,它再从头开始计数。只不过,当一轮计数完毕时,我们可以让MCU为我们做点事,比如打开或关
闭一个LED灯。就是这么简单!
实际上这个中间还有点绕,比如我们得指定计数器的工作频率,这就是定时器的预分频器;还有,计数
值到达上或下限时,你让定时器产生一个事件,还是让定时器产生一个中断,你得告诉定时器。然后设
计一个事件处理函数或中断处理函数,在里面完成要MCU完成的操作!就是这么多。
配置定时器的步骤:
1.选一个定时器来操作,有高级也有通用定时器,这里我们选TIM2,这是个通用定时器。
2.设置定时器的计数频率,也就是定时器的预分频器
3.指定计数上限
4.当计数器到达上或下限时,定时器产生事件还是中断
5.打开定时器
创建工程
选择定时器
在“组件及引脚”配置选项卡里,选择“TIM2”,配置如下:
这里只使用了定时器的基本功能,所以只要选择“时钟源”即可,别的功能后面再说。
这里我们还要参考两张图,一张图是TIM2到底挂在哪个APB总线上。
另一张图是TIM2所在的总线的时钟频率,因为后面计数定时器的工作频率时要用到这个数据。
这里可以看出NUCLEOF072RB就只有一个APB总线。
这张图来自STM32CubeMX的“时钟配置”选项卡,从这里看出TIM2在预分频之前的工作频率为
48MHz。
配置定时器
假设我们想让定时器每秒产生一个中断,应该如何计算定时器的预分频及计数值呢?
如果指定预分频器的值为48000,那么APB1的48MHz频率经48000分频之后的工作频率就是
1000,也就是所谓的1KHz。如果再指定计数值为1000的话,恰好就是1秒了。忘记那些计算公式吧,
这样算就很好。
为了加深印象,我们另外再选择一组参数来实现同样的效果。预分频器指定为24000,而计数器指定为
2000,定时器完成一轮计数所花的时间也是1秒。
下面的图显示了如何配置参数
为什么要减1呢,0到999不恰好就是1000个数么?
如果要产生中断的话,还要设置NVIC,如下图
功能代码
好了,生成工程文件后,我们要加入让TIM2工作的代码了,毕竟STM32CubeMX只是一个初始化器。
在main.c里面添加如下代码:
/*USERCODEBEGIN2*/
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET)
HAL_TIM_Base_Start_IT(htim2)
/*USERCODEEND2*/
先点亮LED灯,然后启动TIM2定时器,让它开始计数。
下面来处理中断函数。
首先要说明一个约定,STM32CubeMX使用的是新的HAL库,HAL库对中断及事件的处理采用的是
所谓回调机制。也就是说中断程序的框架已做好,且不能修改。那么如何加入用户代码呢,就是通过所
谓的回调函数来实现的。
打开stm32f0xx_it.c函数,会发现里面有一段这样的代码:
/**
*@briefThisfunctionhandlesTIM2globalinterrupt.
*/
voidTIM2_IRQHandler(void)
{
/*USERCODEBEGINTIM2_IRQn0*/
/*USERCODEENDTIM2_IRQn0*/
HAL_TIM_IRQHandler(htim2)
/*USERCODEBEGINTIM2_IRQn1*/
/*USERCODEENDTIM2_IRQn1*/
}
通过追踪代码,发现HAL_TIM_IRQHandler(htim2)的内容如下:
/**
*@briefThisfunctionhandlesTIMinterruptsrequests.
*@paramhtim:TIMhandle
*@retvalNone
*/
voidHAL_TIM_IRQHandler(TIM_HandleTypeDef*htim)
{
/*Capturecompare1ev
您可能关注的文档
- 参考学习资料 单片机 HUSB365 Training Template V11.pdf
- 参考学习资料 单片机 HX3608.pdf
- 参考学习资料 单片机 include.docx
- 参考学习资料 单片机 keil常见警告处理大全(比较全).pdf
- 参考学习资料 单片机 L298N原理图.pdf
- 参考学习资料 单片机 LCDwen.pdf
- 参考学习资料 单片机 ld3985.pdf
- 参考学习资料 单片机 LM324.doc
- 参考学习资料 单片机 LTH7_4054 (2)-Copy-Reduced-Flattened-Reduced.pdf
- 参考学习资料 单片机 M25P16-VME6TG.pdf
- 参考学习资料 单片机 nucleo_tutorial4.pdf
- 参考学习资料 单片机 nucleo_tutorial5.pdf
- 参考学习资料 单片机 nucleo_tutorial6.pdf
- 参考学习资料 单片机 nucleo_tutorial7.pdf
- 参考学习资料 单片机 nucleo_tutorial8.pdf
- 参考学习资料 单片机 Panasonic-MIP2910MTSCF.pdf
- 参考学习资料 单片机 PCB设计软件.doc
- 参考学习资料 单片机 PID控制器的模糊优化与参数学习自整定.pdf
- 参考学习资料 单片机 PLC矩阵输出驱动发光二极管.pdf
- 参考学习资料 单片机 pu110(20200923).pdf
原创力文档


文档评论(0)