×
单片机 > 单片机程序设计 > 详情

STM32笔记之十:工作工作,PWM输出

发布时间:2020-06-22 发布时间:
|
a)        目的:基础PWM输出,以及中断配合应用。输出选用PB1,配置为TIM3_CH4,是目标板的LED6控制脚。

b)        对于简单的PWM输出应用,暂时无需考虑TIM1的高级功能之区别。

c)        初始化函数定义:

void TIM_Configuration(void);  //定义TIM初始化函数

d)        初始化函数调用:

TIM_Configuration();  //TIM初始化函数调用

e)        初始化函数,不同于前面模块,TIM的初始化分为两部分——基本初始化和通道初始化:

void TIM_Configuration(void)//TIM初始化函数

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//定时器初始化结构

  TIM_OCInitTypeDef  TIM_OCInitStructure;//通道输出初始化结构

//TIM3初始化

  TIM_TimeBaseStructure.TIM_Period = 0xFFFF;        //周期0~FFFF

  TIM_TimeBaseStructure.TIM_Prescaler = 5;          //时钟分频

  TIM_TimeBaseStructure.TIM_ClockDivision = 0;      //时钟分割

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);   //基本初始化

  TIM_ITConfig(TIM3, TIM_IT_CC4, ENABLE);//打开中断,中断需要这行代码

//TIM3通道初始化

  TIM_OCStructInit(& TIM_OCInitStructure);                                                //默认参数

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;          //工作状态

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;         //设定为输出,需要PWM输出才需要这行代码

  TIM_OCInitStructure.TIM_Pulse = 0x2000;                    //占空长度

  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;      //高电平

  TIM_OC4Init(TIM3, &TIM_OCInitStructure);                   //通道初始化

  TIM_Cmd(TIM3,ENABLE);                                      //启动TIM3

}

f)        RCC初始化函数中加入TIM时钟开启:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM3, ENABLE);

g)        GPIO里面将输入和输出管脚模式进行设置。信号:AF_PP,50MHz。

h)        使用中断的话在NVIC里添加如下代码:

//打开TIM2中断

  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;  //通道

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;//占先级

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;           //响应级

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //启动

  NVIC_Init(&NVIC_InitStructure);                                            //初始化

中断代码:

void TIM2_IRQHandler(void)

{

  if (TIM_GetITStatus(TIM2, TIM_IT_CC4) != RESET)       //判断中断来源

  {

    TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);            //清除中断标志

    GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_11)));//变换LED色彩

    IC4value = TIM_GetCapture4(TIM2);                   //获取捕捉数值

  }  

}

i)        简单应用:

//改变占空比

TIM_SetCompare4(TIM3, 变量);

j)        注意事项:

管脚的IO输出模式是根据应用来定,比如如果用PWM输出驱动LED则应该将相应管脚设为AF_PP,否则单片机没有输出。
关键字:STM32  PWM输出

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR单片机语音识别电路模块设计