OpenEdv-开源电子网

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

战舰板滴答定时问题

[复制链接]

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
发表于 2014-1-26 09:30:02 | 显示全部楼层 |阅读模式
战舰板的滴答定时ms那个我咋觉得不准呢?是我那配置错了吗?delay_ms(1000);定时1s像是定时7、8s似的?这是怎么回事啊?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-1-26 10:38:48 | 显示全部楼层
void delay_init()    
{

#ifdef OS_CRITICAL_METHOD     //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
    u32 reload;
#endif
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);    //选择外部时钟  HCLK/8
    fac_us=SystemCoreClock/8000000;    //为系统时钟的1/8  
    
#ifdef OS_CRITICAL_METHOD     //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
    reload=SystemCoreClock/8000000;        //每秒钟的计数次数 单位为K      
    reload*=1000000/OS_TICKS_PER_SEC;//根据OS_TICKS_PER_SEC设定溢出时间
                            //reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右   
    fac_ms=1000/OS_TICKS_PER_SEC;//代表ucos可以延时的最少单位      
    SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;       //开启SYSTICK中断
    SysTick->LOAD=reload;     //每1/OS_TICKS_PER_SEC秒中断一次   
    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;       //开启SYSTICK   
#else
    fac_ms=(u16)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数  
#endif
}  
黄色底的部分是系统时钟的1/8,fac_us就等于9了,那么
void delay_us(u32 nus)
{       
    u32 temp;             
    SysTick->LOAD=nus*fac_us; //时间加载               
    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;       //清空计数器     
}载入到 定时器的时间就是9倍了啊?我不明白为什么要这样啊?             
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-1-26 10:45:22 | 显示全部楼层
我将紫色底的部分后面又除去个9就看了下时间差不多,这样对吗?
回复 支持 反对

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2014-1-26 13:54:37 | 显示全部楼层
fac_us=SystemCoreClock/8000000;    //为系统时钟的1/8  

意思是1US需要9个系统(SysTick)计时时钟,至于为什么只有9个时钟而不是72个时钟
是因为:
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);    //选择外部时钟  HCLK/8
在SysTick控制寄存器里面可选HCLK或者HCLK/8作为计时时钟的,这里应该选了HCLK/8
那你说,比如10US,你是不是要10*9个时钟脉冲?

至于你的问题,有可能是时钟没选对,就是选HCLK/8那步
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-1-26 15:23:56 | 显示全部楼层
回复【4楼】聚东风:
---------------------------------
首先谢谢你的回答,但是我的延时还是有问题的
1、我确定外部晶振为8MHZ  
2、HCLK/8这个时钟分频  #define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)
#define SysTick_CLKSource_HCLK         ((uint32_t)0x00000004)应该也是对的啊,还有其他可能造成我这个问题吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-28 11:51:41 | 显示全部楼层
回复【5楼】yuanhe249:
---------------------------------
你可以软件仿真,看看系统时钟是不是72Mhz?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-1-29 09:28:52 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥,软件怎么仿真系统是不是72M阿?
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-1-29 10:22:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-1-29 10:49:35 | 显示全部楼层
回复【8楼】toddchen:
---------------------------------
那你程序还是有问题的,我现在系统时钟不知道为什么是8M不是72M,我已经倍频过了,不知道问题出在哪里
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-1-29 12:18:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-29 12:22:09 | 显示全部楼层
回复【10楼】toddchen:
---------------------------------
看函数注释!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-29 12:22:48 | 显示全部楼层
回复【10楼】toddchen:
---------------------------------
看函数注释!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-29 12:23:21 | 显示全部楼层
回复【10楼】toddchen:
---------------------------------
看函数注释!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-29 12:23:59 | 显示全部楼层
回复【10楼】toddchen:
---------------------------------
看函数注释!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-29 12:24:19 | 显示全部楼层
回复【10楼】toddchen:
---------------------------------
看函数注释!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-29 12:24:30 | 显示全部楼层
回复【10楼】toddchen:
---------------------------------
看函数注释!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-1-29 12:52:35 | 显示全部楼层
void RCC_Configuration(void)
{   
  ErrorStatus HSEStartUpStatus;     //等待时钟的稳定
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /*HSE晶振ON*/
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
 
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* Flash 2 wait state
    FLASH_SetLatency(FLASH_Latency_2);
  
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);       Enable Prefetch Buffer */

    /* 设置PLL时钟源及倍频系数  PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }

  /* TIM1, GPIOA and GPIOB、GPIOC、GPIOE clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA |
                         RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOE, ENABLE);
}
//////////////////////////////////////////////////////////////////////////////////////////////
原子哥 我不知道我错哪里了  请指点,谢谢
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-1-29 12:55:02 | 显示全部楼层
上面的图错了

见下图


回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-1-29 18:27:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

3

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2013-8-23
在线时间
24 小时
发表于 2014-1-31 20:56:24 | 显示全部楼层
5000超出延时范围了!当然不准!
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-1 15:03:32 | 显示全部楼层
哥哥们,回答我的问题好吗?为什么我这主频还是8M啊???
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-3 21:50:19 | 显示全部楼层
回复【18楼】yuanhe249:
---------------------------------
你这图,主频还是8M呢...
看左下角的:SYSCLK
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-3 21:50:50 | 显示全部楼层
回复【17楼】yuanhe249:
---------------------------------
看寄存器版本:
//延时nms
//注意nms的范围
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864 
void delay_ms(u16 nms)
{        
u32 temp;    
SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00;           //清空计数器
SysTick->CTRL=0x01 ;          //开始倒数  
do
{
temp=SysTick->CTRL;
}
while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达   
SysTick->CTRL=0x00;       //关闭计数器
SysTick->VAL =0X00;       //清空计数器        
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-7 08:47:26 | 显示全部楼层
回复【22楼】正点原子:
---------------------------------
原子哥   我试验了下你给的程序,SYSCLK  也是8M,但是在买来的板子上就是72M,可能是我硬件有问题,凭您的经验是什么问题?能给我些提示吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-8 17:44:00 | 显示全部楼层
回复【24楼】yuanhe249:
---------------------------------
倍频没设置好.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-8 21:03:39 | 显示全部楼层
回复【25楼】正点原子:
---------------------------------
原子哥  这个问题我找到了  是我的电容不对   嘿嘿
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-8 21:25:01 | 显示全部楼层
回复【26楼】yuanhe249:
---------------------------------
啊??
电容不对,会导致这个问题?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-8 21:57:23 | 显示全部楼层
回复【27楼】正点原子:
---------------------------------
对啊  晶振起不来  默认用的内部HSI所以是8M了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 19:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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