基于ARM的嵌入式系统开发5综述_第1页
基于ARM的嵌入式系统开发5综述_第2页
基于ARM的嵌入式系统开发5综述_第3页
基于ARM的嵌入式系统开发5综述_第4页
基于ARM的嵌入式系统开发5综述_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 1第五部分第五部分 软件设计软件设计-章章 I/O接口电路接口电路中断与定时器 2第五部分第五部分 软件设计软件设计- I/O接口接口电路电路什么是“中断”?中断服务程序中断服务程序发申请发申请中断服务程序中断服务程序发申请发申请外外设设CPU CPU CPU执行程序时,由于发生了某种随机的事件执行程序时,由于发生了某种随机的事件( (外部外部或内部或内部) ),引起,引起CPUCPU暂时中断正在运行的程序,转去执行暂时中断正在运行的程序,转去执行一段特殊的服务程序一段特殊的服务程序( (中断服务子程序或中断处理程序中断服务子程序或中断处理程序) ),以处理该事件,该事件处理完后又返回被中断

2、的程序继以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。续执行,这一过程称为中断。 EGEG:吃饭时突然手机铃响:吃饭时突然手机铃响中中断断示示意意图图 35.3 中断 第五部分第五部分 软件设计软件设计- I/O接口接口电路电路 STM32(Cortex-M3) STM32(Cortex-M3)中有两个优先级的概念:中有两个优先级的概念:抢占式优先级抢占式优先级和和响响应优先级应优先级,也把响应优先级称作,也把响应优先级称作“亚优先级亚优先级”或或“副优先级副优先级”,每,每个中断源都需要被指定这两种优先级。个中断源都需要被指定这两种优先级。1. 1. 何为占先式优

3、先级何为占先式优先级(pre-emption priority)(pre-emption priority) 高占先式优先级的中断事件会打断当前的主程序高占先式优先级的中断事件会打断当前的主程序/ /中断程序运中断程序运行行抢断式优先响应,俗称抢断式优先响应,俗称中断嵌套中断嵌套。2. 2. 何为副优先级何为副优先级(subpriority)(subpriority) 在占先式优先级相同的情况下,高副优先级的中断优先被响应;在占先式优先级相同的情况下,高副优先级的中断优先被响应; 在占先式优先级相同的情况下,如果有低副优先级中断正在执行,在占先式优先级相同的情况下,如果有低副优先级中断正在执行

4、,高副优先级的中断要等待已被响应的低副优先级中断执行结束后才高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应能得到响应非抢断式响应非抢断式响应( (不能嵌套不能嵌套) )。3. 3. 判断中断是否会被响应的依据判断中断是否会被响应的依据 首先是占先式优先级,其次是副优先级;首先是占先式优先级,其次是副优先级; 占先式优先级决定是否会有中断嵌套;占先式优先级决定是否会有中断嵌套; 4第五部分第五部分 软件设计软件设计- I/O接口接口电路电路4. 4. 优先级冲突的处理优先级冲突的处理 具有高抢占式优先级的中断可以在具有低抢占式优先级的中具有高抢占式优先级的中断可以在具有低抢

5、占式优先级的中断处理过程中被响应,即断处理过程中被响应,即中断的嵌套中断的嵌套,或者说高抢占式优先级的,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断两个中断同时到达同时到达,则中断控制器根据他们的响应优先级高低来,则

6、中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。等,则根据他们在中断表中的排位顺序决定先处理哪一个。 5第五部分第五部分 软件设计软件设计- I/O接口接口电路电路5. stm325. stm32中对中断优先级的定义中对中断优先级的定义 STM32STM32中指定中断优先级的寄存器位有中指定中断优先级的寄存器位有4 4位,这位,这4 4个寄存器位的分组个寄存器位的分组方式如下:方式如下: 第第0 0组:所有组:所有4 4位用于指定响应优先级位用

7、于指定响应优先级第第1 1组:最高组:最高1 1位用于指定抢占式优先级,最低位用于指定抢占式优先级,最低3 3位用于指定响应优先级位用于指定响应优先级第第2 2组:最高组:最高2 2位用于指定抢占式优先级,最低位用于指定抢占式优先级,最低2 2位用于指定响应优先级位用于指定响应优先级第第3 3组:最高组:最高3 3位用于指定抢占式优先级,最低位用于指定抢占式优先级,最低1 1位用于指定响应优先级位用于指定响应优先级第第4 4组:所有组:所有4 4位用于指定抢占式优先级位用于指定抢占式优先级具体怎样具体怎样设置在例设置在例程中详细程中详细讲解讲解! ! 6第五部分第五部分 软件设计软件设计- I

