打印
[STM32F1]

STM32F105延时不起作用?

[复制链接]
1829|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)的时间是一样的 ,我用示波器测量过。

使用特权

评论回复
5
jack821119|  楼主 | 2015-1-13 08:47 | 只看该作者
麻烦 城主出来看看。

使用特权

评论回复
6
jack821119|  楼主 | 2015-1-13 13:55 | 只看该作者
版主可以帮忙 解其惑吗 ?

使用特权

评论回复
7
晴天太抢手| | 2016-3-27 10:21 | 只看该作者
楼主后来解决问题了没 我也遇到了类似问题啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

24

主题

206

帖子

3

粉丝