完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
从上图我们可以看到,基本定时器主要由下面三个寄存器组成。
计数器寄存器 (TIMx_CNT)存储的是当前的计数值。预分频器 (TIMx_PSC)为多少个SK_PSC脉冲计数一次,如图192 预分频器的值为1(预分频寄存器默认为0,为不分频),则为两个脉冲计数一次。即为二分频。如果要10000分频,则预分频器的值为1000-1。 |
|
|
|
|
|
|
|
|
自动重装寄存器[size=13.3333px] (TIMx_ARR)存储的是计数器的溢出值,例如图194中计数器递增计数到36计数器溢出,触发一次事件。而实际上为37个脉冲触发一次溢出事件(从0开始计数)。
|
|
|
|
|
|
|
|
|
要确定定时的时间我们必须先确定CK_PSC的频率,TIM3配置中选择内部时钟作为时钟源,查看数据手册或者查看代码可以知道[size=13.3333px]TIM3是挂接到APB1时钟线上。
|
|
|
|
|
|
|
|
|
[size=13.3333px]内部时钟设置为不分频(CKD),则CK_PSC的时钟频率等于APB1的时钟频率108MHz,即108000 000Hz。若要定时时间为1s,则即可设置10800分频(预分频器寄存器 (TIMx_PSC)的值为10800-1),定时器的时钟CK_CNT的频率为10000Hz.则自动重载寄存器 (TIMx_ARR)设置为10000-1即定时为1s.TRGO为触发输出,可以触发内部ADC/DAC,这里我们没有用到这个功能,参数为默认设置。
file:///C:/Users/Administrator/AppData/Local/YNote/data/qq05E2D92FFCC85611A0CBEB4448FFA27E/4d667678424f4c84a4d051d5c9748813/clipboard.png 定时器有如下三种计数模式 递增计数模式:计数器从 0 计数到自动重载值,然后重新从 0 开始计数并生成计数器上溢事件。 递减计数模式:计数器从自动重载值开始递减到 0,然后重新从自动重载值开始计数并生成计数器下溢事件。 中心对齐模式:计数器从 0 开始计数到自动重载值 – 1 ,生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从0 开始重新计数。 |
|
|
|
|
|
|
|
|
在NVIC Settings框勾选开启定时器中断。优先级为默认。或者在NVIC配置中使能TIM3中断。
file:///C:/Users/Administrator/AppData/Local/YNote/data/qq05E2D92FFCC85611A0CBEB4448FFA27E/2b3ada487e224864814c2ad20f89f9f9/clipboard.png |
|
|
|
|
|
|
|
|
生成报告,以及生成代码,编译程序。
打开main.c文件。把main()函数里while循环上一章的代码删掉,while循环里面为空。在main.c文件后面USER CODE BEGIN 4 和 USER CODE END 4 中间添加中断回调函数。定时器中断处理函数中翻转一次LED1~LED4的电平。
|
|
|
|
|
|
|
|
|
在main.c文件中while(1)循环前面添加如果代码启动基本定时器中断模式计数。
[size=14.6667px]重新编译程序,编译通过后下载到Open746-C开发板。按复位可以看到LED1~LED4间隔1s闪烁一次。 [size=13.3333px] 现在我们再次分析一下程序。工程中配置TIM3定时器选择内部时钟不分频作为时钟源,挂载到APB1时钟总线上(108MHz),设置为递增计数模式,预分频器设置为10800-1,即10800分频,最后定时器的频率为10000HZ。一个脉冲的时间为1/10000s。则若要定时1s,则[size=13.3333px]自动重载寄存器设置为10000-1(如要定时0.2s,则自动重装寄存器设置为0.2/(1/10000)-1.即2000-1)。 [size=13.3333px] 在main()函数中调用HAL_TIM_Base_Start_IT(&htim3)开启定时器,定时器从0开始计数,当计数到10000-1,即9999时,产出上溢出事件,计数器又从0开始继续计数。由于我们开启了定时器中断,所以发生上溢出事件时会触发定时器中断。程序会转跳到中断服务函数中运行。我们在中断服务函数中翻转LED的电平。下次定时器再次溢出触发中断继续翻转LED的电平。所以我们会看到LED不断闪烁。 |
|
|
|
|
|
|
|
|
使用CubeMX配置定时器,可以像自己配置初始化函数的时候那样将TIM_Period和TIM_Prescaler配置成变量吗? 这样的话,一个定时器可以实现不同时间的定时中断 |
|
|
|
|
|
|
|
528 浏览 0 评论
654 浏览 0 评论
858 浏览 0 评论
837 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
770 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17060 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 19:14 , Processed in 0.949147 second(s), Total 86, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