OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 340|回复: 26

定时器中断里面设置溢出时间为0.5us,但是用示波器打了一下,时间将近是0.5us的八倍,求各路大神指导。

[复制链接]

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
发表于 2017-11-14 10:47:52 | 显示全部楼层 |阅读模式
10金钱
我想通过定时器4中断来传输一组20位的数据。没0.5us溢出一次,执行一次中断服务函数,然后传输一位数据。同时用了定时器2和定时器3的PWM功能来输出两组时钟,这两组PWM波我在示波器上打了一下,显示是正确的。其中一组PWM波输出的是2M的波,所以应该是这一组2M的波产生20个周期的波的时间里,定时器4产生20次溢出,执行20次中断函数。但是我通过示波器看的是定时器中断执行的时间比20个2M的PWM波产生的时间长太多了。然后我改变20位数据装载值,让他输出方波,发现周期好像是设定的8倍左右。我的定时器中断函数主函数见图。请各路大神和原子哥指点迷津啊。

两组PWM波

两组PWM波

2M PWM波与定时器4产生波的对比

2M PWM波与定时器4产生波的对比

重设装载值与2M PWM对比

重设装载值与2M PWM对比

定时器设置函数

定时器设置函数

中断服务函数

中断服务函数

主函数

主函数
回复

使用道具 举报

  离线 

46

主题

425

帖子

0

精华

高级会员

Rank: 4

积分
736
金钱
736
注册时间
2014-11-18
在线时间
131 小时
发表于 2017-11-14 11:58:53 | 显示全部楼层
大概说一下你想实现什么,不然看你这么多内容很累的。
自己选择的路,成家前走完。
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 2017-11-14 13:35:09 来自手机 | 显示全部楼层
aiyeba 发表于 2017-11-14 11:58
大概说一下你想实现什么,不然看你这么多内容很累的。

就是想要一个gpio口在10us里面传输20位数据,每一位0.5us,只要能实现这个,其他的都好办了
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 2017-11-14 15:15:37 来自手机 | 显示全部楼层
我感觉这个中断函数也不是很长啊
回复

使用道具 举报

  离线 

12

主题

253

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
423
金钱
423
注册时间
2015-3-26
在线时间
74 小时
发表于 2017-11-14 15:24:04 | 显示全部楼层
分频系数 ,
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 2017-11-14 15:26:35 来自手机 | 显示全部楼层
xyl210xyl 发表于 2017-11-14 15:24
分频系数 ,

分频系数我没有做更改,而且我用定时器2输出的那个2M的pwm波就是正常的啊
回复

使用道具 举报

  离线 

46

主题

425

帖子

0

精华

高级会员

Rank: 4

积分
736
金钱
736
注册时间
2014-11-18
在线时间
131 小时
发表于 2017-11-14 15:34:59 | 显示全部楼层
天人一口12 发表于 2017-11-14 15:26
分频系数我没有做更改,而且我用定时器2输出的那个2M的pwm波就是正常的啊

你确定定时器  是0.5s中端一次?
自己选择的路,成家前走完。
回复

使用道具 举报

  离线 

2

主题

193

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2015-10-17
在线时间
118 小时
发表于 2017-11-14 15:45:57 | 显示全部楼层
0.5us时间太短了,time中断函数运行也要时间啊
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 2017-11-14 16:59:36 来自手机 | 显示全部楼层
hgr211 发表于 2017-11-14 15:45
0.5us时间太短了,time中断函数运行也要时间啊

是有些短,但是长八倍也太不正常了吧
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 2017-11-14 17:05:55 来自手机 | 显示全部楼层
aiyeba 发表于 2017-11-14 15:34
你确定定时器  是0.5s中端一次?

arr和psc都赋值5,和定时器有关吗?我用的是定时器4
回复

使用道具 举报

  离线 

55

主题

4418

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
5609
金钱
5609
注册时间
2012-11-26
在线时间
831 小时
发表于 2017-11-14 17:09:33 | 显示全部楼层
0.5us  还得传数据  想想都有点蛋疼
道不同,不相与为谋
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 2017-11-14 17:14:28 来自手机 | 显示全部楼层
jermy_z 发表于 2017-11-14 17:09
0.5us  还得传数据  想想都有点蛋疼

是啊,0.5us一位数据
回复

使用道具 举报

  离线 

55

主题

4418

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
5609
金钱
5609
注册时间
2012-11-26
在线时间
831 小时
发表于 2017-11-14 17:21:43 | 显示全部楼层

自己按照波特率算算需要多久吧  0.5us  单片机光中断,不干别的了
道不同,不相与为谋
回复

使用道具 举报

  离线 

46

主题

425

帖子

0

精华

高级会员

Rank: 4

积分
736
金钱
736
注册时间
2014-11-18
在线时间
131 小时
发表于 2017-11-14 17:28:28 | 显示全部楼层

72MHZ/10   =   7.2Mhz

T=1/7.2us  =0.13888us      这个太快了     CPU反应不过来

定时器的极限好像是2us    1us都反应不过来  我这里指的是定时器中断
自己选择的路,成家前走完。
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 2017-11-14 20:04:54 来自手机 | 显示全部楼层
aiyeba 发表于 2017-11-14 17:28
72MHZ/10   =   7.2Mhz

