3962|3

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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,否则单片机没有输出。
此帖出自stm32/stm8论坛

最新回复

                                 都写到笔记十了,很不错  详情 回复 发表于 2010-12-12 19:48
点赞 关注
 

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 记下了!!!
此帖出自stm32/stm8论坛
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 好像是stm32提供的例子吧,请问LZ这个例子真的能够输出PWM波么?好像还应该加一句TIM_CtrlPWMOutputs吧,以前讨论过的
此帖出自stm32/stm8论坛
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 都写到笔记十了,很不错
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表