我现在打算用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;”这段删了他后就能有计数(删了后应该默认使用内部时钟来计数吧)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
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出来就行了。
一周热门 更多>