8、/O接口接口电路电路 STM32 STM32单片机单片机8080个通用个通用I/OI/O端口连端口连接到接到1919个外部中断个外部中断/ /事件源上。左图事件源上。左图为为STM32STM32单片机通用单片机通用I/OI/O与外部中断的与外部中断的映射关系:映射关系:PAxPAx、PBx PBx 、PCx PCx 、PDxPDx和和PExPEx端口对应的是同一个外部中断端口对应的是同一个外部中断/ /事事件源件源EXTIx(xEXTIx(x:0-15)0-15)。EXTI_LineEXTI_Line值值NVIC_IRQChannelNVIC_IRQChannel值值 7第五部分第五部分 软件

9、设计软件设计- I/O接口接口电路电路例:实现按键例:实现按键K1触发中断,触发中断,LED灯灯B1状态反转。状态反转。 8第五部分第五部分 软件设计软件设计- I/O接口接口电路电路void GPIO_Configuration(void)void GPIO_Configuration(void)/输入输出管脚配置输入输出管脚配置 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; / /配置输出脚配置输出脚PC0PC0控制控制LEDLED灯灯 GPIO_InitStructure.GPIO_Pi

10、n = GPIO_Pin_0; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GP

11、IO_Init(GPIOC, &GPIO_InitStructure); / /配置输入脚配置输入脚PA0PA0控制按键控制按键 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure

12、); GPIO_Init(GPIOA, &GPIO_InitStructure); 1步步 9第五部分第五部分 软件设计软件设计- I/O接口接口电路电路void NVIC_Configuration(void)void NVIC_Configuration(void) / /嵌套向量中断控制器配置嵌套向量中断控制器配置 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig( NVIC_PriorityGroupConfig(NVIC_Prio

13、rityGroup_1NVIC_PriorityGroup_1);); / /选择优先级组别选择优先级组别 NVIC_InitStructure.NVIC_IRQChannel = NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQnEXTI0_IRQn; ; / /选择中断通道:选择中断通道:EXTIEXTI线线0 0中断,因为按键连接的是中断,因为按键连接的是PA0PA0脚脚 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQCha

14、nnelPreemptionPriority = 0; /0 /0级抢占式优先级级抢占式优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /0 /0级副优先级级副优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; / /使能引脚作为中断源使能引脚作为中断源 NVIC_Init(&NV

15、IC_InitStructure); /NVIC_Init(&NVIC_InitStructure); /调用调用NVIC_InitNVIC_Init固件库函数进行设置固件库函数进行设置 2步步 10第五部分第五部分 软件设计软件设计- I/O接口接口电路电路void EXTI_Configuration(void)void EXTI_Configuration(void) / /调用固件库中的调用固件库中的GPIO_EXTILineConfigGPIO_EXTILineConfig函数,函数, /其中两个参数分别是中断口和中断口对应的引脚号其中两个参数分别是中断口和中断口对应的引脚号

16、 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_InitStructure.EXTI_Line = EXTI_Line0EXTI_Line0; ; / /将中断映射到中断将中断映射到中断/ /事件源事件源Line0Line0 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXT

17、I_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; / /中断模式中断模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_FallingEXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling / /设置为下降沿中断设置为下降沿中断 EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_InitStructure.EXTI_LineCmd = ENABLE; / /中断使能,即开中断中断使能,即开中断 EXTI_

