概述
前言: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关于TIM最高频率设置的坑的全部内容,希望文章能够帮你解决STM8S关于TIM最高频率设置的坑所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复