OpenEdv-开源电子网

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

为什么我的延时是正常情况下的十倍啊?

[复制链接]

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
发表于 2018-5-30 10:02:18 | 显示全部楼层 |阅读模式
3金钱
u16 fac_us;
u16 fac_ms;
                          
void delay_init(u8 SYSCLK)
{
        SysTick->CTRL&=0xfffffffb;                                       
        fac_us = SYSCLK/8;
        fac_ms = (u16)fac_us*1000;
}                                                                    
                                                                              
void delay_us(u32 nus)
{               
    u32 temp;
        SysTick->LOAD = nus*fac_us;       
        SysTick->VAL = 0x00;      
        SysTick->CTRL = 0x01;      
        do
        {
                temp =SysTick->CTRL;
        }while(temp&0x01 && !(temp&(1<<16)));  
       
        SysTick->CTRL = 0x00;               
        SysTick->VAL  = 0x00;               
}

void delay_ms(u32 nms)
{         
        u32 temp;
        SysTick->LOAD = (u32)nms*fac_ms;   
        SysTick->VAL = 0x00;              
        SysTick->CTRL = 0x01;              
        do
        {
                temp = SysTick->CTRL;
        }
        while(temp&0x01 && !(temp&(1<<16)));
        SysTick->CTRL = 0x00;              
        SysTick->VAL = 0x00;                                 
}


就是原子的程序啊,stm32f103Vet6。  SYSCLK=72

最佳答案

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

进去SetSysClockTo72();里面看看,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-5-30 10:02:19 | 显示全部楼层
进去SetSysClockTo72();里面看看,
微信截图_20180530113424.jpg
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10570
金钱
10570
注册时间
2017-2-18
在线时间
1913 小时
发表于 2018-5-30 10:35:38 | 显示全部楼层
外接的晶振是多少的。一般是外接的晶振不对或者是系统时钟配置方法不对引起的
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-5-30 10:37:34 | 显示全部楼层
应该是9倍差不多,外部晶振没起振,系统默认用了HSI
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
 楼主| 发表于 2018-5-30 10:51:45 | 显示全部楼层
peng1554 发表于 2018-5-30 10:35
外接的晶振是多少的。一般是外接的晶振不对或者是系统时钟配置方法不对引起的

8MHz的外部晶振
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
 楼主| 发表于 2018-5-30 11:02:25 | 显示全部楼层
szczyb1314 发表于 2018-5-30 10:37
应该是9倍差不多,外部晶振没起振,系统默认用了HSI

没起振是什么原因呢、
回复

使用道具 举报

7

主题

200

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1279
金钱
1279
注册时间
2017-7-18
在线时间
257 小时
发表于 2018-5-30 11:10:40 | 显示全部楼层
qiuzhicheng 发表于 2018-5-30 11:02
没起振是什么原因呢、

电路没问题的情况下,很大的可能就是焊接问题。
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-5-30 11:12:15 | 显示全部楼层
找图中的方法在那里打个断点看看是不是真的外部晶振没起振,系统用了内部RC即HSI。如果真是这样,那你的外部晶振电路哪里有问题,外部晶振不工作程序可以运行但时钟不对,应该是9倍的关系
程序较慢-貌似外部晶振没起振-有内部RC提供时钟.jpg
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-5-30 11:14:34 | 显示全部楼层
去看看32的时钟树,那里你理一下你的时钟配置,看看如果真的用了HSI是不是就跟你的程序实验相象一致了
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
 楼主| 发表于 2018-5-30 11:23:10 | 显示全部楼层
szczyb1314 发表于 2018-5-30 11:12
找图中的方法在那里打个断点看看是不是真的外部晶振没起振,系统用了内部RC即HSI。如果真是这样,那你的外 ...

static void SetSysClock(void)
{
#ifdef SYSCLK_FREQ_HSE
  SetSysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
  SetSysClockTo24();
#elif defined SYSCLK_FREQ_36MHz
  SetSysClockTo36();
#elif defined SYSCLK_FREQ_48MHz
  SetSysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
  SetSysClockTo56();  
#elif defined SYSCLK_FREQ_72MHz
  SetSysClockTo72();
#endif

/* If none of the define above is enabled, the HSI is used as System clock
    source (default after reset) */
}

只定义了 SYSCLK_FREQ_72MHz
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
 楼主| 发表于 2018-5-30 11:43:47 | 显示全部楼层
szczyb1314 发表于 2018-5-30 11:14
去看看32的时钟树,那里你理一下你的时钟配置,看看如果真的用了HSI是不是就跟你的程序实验相象一致了

在主函数里面加了SystemInit();就好了
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
 楼主| 发表于 2018-5-30 11:56:35 | 显示全部楼层
szczyb1314 发表于 2018-5-30 10:02
进去SetSysClockTo72();里面看看,

主函数不加SystemInit(),system_stm32f10x.c里面所有地方都不能打断点。加了后,可以打断点,你这个位置也进的去
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
 楼主| 发表于 2018-5-30 11:58:36 | 显示全部楼层
szczyb1314 发表于 2018-5-30 10:02
进去SetSysClockTo72();里面看看,

这是不是个很蠢的错误
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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