你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【学习经验】STM32笔记之十:工作工作,PWM输出

[复制链接]
ashantx 发布时间:2015-5-20 18:42
sw笨笨的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,否则单片机没有输出。  

收藏 2 评论4 发布时间:2015-5-20 18:42

举报

4个回答
wtliu 回答时间:2015-5-20 20:22:55
正要研究PWM的东东,感谢!
风子 回答时间:2015-5-20 22:22:22
wtliu 发表于 2015-5-20 20:22
正要研究PWM的东东,感谢!

我博客有3篇关于PWM的日记,前段时间捣鼓的时候写的
759611 回答时间:2015-5-21 09:00:42
不错,写的很详细!感谢分享!
夏明smile 回答时间:2015-5-21 09:08:16
st
币还会下降?

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版