18、Init(&EXTI_InitStructure);EXTI_Init(&EXTI_InitStructure); / /调用调用EXTI_InitEXTI_Init固件库函数,将结构体写入固件库函数,将结构体写入EXTIEXTI相关寄存器中相关寄存器中 3步步 11第五部分第五部分 软件设计软件设计- I/O接口接口电路电路void EXTI0_IRQHandler(void)void EXTI0_IRQHandler(void) if(EXTI_GetITStatus(EXTI_Line0) != RESET) if(EXTI_GetITStatus(EXTI_Line0)

19、 != RESET) / /将将LED1LED1的状态反转的状态反转 GPIO_WriteBit(GPIOC, GPIO_Pin_0, (BitAction)(1- GPIO_WriteBit(GPIOC, GPIO_Pin_0, (BitAction)(1- GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_0); GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_0); / /清中断清中断 EXTI_ClearITPendingBit(EXTI_Line0);EXTI_ClearITPendingBit(EXTI_Line0); 注意

20、:中断服务函数都包含在注意:中断服务函数都包含在“stm32f10 x_it.cstm32f10 x_it.c”文件中,文件中, 用的时候只需添加指令即可用的时候只需添加指令即可! ! 4步步 12第五部分第五部分 软件设计软件设计- I/O接口接口电路电路下载完程序后,按按键下载完程序后,按按键K1K1触发中断,触发中断,LEDLED灯灯B1B1状态反转。状态反转。实际操作:实际操作:修改程序,使中断通过按键修改程序,使中断通过按键K3K3触发,同时触发,同时4 4个个LEDLED灯状态反转?灯状态反转? 13第五部分第五部分 软件设计软件设计- I/O接口接口电路电路定时器 14第五部分第

21、五部分 软件设计软件设计- I/O接口接口电路电路由此我们知道对于一个定时器而言要做到精由此我们知道对于一个定时器而言要做到精确定时需要关注确定时需要关注2个内容个内容1.分频器分频器(分频比分频比)2.定时计数器的值定时计数器的值 15第五部分第五部分 软件设计软件设计- I/O接口接口电路电路n按功能划分按功能划分 2个高级控制定时器个高级控制定时器 TIM1 TIM8可分配可分配6个通道的三相个通道的三相PWM发生器(多用于发生器(多用于电机控制)电机控制) 4个普通定时器个普通定时器 TIM2 TIM3 TIM4 TIM5每个定时器有每个定时器有4个输入捕获个输入捕获/输出比较输出比较

22、/PWM/脉冲计数脉冲计数 16第五部分第五部分 软件设计软件设计- I/O接口接口电路电路 2个基本定时器个基本定时器 TIM6 TIM7 主要用于主要用于产生产生DAC触发信号触发信号 2个看门狗定时器个看门狗定时器 独立看门狗独立看门狗 窗口窗口看门狗看门狗 系统时基定时器系统时基定时器 SysTick24位递减计数器位递减计数器自动重加载自动重加载常用于产生延时常用于产生延时 us级级 ms级级 17第五部分第五部分 软件设计软件设计- I/O接口接口电路电路nCK_CNT 表示定时器工作频率表示定时器工作频率nTIMx_PSC 表示分频系数表示分频系数则定时器的工作频率计算公式为则定

23、时器的工作频率计算公式为CK_CNT=定时器时钟定时器时钟/ (TIMx_PSC +1)由此我们可得到由此我们可得到STM32单片机单片机1个时钟周期个时钟周期为:为: T=1/ CK_CNT 18第五部分第五部分 软件设计软件设计- I/O接口接口电路电路n例如普通定时器模块的时钟为例如普通定时器模块的时钟为72MHz,分分频比位频比位7199,那么我们想要得到一个,那么我们想要得到一个1秒秒钟的定时,定时计数器的值需要设定为钟的定时,定时计数器的值需要设定为nTIMx_ARR = 10 000n因为因为72 000 000 / 7200 = 10KHzn时钟周期时钟周期T=1/10KHz=

24、100usn100us 10 000 = 1S结论结论 :分频比:分频比7199 定时计数器的值定时计数器的值 10 000 19第五部分第五部分 软件设计软件设计- I/O接口接口电路电路寄存器操作编程寄存器操作编程nvoid Timer3_Init(u16 arr,u16 psc)nnRCC-APB1ENR |= 1 ARR = arr;/设置重装载值设置重装载值nTIM3-PSC = psc;/设置分频系数设置分频系数nTIM3-DIER |= 1 DIER |= 1 CR1 |= 1 =5) state=0; if(+state=5) state=0; 26第五部分第五部分 软件设计软

25、件设计- I/O接口接口电路电路void NVIC_Config(void)void NVIC_Config(void) NVIC_InitTypeDef NVIC_InitStructure;/ NVIC_InitTypeDef NVIC_InitStructure;/定义结构体变量定义结构体变量 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); / /设置优先分级组设置优先分级组 NVIC_InitStructure.NVIC_IRQChannel=

