你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
脱缰的蜗牛 提问时间:2016-5-6 18:51 /
求高人给个STM8-TIM4控制LED闪烁的例程,STVD环境下的,在用TIM4得时候碰到困难,手上没有例程,百度找参考没用。。。。。。。。。
收藏 评论3 发布时间:2016-5-6 18:51

举报

3个回答
嘻呵哈嘿吼 回答时间: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=50  50*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=64uS  250*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 void  TIM2(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翻转对上了
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版