找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3057|回复: 0
打印 上一主题 下一主题
收起左侧

STM32的PWM输出例程

[复制链接]
跳转到指定楼层
楼主
ID:82083 发表于 2015-6-9 02:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                        阅读了ALIENTEK MINI板的PWM实验例程,感觉可以简化一下,简化后如下:
(其中工程里面的delay.c和delay.h可以在配套光盘里找也可以网上下载)
--------------------------------------------------------------
初始化文件,可以随意命名,在此命名为Timer3PWM.c
--------------------------------------------------------------
#include "stm32f10x.h"

//arr:自动重装值   psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
  TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
                        RCC_APB2Periph_AFIO,ENABLE);//使能GPIO和服用功能时钟

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;  //PWM输出在PA7
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
  GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIO

   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8; //PA8连DS0
  //为防止PA8的输出干扰DS0的显示,应配置PA8为浮空输入
   GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA,&GPIO_InitStructure);

  TIM_TimeBaseStructure.TIM_Period = arr;//设置自动重装载周期值
  TIM_TimeBaseStructure.TIM_Prescaler = psc;//设置预分频值
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;//设置时钟分割
  TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//初始化TIM3

  TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM2; //选择PWM模式2
  TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable; //比较输出使能
  TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High; //输出极性高
TIM_OC2Init(TIM3,&TIM_OCInitStructure);//初始化外设TIM3OC2

  TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能预装载寄存器
  TIM_Cmd(TIM3,ENABLE); //使能TIM3
}
void NVIC_Config(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:
                                                  // 2位抢占优先级,2位响应优先级
}
-----------------------------------------------------------------------------
主函数,命名为main.c
-----------------------------------------------------------------------------

#include"stm32f10x.h"
#include "delay.h"
#include "timer3PWM.h"
void main(void)
{
  u16 ledpwmval = 0;
  u8 dir = 1;
   delay_init(72);//时钟延时初始化
   TIM3_PWM_Init(899,0);//PWM频率72000/900 = 8KHz
   NVIC_Config();//设置NVIC中断分组
   while(1)
   {
    delay_ms(10);
    if(dir)
      ledpwmval++;
    else
      ledpwmval--;
    if(ledpwmval > 300)
      dir = 0;
    if(ledpwmval == 0)
      dir = 1;
    TIM_SetCompare2(TIM3,ledpwmval);
   }
}
(记得把PA7和PA8短接)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表