26、 NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQnTIM2_IRQn; ; / /选择中断通道。注意:固件库中为选择中断通道。注意:固件库中为XXX_IRQChannelXXX_IRQChannel,但该程序预定义为,但该程序预定义为 XXX_IRQn XXX_IRQn,所以要特别注意,所以要特别注意 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; / /先占优先级先占优先级 NV

27、IC_InitStructure.NVIC_IRQChannelSubPriority=0; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; / /从优先级从优先级 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; / /使能中断向量配置使能中断向量配置 NVIC_Init(&NVIC_InitStructure); NVIC_Init(&NVIC_InitStructure); / /按以上设置

28、初始化中断向量按以上设置初始化中断向量 27第五部分第五部分 软件设计软件设计- I/O接口接口电路电路void Timer_Config(void)void Timer_Config(void) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; / /定义定义TIMTIM结构体变量结构体变量 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1P

29、eriph_TIM2,ENABLE); / /使能使能TIM2TIM2外设外设 TIM_DeInit(TIM2);/TIM_DeInit(TIM2);/复位时钟复位时钟TIM2TIM2,恢复到初始状态,恢复到初始状态 TIM_TimeBaseStructure.TIM_Period=35999; TIM_TimeBaseStructure.TIM_Period=35999; TIM_TimeBaseStructure.TIM_Prescaler=1999; TIM_TimeBaseStructure.TIM_Prescaler=1999; TIM_TimeBaseStructure.TIM_C

30、lockDivision=TIM_CKD_DIV1; /TIM2 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /TIM2时钟分频时钟分频 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /计数方式计数方式 / /定时时间定时时间T T计算公式:计算公式: T=(TIM_Period+1)T=(TIM_Period+1)* *(TIM_Prescal

31、er+1)/TIMxCLK=(35999+1)(TIM_Prescaler+1)/TIMxCLK=(35999+1)* *(1999+1)/72MHz=1s(1999+1)/72MHz=1s TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); / TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); /初始化初始化 TIM_ClearFlag(TIM2,TIM_FLAG_Update); / TIM_ClearFlag(TIM2,TIM_FLAG_Update); /清除标志清除标志 TIM_IT

32、Config(TIM2,TIM_IT_Update,ENABLE); /TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); /使能中断源使能中断源 TIM_Cmd(TIM2,ENABLE); / TIM_Cmd(TIM2,ENABLE); /使能使能TIM2TIM2 28第五部分第五部分 软件设计软件设计- I/O接口接口电路电路void TIM2_IRQHandler(void)void TIM2_IRQHandler(void) if(TIM_GetITStatus(TIM2,TIM_IT_Update)=SET) if(TIM_GetITStatus(TIM

33、2,TIM_IT_Update)=SET) TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update); TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update); /清中断清中断 switch(state)switch(state) case 0: GPIO_SetBits(GPIOC,GPIO_Pin_0); case 0: GPIO_SetBits(GPIOC,GPIO_Pin_0); GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_

34、ResetBits(GPIOC,GPIO_Pin_2); GPIO_ResetBits(GPIOC,GPIO_Pin_2); GPIO_ResetBits(GPIOC,GPIO_Pin_3); GPIO_ResetBits(GPIOC,GPIO_Pin_3); default: default: break; break; if(+state=5) state=0; if(+state=5) state=0; 29第五部分第五部分 软件设计软件设计- I/O接口接口电路电路 通过对通过对TIM1TIM1定时器进行控制,使之各通道输出互补定时器进行控制,使之各通道输出互补PWMPWM,各通道输出

35、频率均为各通道输出频率均为20KHz20KHz。其中,通道。其中,通道1 1输出的占空比为输出的占空比为 50%50%,通道通道2 2输出的占空比为输出的占空比为25%25%,通道,通道3 3输出的占空比为输出的占空比为12.5%12.5%。各通。各通道互补输出为反相输出。道互补输出为反相输出。 TIM1TIM1定时器的通道定时器的通道1 1到到4 4的输出分别对应的输出分别对应PA8PA8、PA9PA9、PA10PA10和和PA11PA11引脚,而通道引脚,而通道1 1到到3 3的互补输出分别对应的互补输出分别对应PB13PB13、PB14PB14和和PB15PB15引脚,中止输入引脚为引脚

