[STM32F1] STM32F105延时不起作用?

[复制链接]
2081|6
 楼主| jack821119 发表于 2015-1-12 23:07 | 显示全部楼层 |阅读模式
本人最近使用stm32f105,今天发现用以前stm32f103的延时程序,完全不对。也在百度 上查找过资料也没发现什么问题。
使用的是8M晶振。已经修改过时钟配置了。
定时器中断的时间都是没问题的,但是用TIM_SetCounter的方式就完全错乱了。

 楼主| jack821119 发表于 2015-1-12 23:09 | 显示全部楼层
代码如下:

void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);             //使用优先级分组0
        NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;       //指定中断源
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;    // 指定响应优先级别1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}


/**************************************************
*函数名称:void LED_Configuration(void)
*
*入口参数:无
*
*出口参数:无
*
*功能说明:LED初始化配置
***************************************************/
void LED_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        LED1(0);   //初始化状态四个LED全OFF
        LED2(0);
        LED3(0);
        LED4(0);
}
/**************************************************
*函数名称:void TIMER_Configuration(void)
*
*入口参数:无
*
*出口参数:无
*
*功能说明:TIM4初始化配置
***************************************************/
void TIMER_Configuration(void)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能

        /* Prescaler 预分频系数为36000-1,这样计数器时钟为72MHz/36000 = 2kHz
           Period    设置计数溢出大小,每计2000个数就产生一个更新事件
           这样就实现了1s闪烁一次
    */
        TIM_TimeBaseInitStructure.TIM_Prescaler = 36000-1;                // 分频值  最大65536

        TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;          //向上计数模式

        TIM_TimeBaseInitStructure.TIM_Period = 200-1;                               //ARR的值 最大65536

        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStructure);

        //TIM_ITConfig(TIM4, TIM_IT_Update,ENABLE);            // 中断使能

        //TIM_Cmd(TIM4, ENABLE);                         //使能定时器
}


        void Delay(u32 nCount)
        {
                u16 TIMCounter = nCount;
                TIM_Cmd(TIM4, ENABLE);
                TIM_SetCounter(TIM4, TIMCounter);
               
                while (TIMCounter>0)
                {
                        TIMCounter = TIM_GetCounter(TIM4);
                }
               
                TIM_Cmd(TIM4, DISABLE);
        }



int main(void)
{
  SystemInit();               //系统初始化
  LED_Configuration();          //LED初始化配置
  NVIC_Configuration();          //NVIC初始化
  TIMER_Configuration();  //TIM4初始化       
  while(1)
  {
          GPIO_SetBits(GPIOC,GPIO_Pin_9);
          Delay(10);
          GPIO_ResetBits(GPIOC,GPIO_Pin_9);
          Delay(10);
  }
}
看哪位哥们帮忙看看哪里出问题了。

mmuuss586 发表于 2015-1-12 23:56 | 显示全部楼层
那具体差多少呢?
还是没延时;
 楼主| jack821119 发表于 2015-1-13 08:47 | 显示全部楼层
Delay(10)与Delay(1)的时间是一样的 ,我用示波器测量过。
 楼主| jack821119 发表于 2015-1-13 08:47 | 显示全部楼层
麻烦 城主出来看看。
 楼主| jack821119 发表于 2015-1-13 13:55 | 显示全部楼层
版主可以帮忙 解其惑吗 ?
晴天太抢手 发表于 2016-3-27 10:21 | 显示全部楼层
楼主后来解决问题了没 我也遇到了类似问题啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:交流才是王道.

24

主题

216

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部