tim定时器能全部使用吗
西门子s7-200plc定时器的特点及使用方法?
西门子s7-200plc定时器的特点及使用方法?
特点
PLC所提供的定时器作用相当于继电器控制系统中的时间继电器,用于延(定)时控制。每个定时器可提供无数对常开和常闭触点供编程使用。其设定时间由程序设置。
它有线圈,有接点(标志位),还有寄存器(存放定时器现值)。定时的设定值可为常数,也可为某个(字)地址,再用这个地址的内容作为设定值。每个定时器有一个16位的当前值寄存器,用于存储定时器累计的时基增量值(1~32767),另有一个状态位表示定时器的状态。若当前值寄存器累计的时基增量值大于等于设定值时,定时器的状态位被置“1”,该定时器的常开触点闭合。
STM32实现定时与计数的方法有哪些?
(一)系统时钟(SysTick)
设置非常简单,以下是产生1ms中断的设置,和产生10ms延时的函数:
void RCC_Configuration(void)
{
RCC_ClocksTypeDef RCC_ClockFreq
SystemInit()//源自system_stm32f10x.c文件,只需要调用此函数,则可完成RCC的配置.
RCC_GetClocksFreq(ampRCC_ClockFreq)
//SYSTICK分频--1ms的系统时钟中断
if (SysTick_Config(SystemFrequency / 1000))
{
while (1) // Capture error
}
}
void SysTick_Handler(void)//在中断处理函数中的程序
{
while(tim)
{
tim--
}
}
//调用程序:
Delay_Ms(10)
当然,前提是要设置好,变量tim要设置成volatile类型的。
(二)第二种涉及到定时器计数时间(TIMx)
/*TIM3时钟配置*/
TIM_TimeBaseStructure.TIM_Prescaler 2 //预分频(时钟分频)72M/(2 1)24M
TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up //向上计数
TIM_TimeBaseStructure.TIM_Period 65535 //装载值18k/144125hz
TIM_TimeBaseStructure.TIM_ClockDivision TIM_CKD_DIV1
TIM_TimeBaseStructure.TIM_RepetitionCounter 0x0
TIM_TimeBaseInit(TIM3,ampTIM_TimeBaseStructure)
定时时间计算:
TIM_TimeBaseStructure.TIM_Prescaler 2
//分频2 72M/(2 1)/224MHz
TIM_TimeBaseStructure.TIM_Period 65535 //计数值65535
((1 TIM_Prescaler )/72M)*(1 TIM_Period )((1 2)/72M)*(1 65535)0.00273秒366.2Hz */
注意两点(来自大虾网,未经检验)
(1)TIMx(1-8),在库设置默认的情况下,都是72M的时钟
(2)TIM_TimeBaseStructure.TIM_RepetitionCounter0
是重复计数,就是重复溢出多少次才给你来一个溢出中断,
它对应的寄存器叫TIM1 RCR.
如果这个值不配置,上电的时候寄存器值可是随机的,本来1秒中断一次,可能变成N秒中断一次,让你超级头大!
假设系统时钟是72Mhz,TIM1是由PCLK2(72MHz)得到,TIM2-7是由PCLK1得到
关键是设定时钟预分频数,自动重装载寄存器周期的值
/*每1秒发生一次更新事件(进入中断服务程序)。RCC_Configuration()的SystemInit()的
RCC-gtCFGR | (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。因此,每次进入中
断服务程序间隔时间为
((1 TIM_Prescaler )/72M)*(1 TIM_Period )((1 7199)/72M)*(1 9999)1秒*/
定时器的基本设置
1、 TIM_TimeBaseStructure.TIM_Prescaler 7199//时钟预分频数 例如:时
钟频率72/(时钟预分频 1)
2、TIM_TimeBaseStructure.TIM_Period 9999 //自动重装载寄存器周期的值(定时
时间) 累计0xFFFF个频率后产生个更新或者中断(也是说定时时间到)
3、 TIM_TimeBaseStructure.TIM_CounterMode TIM1_CounterMode_Up //定时器
模式向上计数
4、TIM_TimeBaseStructure.TIM_ClockDivision 0x0 //时间分割值
5、TIM_TimeBaseInit(TIM2, ampTIM_TimeBaseStructure)//初始化定时器2
6、TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE) //打开中断 溢出中断
7、TIM_Cmd(TIM2, ENABLE)//打开定时器
或