36、,中止输入引脚为PB12PB12。将这些引脚分别接入示波器,在。将这些引脚分别接入示波器,在示波器上观查相应通道占空比的方波。示波器上观查相应通道占空比的方波。 30第五部分第五部分 软件设计软件设计- I/O接口接口电路电路 由于由于TIM1TIM1计数器的时钟频率为计数器的时钟频率为72MHz72MHz,要想得到各通道,要想得到各通道PWMPWM输输出频率为出频率为20KHz20KHz,根据公式:,根据公式: TIM1TIM1频率频率=TIM1CLK/(TIM1_Period+1)=TIM1CLK/(TIM1_Period+1), 则则TIM1_PeriodTIM1_Period为为360

37、0-13600-1。 由于通道输出占空比等于由于通道输出占空比等于: :TIM1_CCRx/(TIM1_Period+1);TIM1_CCRx/(TIM1_Period+1); 可以得到各通道比较可以得到各通道比较/ /捕获寄存器的计数值。其中,通道捕获寄存器的计数值。其中,通道1 1的的TIM1_CCR1TIM1_CCR1寄存器的值为寄存器的值为18001800,通道,通道2 2的的TIM1_CCR2TIM1_CCR2寄存器的值为寄存器的值为900900,通道,通道3 3的的TIM1_CCR3TIM1_CCR3寄存器的值为寄存器的值为450450。 具体怎样设置在例程中详细讲解具体怎样设置在

38、例程中详细讲解! ! 31第五部分第五部分 软件设计软件设计- I/O接口接口电路电路u16 CCR1_Val = 1800; /u16 CCR1_Val = 1800; /设置设置TIM1TIM1通道通道1 1输出占空比输出占空比50%50%u16 CCR2_Val = 900; /u16 CCR2_Val = 900; /设置设置TIM1TIM1通道通道1 1输出占空比输出占空比2525% %u16 CCR3_Val = 450; /u16 CCR3_Val = 450; /设置设置TIM1TIM1通道通道1 1输出占空比输出占空比12.512.5% %TIM1_TimeBaseStruc

39、ture.TIM_Prescaler = 0 x0;TIM1_TimeBaseStructure.TIM_Prescaler = 0 x0;/TIM1/TIM1时钟频率的预分频值时钟频率的预分频值TIM1_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM1_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;/向上计数向上计数TIM1_TimeBaseStructure.TIM_Period = 3600-1;TIM1_TimeBaseStructure.TIM_Per

40、iod = 3600-1;/自动重装载寄存器周期值自动重装载寄存器周期值TIM1_TimeBaseStructure.TIM_ClockDivision = 0 x0;TIM1_TimeBaseStructure.TIM_ClockDivision = 0 x0;/时钟分割值时钟分割值TIM1_TimeBaseStructure.TIM_RepetitionCounter = 0 x0;TIM1_TimeBaseStructure.TIM_RepetitionCounter = 0 x0;TIM_TimeBaseInit(TIM1,&TIM1_TimeBaseStructure);TI

41、M_TimeBaseInit(TIM1,&TIM1_TimeBaseStructure);/初始化初始化TIM1TIM1的时间计数数据的时间计数数据 32第五部分第五部分 软件设计软件设计- I/O接口接口电路电路 / /* *选择定时器输出比较为选择定时器输出比较为PWMPWM模式模式2 2。在向上计数时,当。在向上计数时,当 TIM1_CNTTIM1_CRR1TIM1_CNTTIM1_CRR1TIM1_CNTTIM1_CRR1时,通道时,通道1 1为有效电平,否则为无效电为有效电平,否则为无效电 平。如果选择平。如果选择PWMPWM模式模式1 1,则相反。,则相反。* */ / T

42、IM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; /选择输出比较状态,以及互补输出比较状态选择输出比较状态,以及互补输出比较状态 TIM1_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM1_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM1_OCInitStructure.TIM_OutputNS

43、tate = TIM_OutputNState_Enable; TIM1_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; / /设置通道设置通道1 1捕获比较寄存器的脉冲值捕获比较寄存器的脉冲值- -占空比为占空比为50% 50% TIM1_OCInitStructure.TIM_Pulse = CCR1_Val; TIM1_OCInitStructure.TIM_Pulse = CCR1_Val; / /输出极性和互补极性的有效电平为低输出极性和互补极性的有效电平为低 TIM1_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM1_OCInitStructure.TIM_OCPolarity =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论