OpenEdv-开源电子网

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

STM32F103 精英板 关于系统时钟以及延时的问题

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-11-24
在线时间
7 小时
发表于 2021-5-10 10:52:09 | 显示全部楼层 |阅读模式
1金钱
大佬们,我有一个问题,就是关于系统时钟以及延时的问题,
int main(void)
{       
        delay_init();            
        LED_Init();                 
        while(1)
        {
                LED0=0;
                LED1=1;
                delay_ms(1500);         
                LED0=1;
                LED1=0;
                delay_ms(1500);       
        }
}


我板子上的晶振是12M,然后我把程序改成了
#if !defined  HSE_VALUE
#ifdef STM32F10X_CL   
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#else
  #define HSE_VALUE    ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */

///////////////////////////////////////
#else   
    /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);

这里改成了6倍频



下载到板子上后,延时1500ms的实际运行时间是2.2s

然后我把相应的位置改成8000000  RCC_CFGR_PLLMULL9(9倍频),就恢复正常了,延时1500ms的实际运行时间是1.5s

有大佬知道这是为什么吗?为什么把晶振改成12M,反而不行了






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

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-11-24
在线时间
7 小时
 楼主| 发表于 2021-5-10 11:00:03 | 显示全部楼层
用得是正点原子写的延时程序


void delay_us(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*fac_us;                                                   
        SysTick->VAL=0x00;                                               
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;   
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));               
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;      
        SysTick->VAL =0X00;                                             
}

void delay_ms(u16 nms)
{                                    
        u32 temp;                  
        SysTick->LOAD=(u32)nms*fac_ms;                              
        SysTick->VAL =0x00;                                                   
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;   
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));            
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;      
        SysTick->VAL =0X00;                                                  
}
#endif
回复

使用道具 举报

16

主题

136

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2020-11-19
在线时间
113 小时
发表于 2021-5-10 16:05:43 | 显示全部楼层
仿真看一下系统时钟
八十、八十、八十!
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-11-24
在线时间
7 小时
 楼主| 发表于 2021-5-10 16:19:53 | 显示全部楼层
dianyan 发表于 2021-5-10 16:05
仿真看一下系统时钟

仿真后哪里可以直接看到吗
回复

使用道具 举报

16

主题

136

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2020-11-19
在线时间
113 小时
发表于 2021-5-10 17:22:27 | 显示全部楼层
19901714642x 发表于 2021-5-10 16:19
仿真后哪里可以直接看到吗

绿框是所有时钟频率,其中红框就是系统时钟
fd3116ad618217164c28f5ac630eba3.png
ddbc6d6d091acb95fc74af15f52d84d.png
八十、八十、八十!
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-11-24
在线时间
7 小时
 楼主| 发表于 2021-5-10 17:29:52 | 显示全部楼层
dianyan 发表于 2021-5-10 17:22
绿框是所有时钟频率,其中红框就是系统时钟

多谢大佬回复,我看了下,改成12M晶振后,sysclk还是72Mhz,2种编程一样的,不过下载到板子后,延时时间就有区别了
回复

使用道具 举报

4

主题

912

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4508
金钱
4508
注册时间
2019-9-4
在线时间
914 小时
发表于 2021-5-10 18:01:49 | 显示全部楼层
帮顶  
回复

使用道具 举报

16

主题

136

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2020-11-19
在线时间
113 小时
发表于 2021-5-10 18:17:01 | 显示全部楼层
19901714642x 发表于 2021-5-10 17:29
多谢大佬回复,我看了下,改成12M晶振后,sysclk还是72Mhz,2种编程一样的,不过下载到板子后,延时时间就 ...

你晶振是不是焊成8M的了,(12M/8M)*1.5秒=2.25秒
八十、八十、八十!
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-11-24
在线时间
7 小时
 楼主| 发表于 2021-5-10 18:33:39 | 显示全部楼层
dianyan 发表于 2021-5-10 18:17
你晶振是不是焊成8M的了,(12M/8M)*1.5秒=2.25秒

但板子上的晶振用的确实是12.000
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-11-24
在线时间
7 小时
 楼主| 发表于 2021-5-10 20:26:35 | 显示全部楼层
dianyan 发表于 2021-5-10 18:17
你晶振是不是焊成8M的了,(12M/8M)*1.5秒=2.25秒

我又看了下别的程序,感觉是硬件上的原因,虽然显示是12M晶振,可能内部电路分频为8M了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 09:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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