OpenEdv-开源电子网

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

stm32的通用定时器延时问题,本来定时500ms,实际上都有4s了

[复制链接]

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
发表于 2016-11-15 22:15:36 | 显示全部楼层 |阅读模式
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "timer.h"

int main()
{
         Stm32_Clock_Init(9);
         delay_init(72);
         tim3_init(4999,7199);  //频率10K,计数5k,500ms
         led_init();
while(1)
{

PC1=!PC1;   //LED1翻转
        delay_ms(500);

}
}



#include "timer.h"
#include "sys.h"
#include "led.h"
void tim3_init(u16 arr,u16 psc)
{


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

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-16 09:48:00 | 显示全部楼层
检查CCR的配置的寄存器,看看实际用的什么系统时钟
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-16 19:38:54 | 显示全部楼层
憨厚诚实大叔 发表于 2016-11-16 09:48
检查CCR的配置的寄存器,看看实际用的什么系统时钟

用的是原子的。倍频9,外部8M
void Stm32_Clock_Init(u8 PLL)
{

        unsigned char temp=0;   
        MYRCC_DeInit();                  //复位并配置向量表
        RCC->CR|=0x00010000;  //外部高速时钟使能HSEON
        while(!(RCC->CR>>17));//等待外部时钟就绪
        RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
        PLL-=2;                                  //抵消2个单位(因为是从2开始的,设置0就是2)
        RCC->CFGR|=PLL<<18;   //设置PLL值 2~16
        RCC->CFGR|=1<<16;          //PLLSRC ON
        FLASH->ACR|=0x32;          //FLASH 2个延时周期
        RCC->CR|=0x01000000;  //PLLON
        while(!(RCC->CR>>25));//等待PLL锁定
        RCC->CFGR|=0x00000002;//PLL作为系统时钟         
        while(temp!=0x02)     //等待PLL作为系统时钟设置成功
        {   
                temp=RCC->CFGR>>2;
                temp&=0x03;
        }   
}                    
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-16 19:40:15 | 显示全部楼层
憨厚诚实大叔 发表于 2016-11-16 09:48
检查CCR的配置的寄存器,看看实际用的什么系统时钟

把APB1由2分频改为4分频定时器延时加倍。
回复 支持 反对

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-17 10:06:22 | 显示全部楼层
liuzixia123 发表于 2016-11-16 19:40
把APB1由2分频改为4分频定时器延时加倍。

是硬件调试看的,实际CCR寄存器的值,还是根据你程序的设置判断的。
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-17 19:45:51 | 显示全部楼层
憨厚诚实大叔 发表于 2016-11-17 10:06
是硬件调试看的,实际CCR寄存器的值,还是根据你程序的设置判断的。

判断的,开发板插上JLINK就电源不停的复位,JLINK是好的。
回复 支持 反对

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-17 22:50:03 | 显示全部楼层
liuzixia123 发表于 2016-11-17 19:45
判断的,开发板插上JLINK就电源不停的复位,JLINK是好的。

硬件晶振部分出问题会自己切换到HSI  你得硬件调试或者在程序里面判断响应的RCC寄存器,确保你用的PLL。相差8倍,很可能用的HSI
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-20 17:33:52 | 显示全部楼层
憨厚诚实大叔 发表于 2016-11-17 22:50
硬件晶振部分出问题会自己切换到HSI  你得硬件调试或者在程序里面判断响应的RCC寄存器,确保你用的PLL ...

TIM3->ARR=arr写成了TIM3->ARR|=arr;然后TIM3->ARR的值是65535.可是手册里TIM3->ARR的复位值是0x0000啊?不知道为什么初始值怎么是65535的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 10:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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