STM32学习笔记:PWM

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,否则单片机没有输出。  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值