《嵌入式计时器以及simulink设计实现.docx》由会员分享,可在线阅读,更多相关《嵌入式计时器以及simulink设计实现.docx(11页珍藏版)》请在第一文库网上搜索。
1、嵌入式计时器以及Simu1ink设计实现嵌入式计时器简介嵌入式计时器是一种在燧式系统中用于计时、计数和测量时间间隔的设备。它们通常用于生成精确的延迟、测量输入信号的频率或产生PWM信号。嵌入式计时器主要包括鲤件计时器(例如定时造/计数器、实时时钟)和软件计时器。1 嵌入式计时器类型2 .硬件计时器:硬件计时器通常集成在微控制器或处理器中,包括定时器/计数器、实时时钟(RTC)等。它们可以精确地计算时间间隔,适用于对时间精度要求较高的场景。3 .软件计时器:软件计时器是使用软件代码实现的计时器,通常通过使用系统时针或硬件计时器作为基准。它们相较于硬件计时器在精度上可能略有差距,但便于扩展和灵活控
2、制。嵌入式计时器应用4 .延时:嵌入式计时器可以用于产生精确的延迟,例如在执行任务之间的间隔。5 .计数:计时器可以用于计数操作,例如检测外部事件发生的次数。1 .频率测量:计时器可以用于测量外部信号的频率,例如捕获输入信号的上升沿和下降沿。1. PWM信号生成:嵌入式计时器可以用于生成PWM信号,用于控制电机、1ED等设备。示例代码(以STM32为例)使用STM32F10x微控制器实现延时功能的示例代码(硬件实现)。inc1ude”stm32f10x.h#inc1ude,stm32f10x_gpio.hzzftinc1ude,stm32fIOxrcc.h#inc1ude,zstm32fIOx
3、tim.h/配置TIM2以生成时间基准voidTIM2_Configuration(void)TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;/使能TIM2时钟RCC_APBIPeriphC1ockCmd(rcc_apbiPeriph_Tim2zenab1e);/配置TIM2基本参数TIM_TimeBaseStructure.TIM_Period=999;/设置计数器自动重装值TIM_TimeBaseStructure.TIM_Presca1er=71;/设置预分频TIMTimeBaseStructure.TIM_C1ockDivision=TIM_C
4、KD_DIV1;TIM_TimeBaseStructure.TIMCounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2,&T1M_TimeBaseStructure);/使能TIM2Tn1CnId(T工M2,ENAB1E);voidde1ay_ms(uint16_tms)uint16_ti;for(i=0;ims;i+)(TIMSetCounter(tim2,O);whiIe(TIMGetCounter(tim2)1000)()intmain(void)/初始化系统配置SystemInit();/配置TIM2以生成时间基准TIM2Config
5、uration();whi1e(1)(/延时1000毫秒de1ay_ms(1000);/.其他代码(可以根据需要执行一些动作).)使用STM32F10x微控制器实现延时功能的示例代码(软件实现)。inc1ude,stm32f10x.hzzftinc1ude,stm32f10x_gpio.h,z#inc1udez,stm32f10x_rcc.hzzftinc1udez,stm32f10x_tim.hz,/获取系统时钟uint32_tSystemCoreC1ock;/延时微秒VOidde1ay_us(uint32_tus)uint32_ti,j;uint32_tcount=(SystemCoreC
6、1ock/8000000)*us;f(i=0;icount;i+)(for(j=0;j2;j+)(_nop();/NoOPeration指令,用于延时)/延时毫秒Voidde1ay_ms(uint32_tms)uint32_ti;f(i=0;ims;i+)(de1ay_us(1000);)intmain(void)/初始化系统配置SystemInit();/获取系统时钟SystemCoreC1ock=SystemCoreC1ock;whi1e(1)I/延时1000毫秒de1ay_ms(1000);/.其他代码(可以根据需要执行一些动作).)使用STM32F10x微控制器的计数器功能的示例代码(
7、硬件实现)。ftinc1udezzstm32f10x.h,ftinc1ude,stm32f10x_gpio.h,ftinc1ude“stm32f10x_rCC.h#inc1ude/zstm32f10x_tim.h,zvoidTIM2_Counter_Config(void)GPIO_InitTypeDefGPIO_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIMIC1nitTypeDefTIM_ICInitStructure;/使能TIM2和GPIOA时钟RCC_APBIPeriphC1ockCmd(rcc_apbiP
8、eriph_Tim2zenab1e);RCC_APB2PeriphC1ockCmd(RCC_APB2Periph_GPiOA,enab1e);/配置GP1oAO作为输入,上拉GPIO_InitStructure.GPIQPin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIOInit(GPIOAz&GPIOInitStructure);/配置TIM2基本参数TIM_TimeBaseStructure.TIM_Period=OxFFFF;TIM_TimeBaseStructure.TIM_Presca1er=0;TIMTimeB
9、aseStructure.TIMC1ockDivision=TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIMTimeBaseInit(TIM2,&TIM_TimeBaseStructure);/配置TIM2的输入捕获TIM_ICInitStructure.TIM_Channe1=TIM_Channe1_1;TIM_ICInitStructure.TIM_ICPo1arity=TIM_ICPo1arity_Rising;/上升沿捕获TIM_ICInitStructure.TIM_ICSe1ectio
10、n=TIM_ICSe1ection_DirectTI;T1M1CInitStructure.T1MICPresca1er=TiM1iCPSJD1V1;一TIM_ICInitStructure.TIM_ICFi1ter=0x0;Tn1PWM1Config(T工M2,&TIM_ICInitStructure);/使能TIM2TIMCmd(iM2,enab1e);intmain(void)uint16tcounter_va1ue;TIM2_Counter_Config();/配置T1M2计数器whi1e(1)(counter_va1ue=TIM_GetCounter(TIM2);/读取T1M2计数器
11、的值.其他代码(可以根据需要处理计数值).)使用STM32F10x微控制器的计数器功能的示例代码(软件实现)。ftinc1ude,stm32f10x.hzzftinc1ude,stm32f10x_gpio.h/z#inc1ude,stm32f10x_rcc.hzzftinc1udez,stm32f10x_exti.h,z#inc1udemisc.hvo1ati1euint32_tpu1seCounter=0;voidEXTIO_Configuration(void)EXTI_InitTypeDefEXTI_InitStructure;GPIO_InitTypeDefGPIO_InitStruc
12、ture;NVIC_InitTypeDefNVIC_InitStructure;/使能GP1oA时钟RCC_APB2PeriphC1ockCmd(RCC_APB2Periph_GPiOA,enab1e);/配置GP1OAO作为输入,上拉GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GP工0二工nitStructure.GP工O1MOde=GPIO_Mode_IPU;GPIO_Init(GPIOA,&GP工O1nitStrUCtUre);/使能AF1O时钟RCC_APB2PeriphC1ockCmd(RCC_APB2Periph_AFio,enab1e);/配置G
13、P1OAo为外部中断源GPIO_EXTI1ineConfig(GP工O-PortSourceGP工OA,GPIO_PinSourceO);/配置EXTI线OEXTI_InitStructure.EXTI_1ine=EXTI_1ineO;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;EXTIInitStructure.EXTI1ineCmd=ENAB1E;EXTI-Iit(&EXTI_InitStructure);/配置NVICNVIC_In
14、itStructure.NVIC_IRQChanne1=EXT1O_IRQn;NVIC_InitStructure.NVIC_IRQChanne1PreemptionPriority=OxO1;NVIC_InitStructure.NVICIRQChanne1SubPriority=0x01;NV工C1工nitStructure.NV工C1工RQChanne1Cmd=ENAB1E;NVIC_Init(&NV!C_InitStructure);)voidEXTIO-IRQHand1er(void)if(EXTI-GetITStatUS(EXTI_1ineO)!=RESET)(Pu1seCount
15、er+;/增加脉冲计数值EXTI-C1earITPendingBit(EXTi_1ineO);/清除中断标志位)intmain(void)uint32_tcounter_va1ue;EXTIO,Configuration();/配置外部中断(EXTI)whi1e(1)(counter_va1ue=pu1seCounter;/读取脉冲计数值.其他代码(可以根据需要处理计数值).)使用STM32F10x微控制器生成PwM信号的示例代码(硬件实现)。inc1udez,stm32f10x.hz,ftinc1ude,stm32f10x_gpio.h,z#inc1ude,zstm32f10x_rcc.hz/#inc1udez,stm32f10x_tim.hz,/配置T1M3以生成PWM信号VOidTIM3-P-Configuration(void)GPIO_InitTypeDefGPI0_InitStructure;