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

查看: 1104|回复: 3

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

[复制链接]

8

主题

10

回帖

0

蝴蝶豆

中级会员

最后登录
2017-12-23
发表于 2016-5-6 18:51:03 | 显示全部楼层 |阅读模式
求高人给个STM8-TIM4控制LED闪烁的例程,STVD环境下的,在用TIM4得时候碰到困难,手上没有例程,百度找参考没用。。。。。。。。。
<
回复

使用道具 举报

2

主题

26

回帖

0

蝴蝶豆

初级会员

最后登录
2017-5-23
发表于 2016-5-7 11:35:53 | 显示全部楼层
直接操作寄存器就可以了
回复 支持 反对

使用道具 举报

8

主题

10

回帖

0

蝴蝶豆

中级会员

最后登录
2017-12-23
 楼主| 发表于 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;
       
}

回复 支持 反对

使用道具 举报

8

主题

10

回帖

0

蝴蝶豆

中级会员

最后登录
2017-12-23
 楼主| 发表于 2016-5-7 16:29:36 | 显示全部楼层
嘻呵哈嘿吼 发表于 2016-5-7 11:35
直接操作寄存器就可以了

噢,没有错,是我示波器测错了,我测得是一个波形的周期,而实际应该是高电平的时间是100mS,这样就刚好与我程序100mS翻转对上了
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版