STM8S关于TIM最高频率设置的坑

前言:STM8S003配置TIM4频率设置在100kHz,即10us中断一次

问题:想要配置100k,但是顶死了60k,这么配置都上不去!

疑惑:库函数和寄存器到底有多大差别?

正文:

1 配置TIM4基本定时器(计数器只有256个)

//    TIM4_DeInit(); 
    TIM4_TimeBaseInit(TIM4_PRESCALER_16,9 );    //10us  16M/16/(9+1)=100kHz
//    TIM4_ClearFlag(TIM4_FLAG_UPDATE);              //清除标志位
    TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);         //使能更新UPDATE中断                          //计数值归零
    enableInterrupts();

    TIM4_Cmd(ENABLE); 

总共6句话,我挨个注释它到底起不起作用(老总曾说我,不从根本考虑问题,只在做表面)

2 初始化配置好了,在此之前,配置时钟,再初始化一个IO口控制亮灯

CLK->CKDIVR = 0x00;//CPU 16MHz

GPIO_Init(GPIOC, (GPIO_Pin_TypeDef)GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST);

3再在it.c文件找到TIM4的中断方法

 INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
 {  
   TIM4->SR1 = 0;//TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
   if(j==0)
   {
     j=1;
   GPIOC->ODR &=~GPIO_PIN_6;//GPIO_WriteHigh(GPIOC,GPIO_PIN_6);
   }
   else
   {
     j=0;
     GPIOC->ODR |= GPIO_PIN_6;//GPIO_WriteLow(GPIOC,GPIO_PIN_6);
   }

 } 

原谅我一上来就直接贴寄存器代码,因为被库函数害惨了

操作寄存器反转IO口,它能达到100kHz的频率

操作库函数反转IO口,最高只有60kHz

4耗时2天解决,居然是库函数导致的,尤其是中断中执行库函数,也有可能不支持STM8S003,让我对库函数越来越失望了

了结:同样频率上不去的朋友可以看看是不是寄存器和库函数影响的!

 

你可能感兴趣的:(STM8S)