找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stm32配置pwm

[复制链接]
跳转到指定楼层
楼主
ID:251663 发表于 2017-11-24 18:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "pwm.h"
#include "led.h"

//void TIM3_Int_Init(u16 arr,u16 psc)
//{
//TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
//NVIC_InitTypeDef NVIC_InitStructure;
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //①时钟 TIM3 使能
////定时器 TIM3 初始化
//TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值
//TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟频率除数的预分频值
//TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
//TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数
//    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //②初始化 TIM3
//TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //③允许更新中断
////中断优先级 NVIC 设置
//NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3 上升中断
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 0 级
//NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级 3 级
//NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能
//NVIC_Init(&NVIC_InitStructure); //④初始化 NVIC 寄存器
//TIM_Cmd(TIM3, ENABLE); //⑤使能 TIM3
//}
//定时器 3 中断服务程序⑥
//void TIM3_IRQHandler(void) //TIM3 中断
//{
//if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查 TIM3 更新中断发生与否
//{
//TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除 TIM3 更新中断标志
//LED1=!LED1;
//}
//}

void TIM3_PWM_Init(u16 arr,u16 psc)
{

        GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_OCInitTypeDef TIM_OCInitSture;
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //①使能 TIM3时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);//①使能 GPIO 和 AFIO 复用功能时钟

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;//端口配置 led0=PC8 led1=PC9
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//
    GPIO_Init(GPIOC,&GPIO_InitStructure);//初始化GPIO

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin= GPIO_Pin_6|GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
        
        //映射
        
        GPIO_PinRemapConfig( GPIO_FullRemap_TIM3  ,ENABLE);//映射
        
        //定时器TIM3初始化
        
        TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值
    TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟频率除数的预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1; //设置时钟分割
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//初始化 TIN3
        
        //初始化TIM3 PWM模式
        TIM_OCInitSture.TIM_OCMode=TIM_OCMode_PWM1;//选择 PWM 模式 1
        TIM_OCInitSture.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
        TIM_OCInitSture.TIM_OCPolarity=TIM_OCPolarity_High;//输出极性高
        TIM_OC3Init(TIM3,&TIM_OCInitSture);//④初始化外设 TIM3 OC3
        
        TIM_OCInitSture.TIM_OCMode=TIM_OCMode_PWM1;
        TIM_OCInitSture.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitSture.TIM_OCPolarity= TIM_OCPolarity_High;
        TIM_OC4Init(TIM3,&TIM_OCInitSture);//④初始化外设 TIM3 OC4
        
        
        
    TIM_OC3PreloadConfig( TIM3,TIM_OCPreload_Enable);//使能预装载寄存器
        TIM_OC4PreloadConfig( TIM3,TIM_OCPreload_Enable);
        TIM_Cmd(TIM3, ENABLE); //⑤使能 TIM3
        
}






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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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