T=1/7.2us  =0.13888us      这个太快了     CPU反应不过来

可是我让它传输的数据完全可以传出来,波形很好,就是时长不对
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 2017-11-14 21:08:52 来自手机 | 显示全部楼层
aiyeba 发表于 2017-11-14 15:34
你确定定时器  是0.5s中端一次?

((5+1)*(5+1))/72M=0.5us,不是吗
回复

使用道具 举报

  离线 

2

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2017-10-14
在线时间
20 小时
发表于 2017-11-14 21:41:48 | 显示全部楼层
天哪这么快的中断
回复

使用道具 举报

  离线 

482

主题

8万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
117247
金钱
117247
注册时间
2010-12-1
在线时间
900 小时
发表于 7 天前 | 显示全部楼层
CPU处理中断不要超过100Khz,否则严重影响运行效率。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
微信公众平台:正点原子   点击扫码添加
回复

使用道具 举报

  离线 

46

主题

425

帖子

0

精华

高级会员

Rank: 4

积分
736
金钱
736
注册时间
2014-11-18
在线时间
131 小时
发表于 7 天前 | 显示全部楼层
天人一口12 发表于 2017-11-14 21:08
((5+1)*(5+1))/72M=0.5us,不是吗

对的。是0。5us  我搞错了

不过,这个速度 中断每那么快处理不过来的。
自己选择的路,成家前走完。
回复

使用道具 举报

  离线 

46

主题

425

帖子

0

精华

高级会员

Rank: 4

积分
736
金钱
736
注册时间
2014-11-18
在线时间
131 小时
发表于 7 天前 | 显示全部楼层
天人一口12 发表于 2017-11-14 20:04
可是我让它传输的数据完全可以传出来,波形很好,就是时长不对

示波器能处理高频的波形。
自己选择的路,成家前走完。
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 7 天前 | 显示全部楼层
正点原子 发表于 2017-11-15 00:47
CPU处理中断不要超过100Khz,否则严重影响运行效率。

原子哥 我今天又试了一下用systick延时函数来实现延时0.5us,传输一个数据,但是传输一位数的时间仍然是2M的PWM波的8—9倍。我这个思路也是有问题的吗?对于我这种想在10us里面传输20位数据的想法,原子哥你有什么建议吗
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 7 天前 | 显示全部楼层
aiyeba 发表于 2017-11-15 10:09
示波器能处理高频的波形。

我今天又试了一下用systick延时函数来实现延时0.5us,传输一个数据,但是传输一位数的时间仍然是2M的PWM波的8—9倍。我这个思路也是有问题的吗?
回复

使用道具 举报

  离线 

47

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1479
金钱
1479
注册时间
2015-6-1
在线时间
219 小时
发表于 7 天前 | 显示全部楼层
天人一口12 发表于 2017-11-15 16:03
原子哥 我今天又试了一下用systick延时函数来实现延时0.5us,传输一个数据,但是传输一位数的时间仍然是2 ...

兄弟,0.5us,还想传数据就换思路吧。这种单片机0.5us就只能执行几个nop而已。中断一次要几个机器周期,执行传输的代码几个机器周期。怎么可能执行过来呢。就算是5us都不太可能。
自在随心
回复

使用道具 举报

  离线 

14

主题

107

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
245
金钱
245
注册时间
2014-4-29
在线时间
99 小时
发表于 7 天前 | 显示全部楼层
0.5us就是接近2M的bps,还是20位的定制过的数据帧格式,而且接收要求都这么高,数据处理的实时性要求只能更高。
要是比较通用的功能,不如找找有没有相关的ASIC;要是没有的话也可以用FPGA。
回复

使用道具 举报

  离线 

0

主题

7

帖子

0

精华

新手上路

Rank: 1

积分
26
金钱
26
注册时间
2017-11-12
在线时间
4 小时
发表于 7 天前 | 显示全部楼层
0.5us,不如你算一下用了几个操作。72M的频率,1us 最多72条指令,你的中断都不止这点了
回复

使用道具 举报

  离线 

1

主题

16

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2017-11-4
在线时间
7 小时
 楼主| 发表于 7 天前 来自手机 | 显示全部楼层
yuzeyuan1 发表于 2017-11-15 16:10
兄弟,0.5us,还想传数据就换思路吧。这种单片机0.5us就只能执行几个nop而已。中断一次要几个机器周期, ...

今天又用了状态查询,72M/2M=36,这样想delay_us(1)来延时0.5us,示波器现实的波形的时间还是长啊,8~9倍的长度。想用一个引脚输出2M的pwm波来,然后用上升沿驱动数据另一个引脚传输,不知道这个思路可不可行啊。
回复

使用道具 举报

  离线 

482

主题

8万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
117247
金钱
117247
注册时间
2010-12-1
在线时间
900 小时
发表于 6 天前 | 显示全部楼层
天人一口12 发表于 2017-11-15 16:03
原子哥 我今天又试了一下用systick延时函数来实现延时0.5us,传输一个数据,但是传输一位数的时间仍然是2 ...

不要用中断。用DMA,或者其他,比如SPI接口。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
微信公众平台:正点原子   点击扫码添加
回复

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-22 07:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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