OpenEdv-开源电子网

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

delay延时问题求助,延时1000毫秒,结果差了10倍

[复制链接]

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
发表于 2019-11-25 21:12:22 | 显示全部楼层 |阅读模式
1金钱
用18B20读温度的过程中,通过串口输出数据,结果读取到的数据都是0,然后测试串口输出,加载delay_ms(1000);进行延时输出,结果每隔10秒钟打印输出一次,差了10倍,这是什么情况呢?

[21:06:39.388]收←◆12345660
[21:06:48.410]收←◆12345661
[21:06:57.432]收←◆12345662
[21:07:06.455]收←◆12345663
[21:07:15.478]收←◆12345664
[21:07:24.501]收←◆12345665
[21:07:33.524]收←◆12345666
[21:07:42.548]收←◆12345667
[21:07:51.572]收←◆12345668
[21:08:00.595]收←◆12345669
[21:08:09.618]收←◆123456610
[21:08:18.642]收←◆123456611
[21:08:27.666]收←◆123456612
[21:08:36.690]收←◆123456613
[21:08:45.714]收←◆123456614
[21:08:54.739]收←◆123456615
[21:09:03.764]收←◆123456616
[21:09:12.787]收←◆123456617
[21:09:21.812]收←◆123456618
[21:09:30.836]收←◆123456619
[21:09:39.860]收←◆123456620
[21:09:48.884]收←◆123456621
[21:09:57.908]收←◆123456622
[21:10:06.932]收←◆123456623
[21:10:15.956]收←◆123456624
[21:10:24.978]收←◆123456625
[21:10:34.002]收←◆123456626
[21:10:43.026]收←◆123456627
[21:10:52.050]收←◆123456628
[21:11:01.073]收←◆123456629

以上是串口调试助手输出的数值
printf("1234566%d",temperature++);
                  delay_ms(1000);主函数的while(1)内只有这两句话,

最佳答案

