您的位置 首页 应用

STM8S学习笔记之四(STM8 time1)

这几天一直纠结于使用STM8库还是用底层寄存器写程序,用了用IAR和库的搭配,方便时肯定的,但是呢,鉴于我现在工作使用的就是STM32的单

这几天一向纠结于运用STM8库仍是用底层寄存器写程序,用了用IAR和库的调配,便利时必定的,可是呢,鉴于我现在作业运用的便是STM32单片机+STM32库,考虑一再,我仍是用底层吧,这样两个就能够互补了,既不会太依赖于库,又对寄存器的操作有更深的了解。。仅仅都是相通的,是的,相通的。。

以下是从技能手册上张贴的:

TIM1由一个16位的主动装载计数器组成,它由一个可编程的预分频器驱动。
本章中运用i来代表1、2、3、4,别离对应于四个不同的捕获/比较通道。
高档操控守时器适用于许多不同的用处:
●根本的守时
●丈量输入信号的脉冲宽度(输入捕获)
●发生输出波形(输出比较,PWM和单脉冲形式)
●对应与不同事情(捕获,比较,溢出,刹车,触发)的中止
●与TIM5/TIM6或许外部信号(外部时钟,复位信号,触发和使能信号)同步
高档操控守时器广泛的适用于各种操控使用中,包含那些需求中心对齐形式PWM的使用,该形式支撑互补输出和死区时刻操控。
高档操控守时器的时钟源可所以内部时钟,也可所以外部的信号,能够经过装备寄存器来进行挑选。

这个守时器对我的榜首印象便是想到STM32的守时器1,也是高档守时器,记住最初用32的某个单片机做的项目,要出各种互补对称的脉冲,并且还必须多少多少的死区时刻。。尽管很头疼,可是仍是用守时器1轻松完成。看似这个守时器和STM32的高档守时器差不多,那就必定很强壮。。

//Time1守时器
void Timer1Init(void)
{
asm(“sim”); // 关大局中止
TIM1_PSCRH=0;
TIM1_PSCRL=15; //(fCK_CNT)等于fCK_PSC/( PSCR[15:0]+1)。
TIM1_CNTRH=0xc3;
TIM1_CNTRL=0x50;//主动装载寄存器的值
TIM1_IER=0x01;//答应更新中止
TIM1_RCR=20;//重复计数寄存器值
TIM1_CR1=0x01;//翻开主动装载,翻开计数器
asm(“rim”); // 开大局中止
}

以上是守时器的初始化,榜首句不解说。TIM1_PSCRH TIM1_PSCRL为单片机的预分频器。和STM32差不多。取值形似都是u16. 然后是TIM1_ARRH TIM1_ARRL,主动装在寄存器的值,也便是说,一旦计数到65535,寄存器溢出并触发中止,然后守时器的计数器主动装载为此值。。原来是这样,呵呵,一切单片机都相同。。答应更新中止,守时时刻到进中止,地球人都知道。。重复计数器很好,他需求溢出N次才能够进中止。。呵呵。。开主动装载,开守时器。差不多就OK了。。可是哥那个晚上调了N长时刻都没调通,抑郁的要死,最终的最终的最终,总算找到了,asm(“sim”); // 关大局中止 asm(“rim”); // 开大局中止。。哥忽然想起最初的51.。不解说。。

中止函数也粘过来吧、、、

#pragma vector=TIM1_OVR_UIF_vector
__interrupt void TIM1_OVF_IRQHandler(void)
{
static unsigned char i;
if(TIM1_SR1&0x01)
{
TIM1_SR1&=~0x01;//铲除中止标志
i++;
if(i%2) PD_ODR=0x00;
else PD_ODR=0xff;
}
}

看到这个日志的同志们就偷笑吧,这个代码复制张贴,必定能用。。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/260405.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部