请教一下STM8定时器1的外部时钟模式2使用方法

2019-07-19 21:02发布

 我现在打算用STM8S105S4的TIM1的外部时钟模式2,计算一个脉冲频率。但我参照STM8的参考手册方式写出来后,仿真时怎样也读不到外部的脉冲信号。
程序如下:
void TIM1_init(void)
{
TIM1_ETR=0x40;  //0x40=0100 0000,脉冲高电平有效、使能外部时钟2模式、预分频关闭、以fMASTER取样
TIM1_ARRH=0x00; //随便打的
TIM1_ARRL=0xAA;//随便打的
TIM1_IER=0x01;  //开中断
TIM1_CR1;//开始计数
}

#pragma vector=TIM1_OVR_UIF_vector
__imterrupt void TIM1_OVR_UIF(void)
{ TIM1_SR1=0;}

1、我在仿真时查询TIM1_CNTRH、TIM1_CNTRL时怎样都为0,且不出中断。请问具体是我的软件编写还是外部输入电路有问题呢?我已将信号发生器接到PB3(18脚上)
2、我试了一下将“TIM1_ETR=0x40;”这段删了他后就能有计数(删了后应该默认使用内部时钟来计数吧)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
正点原子
1楼-- · 2019-07-20 02:30
 精彩回答 2  元偷偷看……
地主斌
2楼-- · 2019-07-20 07:22
 精彩回答 2  元偷偷看……
地主斌
3楼-- · 2019-07-20 12:20
搞了两天都不行。最后换为外部时钟1模式就得了。先用住吧,计算外部频率。

void TIM1_init(void)   //定时器1配置(外部时钟模式1)
{
 // TIM1_CCMR2=0x01;   //定时器1通道2脉冲输入PC2的25脚
 // TIM1_CCER1=0x20;   //定时器1通道2脉冲输入PC2
 // TIM1_SMCR=0x67;    //定时器1通道2脉冲输入PC2
  TIM1_CCMR1=0x9d;    //定时器1通道1脉冲输入PC1的24脚,5d(240K),9d(60K)
  TIM1_CCER1=0x02;    //定时器1通道1脉冲输入PC1,0x02
  TIM1_SMCR=0x57;     //定时器1通道1脉冲输入PC1,0x57
  TIM1_CR1=0x01;      //开始计数,0x01
}


然后用程序里面个时钟定时器,逢100MS读一次当前脉冲数:
if(TS7==100)            //TS7*100=1msX100=0.1s 取样一次温度值
    {
     TS7=0;
     FHz=TIM1_CNTRH;     //先读高8位,默认设置数据左对齐
     FHz=FHz<<8;
     FHz|=TIM1_CNTRL;   // 再读低8位
     FHz=FHz<<1;
     TIM1_CNTRH=TIM1_CNTRL=0; //清当前计数器值
    }    

最后直接在屏上显示FHz出来就行了。
正点原子
4楼-- · 2019-07-20 12:45
 精彩回答 2  元偷偷看……
wxs732
5楼-- · 2019-07-20 16:22
TIM1_ERT 设置的问题, 我肯定能测试到计数功能 或你要求的频率问题。亲测。你可搜 模式2 计数功能 ,我发在电子发烧友论坛上,

一周热门 更多>