嵌入式系统原理及应用项目化教程 课件 项目五 呼吸灯控制设计与实现_第1页
嵌入式系统原理及应用项目化教程 课件 项目五 呼吸灯控制设计与实现_第2页
嵌入式系统原理及应用项目化教程 课件 项目五 呼吸灯控制设计与实现_第3页
嵌入式系统原理及应用项目化教程 课件 项目五 呼吸灯控制设计与实现_第4页
嵌入式系统原理及应用项目化教程 课件 项目五 呼吸灯控制设计与实现_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统原理及应用

项目化教程项目5呼吸灯控制设计与实现学习目标1.掌握STM32通用定时器的原理及软件配置;2.掌握STM32通用定时器中断及软件配置;3.掌握STM32PWM的原理;4.利用定时器实现PWM呼吸灯。目录5.1定时器介绍5.2任务9使用定时器实现PWM控制5.1定时器介绍通用定时器的内部结构框图5.1定时器介绍5.1定时器介绍5.1定时器介绍5.1定时器介绍5.1定时器介绍5.1定时器介绍5.1定时器介绍定时器中断实验APB1时钟X1/X2F(CK_PSC)

÷NCK_CNT内部时钟选择5.1定时器介绍定时器中断实验时钟计算方法:5.1定时器介绍定时器中断实验通用定时器可以向上计数、向下计数、向上向下双向计数模式。①向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。②向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。③中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。计数器模式5.1定时器介绍向下计数模式(时钟分频因子=1)5.1定时器介绍向上计数模式(时钟分频因子=1)5.1定时器介绍中央对齐计数模式(时钟分频因子=1ARR=6)5.1定时器介绍计数器当前值寄存器CNT5.1定时器介绍预分频寄存器TIMx_PSC5.1定时器介绍自动重装载寄存器(TIMx_ARR)5.1定时器介绍控制寄存器1(TIMx_CR1)5.1定时器介绍DMA中断使能寄存器(TIMx_DIER)5.1定时器介绍常用库函数voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct);定时器参数初始化:voidTIM_Cmd(TIM_TypeDef*TIMx,FunctionalStateNewState)定时器使能函数:定时器中断使能函数:voidTIM_ITConfig(TIM_TypeDef*TIMx,uint16_tTIM_IT,FunctionalStateNewState);5.1定时器介绍状态标志位获取和清除FlagStatusTIM_GetFlagStatus(TIM_TypeDef*TIMx,uint16_tTIM_FLAG);voidTIM_ClearFlag(TIM_TypeDef*TIMx,uint16_tTIM_FLAG);ITStatusTIM_GetITStatus(TIM_TypeDef*TIMx,uint16_tTIM_IT);voidTIM_ClearITPendingBit(TIM_TypeDef*TIMx,uint16_tTIM_IT);5.1定时器介绍定时器中断实现步骤能定时器时钟。RCC_APB1PeriphClockCmd();②

初始化定时器,配置ARR,PSC。

TIM_TimeBaseInit();开启定时器中断,配置NVIC。

voidTIM_ITConfig();

NVIC_Init();④

使能定时器。

TIM_Cmd();⑥

编写中断服务函数。

