脱缰的蜗牛 发表于 2016-5-6 18:51:03

求高人给个STM8-TIM4的例程,STVD环境下的,万分感谢!

求高人给个STM8-TIM4控制LED闪烁的例程,STVD环境下的,在用TIM4得时候碰到困难,手上没有例程,百度找参考没用。。。。。。。。。

嘻呵哈嘿吼 发表于 2016-5-7 11:35:53

直接操作寄存器就可以了

脱缰的蜗牛 发表于 2016-5-7 15:49:38

嘻呵哈嘿吼 发表于 2016-5-7 11:35
直接操作寄存器就可以了

是直接操作的,结果实际测得周期是205.6mS和程序里配置的相差很大,

====main.c==============
//时钟初始化
//=================================
void CLK_init(void)
{
        CLK_ECKR=0x00;        //关外部时钟
        CLK_ICKR=0x01; //内部时钟开启
        CLK_CMSR=0xe1; //HSI为主时钟源
CLK_CKDIVR=0x18; //16MHZ/8分频=2MHZ
       
//        CLK_PCKENR1=0XFF;
//        CLK_PCKENR2=0XFF;
// CLK_SWR=0xe1;
       
}

void TIM4_init(void)
{       
        TIM2_EGR =0X01;                //允许更新事件
        TIM2_PSCR = 0X01;        //2MHZ/2=1MHZ   1/1MHZ=1uS
       
        TIM2_ARRH =        0X00;
        TIM2_ARRL        = 0X32; //0X32=5050*1uS=50uS
       
        TIM2_CNTRH = 0X00;
        TIM2_CNTRL = 0X00;        //初值
       
        TIM2_IER |= 0X01;       
        TIM2_CR1 |= 0X81;        //使能
        /*
        TIM4_CNTR        =0;                                //计数器值
        TIM4_PSCR        =0x07;                //预分频器2MHZ/128分频2MHZ/2^7=0.015625MHZ
        TIM4_ARR        =0XFA;                //自动重装寄存器 0XFA=250          T=1/0.015625MHZ=64uS250*64uS=1.6mS
        TIM4_EGR        =0X01;                //计数器重新初始化并产生寄存器更新
        TIM4_IER        =0X01;                //使能中断
        TIM4_CR1        =0X81;                //使能定时器
        */
//        TIM4_CR1 |= 0X04;
//        TIM4_IER |= 0X01;
//        TIM4_PSCR        = 0X06;
//        TIM4_ARR        = 0XFA;
//        TIM4_CNTR = 0XFA;
//        TIM4_CR1 |= 0X01;
//        TIM4_EGR |= 0X01;
}

//mian file
//====================================

main()
{
        _asm("rim");                                //开启中断
        CLK_init();                                        //时钟初始化
        GPIO_init();                          //IO口初始化
        TIM4_init();                                //TIM4初始化

        while (1);
}


//中断服务程序
@far @interrupt voidTIM2(void) // TIM2_UPD_IRQHandler(void)
{
        static unsigned        int i=0;
        i++;
       
        if(i>=2000)               
        {
                i=0;
                PB_ODR^=0XFF;
        }
       
        TIM2_SR1 =0x00;//=0x0e;//清楚中断标志位
        return;
       
}

脱缰的蜗牛 发表于 2016-5-7 16:29:36

嘻呵哈嘿吼 发表于 2016-5-7 11:35
直接操作寄存器就可以了

噢,没有错,是我示波器测错了,我测得是一个波形的周期,而实际应该是高电平的时间是100mS,这样就刚好与我程序100mS翻转对上了
页: [1]
查看完整版本: 求高人给个STM8-TIM4的例程,STVD环境下的,万分感谢!