硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2786|回复: 12
收起左侧

[有问必答] 关于定时中断问题

[复制链接]

11

主题

8

回帖

41

积分

新手上路

积分
41
发表于 2018-7-14 03:19:23 | 显示全部楼层 |阅读模式
硬汉哥,请问下bsp_SetTIMforInt()函数,的频率怎么计算了,如果我实现10分钟定时,20分钟,60分钟,应该配置多少频率了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106656
QQ
发表于 2018-7-14 10:08:46 | 显示全部楼层
这么长的时间使用定时器太浪费了,应该使用软定时器,bsp_timer.C有实现,学习下,可以创建无数多个,默认我们是创建了4个,哪里不理解的找我。
回复

使用道具 举报

11

主题

8

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2018-7-16 21:58:10 | 显示全部楼层
eric2013 发表于 2018-7-14 10:08
这么长的时间使用定时器太浪费了,应该使用软定时器,bsp_timer.C有实现,学习下,可以创建无数多个,默认 ...

是不是配置这个位置了,该如何配置了SysTick_Config()
回复

使用道具 举报

4

主题

52

回帖

64

积分

初级会员

积分
64
发表于 2018-7-16 22:22:53 | 显示全部楼层
要求实时性的用硬件定时器,不要求实时性的用软件定时器比较好
回复

使用道具 举报

11

主题

8

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2018-7-16 22:43:25 | 显示全部楼层
cortex 发表于 2018-7-16 22:22
要求实时性的用硬件定时器,不要求实时性的用软件定时器比较好

不要求实时性,该如何配置了??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106656
QQ
发表于 2018-7-17 02:38:41 | 显示全部楼层
几迟 发表于 2018-7-16 21:58
是不是配置这个位置了,该如何配置了SysTick_Config()

bsp_InitTimer里面已经调用了SysTick_Config,论坛置顶帖V4网盘,下载一个跑马灯的例子学习下,里面有软定时器的使用,比较容易掌握。
回复

使用道具 举报

0

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2018-7-19 10:05:45 | 显示全部楼层
本帖最后由 siker.yuan 于 2018-7-19 10:11 编辑

   bsp_StartHardTimer(1, 50000, (void *)finger_time_out);//50ms

void finger_time_out(void)
{
          static uint16_t finger_time =0;
                static  uint8_t  finger_3S_time=0;
            
        
      
      
               finger_time++;
                   if(finger_time>=15){
                                                     finger_3S_time=1;
                                                     finger_time=0;
                                                          printf("指纹超时处理了\r\n");
                                                           bsp_StartHardTimer(1, 50000, (void *)finger_time_out);
                                                 }                                                         
                                                  else
                                                          bsp_StartHardTimer(1, 50000, (void *)finger_time_out);//50ms
}
为啥这定时器有那么大的误差。。。bsp_StartHardTimer(1, 50000, (void *)finger_time_out);//50ms 理论上是 50MS,实际是250MS
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106656
QQ
发表于 2018-7-19 10:13:46 | 显示全部楼层
siker.yuan 发表于 2018-7-19 10:05
bsp_StartHardTimer(1, 50000, (void *)finger_time_out);//50ms

void finger_time_out(void)

bsp_StartHardTimer是单次定时器,用于单次时间计时的。方便像modbus之类的应用使用。

你要用这个,V4开发板也有这么一个bsp_tim_pwm.C文件:
http://www.armbbs.cn/forum.php?m ... amp;highlight=TIM14
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2018-7-25 11:33:51 | 显示全部楼层
                    bsp_SetTIMforInt(TIM3, 1, 15, 0); /* 配置定时器6更新中断,周期1Hz,抢占优先级15,子优先级0 */
使用这个API的时候。仿真后获取到TIM_TimeBaseStructure结构体里面是值,计算到定时的时间为0.5S。为啥会有差?
      TIM_TimeBaseStructure.TIM_Period =3599;
        TIM_TimeBaseStructure.TIM_Prescaler =9999;

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106656
QQ
发表于 2018-7-25 12:28:00 | 显示全部楼层
siker.y_Fwz97 发表于 2018-7-25 11:33
bsp_SetTIMforInt(TIM3, 1, 15, 0); /* 配置定时器6更新中断,周期1Hz,抢占优先级15,子优先级0 */  ...

帮你测试了,就是1s啊,你再溜溜

QQ截图20180725122734.png
回复

使用道具 举报

7

主题

70

回帖

91

积分

初级会员

积分
91
发表于 2018-7-25 15:02:05 | 显示全部楼层
eric2013 发表于 2018-7-25 12:28
帮你测试了,就是1s啊,你再溜溜

老大 使用SysTick定时  做一个万年历准不准  这个是不是和晶振的稳定性有关系
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106656
QQ
发表于 2018-7-25 15:06:08 | 显示全部楼层
wuhaichuan 发表于 2018-7-25 15:02
老大 使用SysTick定时  做一个万年历准不准  这个是不是和晶振的稳定性有关系

用带温补的晶振会好很多。

万年历最好用RTC。
回复

使用道具 举报

7

主题

70

回帖

91

积分

初级会员

积分
91
发表于 2018-7-25 15:07:39 | 显示全部楼层
eric2013 发表于 2018-7-25 15:06
用带温补的晶振会好很多。

万年历最好用RTC。

好的 谢谢老大
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 00:35 , Processed in 0.247898 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表