TIMx_IRQHandler();5.1定时器介绍TIM2初始化函数voidTIM2_Init(u16per,u16psc){TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2时钟TIM_TimeBaseInitStructure.TIM_Period=per;//自动装载值TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//分频系数TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//设置向上计数模式TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开启定时器中断TIM_ClearITPendingBit(TIM2,TIM_IT_Update);NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;//定时器中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//子优先级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM4,ENABLE);//使能定时器}5.1定时器介绍TIM2中断函数voidTIM2_IRQHandler(void){if(TIM_GetITStatus(TIM2,TIM_IT_Update)){led1=!led1;}TIM_ClearITPendingBit(TIM2,TIM_IT_Update); }5.1定时器介绍主函数#include"system.h"#include"SysTick.h"#include"led.h"#include"time.h"intmain(){u8i;SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组,分2组LED_Init();TIM2_Init(1000,36000-1);//定时500mswhile(1){i++;if(i%20==0){led0=!led0;}delay_ms(10);}}

通过TIM2的更新中断控制LED1指示灯间隔500ms秒状态取反,主函数控制LED0指示灯不断闪烁。5.2任务9使用定时器实现PWM控制

脉冲宽度调制PWM(PulseWidthModulation)是利用微处理器的数字输出来对模拟电路进行控制的一种技术手段。就是调节一个周期中高电平所占的百分比,也就是调节占空比。比如可以通过调节占空比来控制直流电机的通电时间,以达到调速的目的,或通过调节占空比控制加热时间,进行温度控制等。5.2任务9使用定时器实现PWM控制STM32PWM工作过程5.2任务9使用定时器实现PWM控制STM32PWM工作过程5.2任务9使用定时器实现PWM控制STM32PWM工作过程(通道1为例)CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。CCMR1:OC1M[2:0]位:

对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】CCER:CC1P位:输入/捕获1输出极性。0:高电平有效,1:低电平有效。CCER:CC1E位:输入/捕获1输出使能。0:关闭,1:打开。5.2任务9使用定时器实现PWM控制PWM模式1&PWM模式25.2任务9使用定时器实现PWM控制5.2任务9使用定时器实现PWM控制voidTIM_OC2PreloadConfig(TIM_TypeDef*TIMx,uint16_tTIM_OCPreload);voidTIM_ARRPreloadConfig(TIM_TypeDef*TIMx,FunctionalStateNewState);5.2任务9使用定时器实现PWM控制自动重载的预装载寄存器voidTIM_ARRPreloadConfig(TIM_TypeDef*TIMx,FunctionalStateNewState);简单的说,ARPE=1,ARR立即生效APRE=0,ARR下个比较周期生效。5.2任务9使用定时器实现PWM控制STM32定时器3输出通道引脚5.2任务9使用定时器实现PWM控制PWM输出配置步骤

使能定时器3和相关IO口时钟。

使能定时器3时钟:RCC_APB1PeriphClockCmd();

使能GPIOB时钟:RCC_APB2PeriphClockCmd();②

初始化IO口为复用功能输出。函数:GPIO_Init();

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置,

所以需要开启AFIO时钟。同时设置重映射。RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);④

初始化定时器:ARR,PSC等:TIM_TimeBaseInit();⑤

初始化输出比较参数:TIM_OC2Init();⑥

使能预装载寄存器:TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);⑦

使能定时器。TIM_Cmd();⑧

不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2();5.2任务9使用定时器实现PWM控制TIM3通道3的PWM初始化代码voidTIM3_CH1_PWM_Init(u16per,u16psc){TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;TIM_OCInitTypeDefTIM_OCInitStructure;GPIO_InitTypeDefGPIO_InitStructure;/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/*配置GPIO模式和IO口*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射TIM_TimeBaseInitStructure.TIM_Period=per;//自动装载值TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//分频系数TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//设置向上计数模式TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OC1Init(TIM3,&TIM_OCInitStructure);//输出比较通道3初始化TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能TIMx在CCR1上的预装载寄存器TIM_ARRPreloadConfig(TIM3,ENABLE);//使能预装载寄存器TIM_Cmd(TIM3,ENABLE);//使能定时器}

硬件电路只使用到开发板上的LED0,连接在PB0管脚。要实现的功能是:通过TIM3的CH3输出一个PWM信号,控制LED0指示灯由暗变亮,再由亮变暗。5.2任务9使用定时器实现PWM控制#include"system.h"#include"SysTick.h"#include"led.h"#include"pwm.h"intmain(){u16i=0;u8fx=0;SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组,分2组LED_Init();TIM3_CH1_PWM_Init(500,72-1);//频率是2

温馨提示

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

评论

0/150

提交评论