stm8的timer1资源功能着实丰富,
要想全部弄清楚不容易,还是得拆分开来慢慢理解。
今天要学习的是timer1的外部时钟源模式二。
外部时钟源模式二有个专用的输入引脚ETR。
先看看ETR引脚的输入结构。
从图上可以看出,TIM1_ETR这个寄存器贯穿了整条时钟线。
是不是只需要配置这个寄存器就能够将ETR设定为时钟输入源呢?
没错,确实是,比外部时钟源模式1还简单!
首先配置输入信号极性,然后设置分频系数,采样滤波器,然后再选通外部时钟模式2,
外部时钟就能变成CK_PSC时钟。
CK_PSC时钟之后的处理就和之前一样了,再经过分频变成CK_CNT计数器时钟。
之后的操作就和定时器的操作一样了。
今天的实验也很简单,还是使用ETR引脚对时钟输出CCO进行计数,计数溢出后对LED状态进行反向,进而观察实验结果。
需要注意的是CCO和ETR的功能引脚可能需要编辑选项字节来启用。
看波!
贴上实验代码
- /*timer1外部时钟时钟模式2*/
- #include<iostm8s105k4.h>
- #define LED PE_ODR_ODR5
- #pragma vector=TIM1_OVR_UIF_vector
- __interrupt void timer1()
- {
- TIM1_SR1=0; //清中断标志
- LED=!LED;
- }
- void init()
- {
- CLK_SWCR|=0x20; //时钟切换使能
- CLK_SWR=0xb4; //外部晶体振荡器
- CLK_CKDIVR=0x00; //时钟不分频
-
- CLK_CCOR|=0x15; //开启时钟输出 Fcpu/64
-
- PD_DDR_DDR0=1; //CCO引脚配置
- PD_CR1_C10=1;
- PD_CR2_C20=1;
-
- TIM1_ETR=0x40; //ETRF输入配置
-
- TIM1_PSCRH=TIM1_PSCRL=0;//不分频
- TIM1_ARRH=0xcf; //重装载寄存器
- TIM1_ARRL=10;
- TIM1_IER=0x01; //开中断
- TIM1_CR1=0x01; //开计数
-
- PB_DDR_DDR3=0; //ETRF引脚配置
- PB_CR1_C13=1;
- PB_CR2_C23=0;
-
- PE_DDR_DDR5=1; //LED引脚配置
- PE_CR1_C15=1;
- PE_CR2_C25=0;
- }
- int main( void )
- {
- init();
- asm("rim");
- while(1);
- }
THE END!