查看完整内容[请看2#楼]

可以了,其实也就是要先配置好时钟才能用,都是对这个外国的芯片不是特别了解呀
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-25 21:12:23 | 显示全部楼层
htao 发表于 2019-11-27 10:15
这三行注释掉,在main 开始时调用SystemInit();这三行不注释,main里面不调用SystemInit();效果是一样的 ...

可以了,其实也就是要先配置好时钟才能用,都是对这个外国的芯片不是特别了解呀
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 13:56:13 | 显示全部楼层
有知道的吗?这样的情况怎么处理呢?时钟的配置的话,我看了是72M的,外部晶振用的是8M的
回复

使用道具 举报

10

主题

161

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2019-9-5
在线时间
134 小时
发表于 2019-11-26 14:11:06 | 显示全部楼层
留眼,等答案
回复

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
发表于 2019-11-26 14:13:49 | 显示全部楼层
本帖最后由 htao 于 2019-11-26 14:16 编辑

之前我把F103ve 型号修改成 F103c8的时候,也有出现过这种问题,

最后解决方法是,把启动文件改回 startup_stm32f10_hd.s , 宏定义里还是 STM32F10X_MD
5.png

6.png
茵茵猪头
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 14:31:38 | 显示全部楼层
htao 发表于 2019-11-26 14:13
之前我把F103ve 型号修改成 F103c8的时候,也有出现过这种问题,

最后解决方法是,把启动文件改回 start ...

那你这样芯片不对了,能行吗?
回复

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
发表于 2019-11-26 14:34:42 | 显示全部楼层
凌凌漆 发表于 2019-11-26 14:31
那你这样芯片不对了,能行吗?

能行啊,能用就行
茵茵猪头
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 14:47:09 | 显示全部楼层
htao 发表于 2019-11-26 14:34
能行啊,能用就行

是因为启动代码的影响?原子的启动代码只能用HD的?不能用MD的?
回复

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
发表于 2019-11-26 15:44:50 | 显示全部楼层
本帖最后由 htao 于 2019-11-26 15:47 编辑

这个启动文件其实还是跟芯片型号有关,
cl:互联型产品,stm32f105/107系列

vl:超值型产品,stm32f100系列

xl:超高密度产品,stm32f101/103系列

ld:低密度产品,FLASH小于64K

md:中等密度产品,FLASH=64 or 128

hd:高密度产品,FLASH大于128

http://www.openedv.com/forum.php?mod=viewthread&tid=276025&page=1

我是根据这个链接的方式改了,但是没有效果,才替换成之前的启动文件,就OK了,按道理103c8是用md的启动文件。


茵茵猪头
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2019-11-26 15:52:04 来自手机 | 显示全部楼层
不是检查系统时钟配置和自己的程序?
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 15:53:53 | 显示全部楼层
htao 发表于 2019-11-26 15:44
这个启动文件其实还是跟芯片型号有关,
cl:互联型产品,stm32f105/107系列

对啊,我觉得也是很奇怪
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 15:54:26 | 显示全部楼层
yklstudent 发表于 2019-11-26 15:52
不是检查系统时钟配置和自己的程序?

程序和系统时钟配置都没有问题
回复

使用道具 举报

8

主题

182

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-3-8
在线时间
114 小时
发表于 2019-11-26 15:55:57 | 显示全部楼层
看下delay函数里边具体的实现方法,看函数的问题。型号当然要选本款单片机的型号了
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 16:04:52 | 显示全部楼层
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
     IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP
唯一的区别
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 16:05:24 | 显示全部楼层
15937417823 发表于 2019-11-26 15:55
看下delay函数里边具体的实现方法,看函数的问题。型号当然要选本款单片机的型号了

别乱讲了,你不动就别乱讲了
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 16:06:14 | 显示全部楼层
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
                                ;寄存器版本代码,因为没有用到SystemInit函数,所以注释掉以下代码为防止报错!
                                ;库函数版本代码,建议加上这里(外部必须实现SystemInit函数),以初始化stm32时钟等。
                ;IMPORT  SystemInit                       
                ;LDR     R0, =SystemInit       
                ;BLX     R0        
                 LDR     R0, =__main
                 BX      R0
                 ENDP
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 16:08:47 | 显示全部楼层
刚才看了一下HD的文件配置,也是需要把这一行的注释去掉
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 16:18:17 | 显示全部楼层
如果不出意外的话,只要修改这个
IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0
把这三行代码的注释去掉就行了,这样系统时钟也就配置好了,应该就可以用了
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
 楼主| 发表于 2019-11-26 16:18:58 | 显示全部楼层
htao 发表于 2019-11-26 15:44
这个启动文件其实还是跟芯片型号有关,
cl:互联型产品,stm32f105/107系列

你是一下修改MD的这三行汇编代码,把注释去掉
  IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0
回复

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
发表于 2019-11-27 10:15:10 | 显示全部楼层
本帖最后由 htao 于 2019-11-27 10:32 编辑
凌凌漆 发表于 2019-11-26 16:18
你是一下修改MD的这三行汇编代码,把注释去掉
  IMPORT  SystemInit
                 LDR     R0, =Sy ...

这三行注释掉,在main 开始时调用SystemInit();
这三行不注释,main里面不调用SystemInit();
效果是一样的,无非就是在main开始前和 开始的时候初始化时钟。

你那边可以了吗
茵茵猪头
回复

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2019-7-5
在线时间
18 小时
发表于 2019-11-28 21:30:14 | 显示全部楼层
凌凌漆 发表于 2019-11-26 14:31
那你这样芯片不对了,能行吗?

对对对,我也遇到过这个问题,用的R8T6,就是用的楼上的方法,最后才正常,启动用HD,宏定义用MD.其实我也想知道md那个启动文件是不是有问题
回复

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2019-7-5
在线时间
18 小时
发表于 2019-11-28 21:41:12 | 显示全部楼层
我也遇到了同样的问题,楼主是怎么解决的呢?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2021-11-12
在线时间
1 小时
发表于 2021-11-16 11:11:11 | 显示全部楼层
凌凌漆 发表于 2019-11-26 16:04
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __mai ...

这段代码在哪里
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 10:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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