OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4726|回复: 8

STM32F407ZGT6的定时器测试问题

[复制链接]

20

主题

69

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5486
金钱
5486
注册时间
2018-3-25
在线时间
16 小时
发表于 2018-11-27 14:47:16 | 显示全部楼层 |阅读模式
1金钱
编写了一个stm32f407的定时器6的程序,但是始终有问题存在,只要是程序一复位后,第一次运行,定时器就工作不正常。但是紧接着后期就运行一直正常。就第一次运行不正常。本来是打算使用tim6定时延时,去驱动DS18B20的。但是现在这个定时器就这样了,已经一个礼拜了。没找到原因,希望那个大师帮我看看,问题出在哪里了?
我把定时器部分的程序单独新建工程后,复制过来进行测,程序实现的功能也很单一,定时器不使用中断,使用查询状态寄存器的方法达到延时目的,然后就是取反引脚电平。下面是全部程序的截图:
QQ截图20181127143640.jpg
QQ截图20181127143653.jpg
下面是相应GPIOE的3号引脚电平状态,使用逻辑分析仪查看的:
QQ截图20181127144458.jpg
同是上传了工程文件,希望哪位大佬指点一下问题原因,我自己已经找了一个礼拜了。

407定时器测试.zip

3.25 MB, 下载次数: 29

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-29 02:36:41 | 显示全部楼层
延时函数,最好还是用我们的方式
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10947
金钱
10947
注册时间
2014-6-12
在线时间
1043 小时
发表于 2018-11-29 10:00:53 | 显示全部楼层
我测出来是这样的: dingshi6.png
就初始化时有影响,后边调用就正常了,这对你使用有影响吗?
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-11-29 10:17:35 | 显示全部楼层
定时器是有这样的问题,初始化好了马上能进入中断,即使你用查询的方式也是能查到标志位有效的,就第一次有这个问题,之后是好的
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
发表于 2018-11-29 14:09:39 | 显示全部楼层
这个问题我在写库函数的时候遇到过,第一次初始化就马上进入中断,最后解决方法是我记得最后把某个东西换个位置写,就是说某个寄存器需要换位置写,定时器不是单单靠使能位控制的,我但是也查了半天,我最后就是这样解决的可惜我忘记是那个位置了。你多尝试,百度上也有解决方法差不多,你是写寄存器写法不应该呀我当时第一次写寄存器写法都没出现过反而第一次上班用库马上出现问题了而且还是原始代码的bug。
回复

使用道具 举报

20

主题

69

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5486
金钱
5486
注册时间
2018-3-25
在线时间
16 小时
 楼主| 发表于 2018-12-6 13:57:12 | 显示全部楼层
bbq 发表于 2018-11-29 14:09
这个问题我在写库函数的时候遇到过,第一次初始化就马上进入中断,最后解决方法是我记得最后把某个东西换个 ...

请求大佬指点,你说的是我对寄存器的写顺序有问题吗?
回复

使用道具 举报

20

主题

69

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5486
金钱
5486
注册时间
2018-3-25
在线时间
16 小时
 楼主| 发表于 2018-12-6 13:57:57 | 显示全部楼层
正点原子 发表于 2018-11-29 02:36
延时函数,最好还是用我们的方式

你们的方式是好像使用了滴答定时器吧。具体代码我扫了一眼,没怎么看懂。
回复

使用道具 举报

20

主题

69

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5486
金钱
5486
注册时间
2018-3-25
在线时间
16 小时
 楼主| 发表于 2018-12-6 14:00:27 | 显示全部楼层
xuyaqi 发表于 2018-11-29 10:00
我测出来是这样的:
就初始化时有影响,后边调用就正常了,这对你使用有影响吗?

有影响的,因为我使用定时器6进行精确延时,去读取DS18B20的,每次延时的时候都会出现这样的现象。也就是说每一次延时的时间不一样,比方说第一个延时100us,然后过了一会又延时50us的时候还是会出现这的情况,很是苦恼。
回复

使用道具 举报

20

主题

69

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5486
金钱
5486
注册时间
2018-3-25
在线时间
16 小时
 楼主| 发表于 2018-12-6 19:55:20 | 显示全部楼层
正点原子 发表于 2018-11-29 02:36
延时函数,最好还是用我们的方式

谢谢原子大哥,非常的谢谢,我把原子哥的延时函数移植到我的工程了,非常不错,之前定时器的第一次延时不正常,没找出问题所在,我估计是STM32的定时器就是这个样子,没办法避免吧。

希望原子大哥那天有空看看,定时器6不论定时长短,只要一旦使能定时器,则SR寄存器的UIF位就自动置 1.不知为何。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 22:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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