打印

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

[复制链接]
4824|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sw笨笨|  楼主 | 2009-2-27 09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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,否则单片机没有输出。
沙发
yulri| | 2010-12-11 21:09 | 只看该作者
记下了!!!

使用特权

评论回复
板凳
say_sth_freely| | 2010-12-12 12:22 | 只看该作者
好像是stm32提供的例子吧,请问LZ这个例子真的能够输出PWM波么?好像还应该加一句TIM_CtrlPWMOutputs吧,以前讨论过的

使用特权

评论回复
地板
dfsa| | 2010-12-12 19:48 | 只看该作者
都写到笔记十了,很不错

使用特权

评论回复
5
zhanxiage110| | 2012-4-26 14:05 | 只看该作者
我想问下我楼上的楼上说的有道理么?  感谢楼主分享

使用特权

评论回复
6
logokfu| | 2012-4-26 14:50 | 只看该作者
号东西

使用特权

评论回复
7
dream-yi| | 2012-5-15 23:40 | 只看该作者
好东西

使用特权

评论回复
8
hklove| | 2012-5-16 00:50 | 只看该作者
学习了,谢谢咯

使用特权

评论回复
9
13249207512| | 2012-12-30 21:04 | 只看该作者

使用特权

评论回复
10
ren0zhe| | 2013-9-11 11:36 | 只看该作者
顶一个,支持一下

使用特权

评论回复
11
Forever_092| | 2014-3-15 09:21 | 只看该作者
呵呵,有点意思

使用特权

评论回复
12
fjjjnk1234| | 2014-3-16 10:19 | 只看该作者
谢谢分享!支持下!!!!!!!:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

31

帖子

0

粉丝