`
xiaozhekobe
  • 浏览: 6182 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

stm32 PWM

阅读更多
主函数:
u16 time;
int main(void)
{    
    RCC_Configuration();   
    GPIO_Configuration();    
    NVIC_Configuration(); 
    TIM_Configuration();
    time=0;
    while(1)
    {
    }
}



#include "time.h"
/*=============================================================================================
时钟设置:72M
    使能TIM3和GPIOA
==============================================================================================*/
void RCC_Configuration()
{
    SystemInit();//系统时钟设置位72MHz
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE); //使能GPIOA,GPIOB
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3 
}



/*=============================================================================================
GPIO端口设置:
    PORTA.7端口设置为复用推挽输出
==============================================================================================*/
void GPIO_Configuration()
{
    GPIO_InitTypeDef GPIO_InitStructure;                           //定义一个结构体
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;                        //设定管脚
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;                //50MHz翻转速度
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;                  //设置模式,复用推挽输出,这个很重要
    GPIO_Init(GPIOA,&GPIO_InitStructure);                          //初始化这些设置
}



/*=============================================================================================
 NVIC设置:
    中断优先级为最高
    定时器3
==============================================================================================*/
void NVIC_Configuration()
{
    NVIC_InitTypeDef NVIC_InitStructure;                           //定义结构体
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                //采用分组2方式
    NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;                  //定时器3
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;        //0抢断优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;               //0从优先级
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;                  //使能该通道
    NVIC_Init(&NVIC_InitStructure);                                //初始化设置
}



/*=============================================================================================
TIM模块设置
    
==============================================================================================*/
void TIM_Configuration()
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;                  //定义两个结构体,一个基本机构,一个比较输出结构
    TIM_OCInitTypeDef TIM_OCInitStructure;
    
    TIM_TimeBaseStructure.TIM_Period=0xffff;                        //必须是0xffff
    TIM_TimeBaseStructure.TIM_Prescaler=72-1;                       //时钟为72/72=1MHz
    TIM_TimeBaseStructure.TIM_ClockDivision=0;                      //0个采样分频
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;       //向上计数模式
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);                  //初始化设置

    TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               //管脚输出模式:翻转模式
    TIM_OCInitStructure.TIM_Pulse=2000;                             //翻转周期2000个脉冲
    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;     //使能这个通道
    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;         //输出为正逻辑
    TIM_OC2Init(TIM3,&TIM_OCInitStructure);                         //写入配置
    //TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);              //使能预装载寄存器
    //TIM_ARRPreloadConfig(TIM3,ENABLE);
    TIM_ClearFlag(TIM3, TIM_FLAG_Update);                           //清除中断
    
      	//TIM_PrescalerConfig(TIM3, 0xEA5F, TIM_PSCReloadMode_Immediate);   //设置预分频数
        	
    TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);                      //TIM中断源设置,开启相应通道的捕获比较中断
    TIM_Cmd(TIM3,ENABLE);                                           //开启TIM3
    TIM_CtrlPWMOutputs(TIM3,ENABLE);                                //通道输出使能
}


在这里要注意的是,你要看到你使能的中断源是什么,因为这个倒最后你要查询的东西!


void TIM3_IRQHandler(void)
{
   
     
//    if(TIM_GetITStatus(TIM3, TIM_IT_CC2)==SET)//这个的中断源是TIM_IT_CC2这个通道
//    {
//         time++;
//         TIM_ClearITPendingBit(TIM3, TIM_IT_CC2 );
//        capture = TIM_GetCapture2(TIM3);
//        TIM_SetCompare2(TIM3, capture + 2000);
//        //这里解释下:
//        //将TIM1_CCR1的值增加2000,使得下一个TIM事件也需要2000个脉冲,
//        //另一种方式是清零脉冲计数器
//        //TIM_SetCounter(TIM2,0x0000);
//    }
    
    time++;
    if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET) //这个的中断源是TIM_IT_Update
    {
        capture++;
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
        //GPIO_WriteBit(GPIOA,GPIO_Pin_9,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_9)));
    } 
}

分享到:
评论

相关推荐

    stm32PWM波输出精讲

    ### STM32 PWM波输出详解 #### 引言 在微控制器的应用中,PWM(脉冲宽度调制)是一种常用的技术,广泛应用于电机控制、LED亮度调节、信号合成等领域。STM32作为一款高性能的ARM Cortex-M系列微控制器,提供了丰富...

    STM32PWM智能风扇

    【STM32PWM智能风扇】项目是一个基于STM32微控制器的智能散热系统,通过DS18B20数字温度传感器来检测环境温度,并利用PWM(脉宽调制)技术来控制风扇转速,实现温度的智能调节。下面将详细阐述该项目涉及的主要知识...

    基于STM32的智能风扇_STM32F103_stm32智能风扇_STM32PWM风扇_stm32风扇模块_hcsr501

    【STM32PWM风扇】利用了STM32F103的PWM(脉宽调制)功能。PWM是一种常见的模拟信号控制技术,通过调整占空比来改变输出信号的平均电压,进而控制风扇电机的转速。在智能风扇项目中,STM32通过设置不同的PWM频率和...

    STM32-PWM.rar_stm32 pwm

    STM32 PWM,全称脉宽调制(Pulse Width Modulation),是STM32微控制器中的一个重要功能模块,常用于电机控制、电源管理、模拟信号生成等多种应用场景。本资源"STM32-PWM.rar"提供了STM32的PWM程序,包含库函数,...

    STM32 PWM输出不同相位差和占空比

    STM32 PWM(脉宽调制)是一种广泛应用的数字信号输出技术,常用于电机控制、电源调节、模拟信号生成等领域。在这个项目中,我们重点讨论如何在STM32微控制器上实现不同相位差和占空比的PWM输出。STM32家族是意法...

    STM32 PWM占空比和频率调节程序

    根据给定的文件信息,以下是对“STM32 PWM占空比和频率调节程序”的详细解析及相关的知识点。 ### STM32定时器产生PWM波 #### 核心知识点概述: 在STM32微控制器中,利用定时器可以方便地产生PWM(脉冲宽度调制)...

    stm32pwm波驱动蜂鸣器放音乐doc.doc

    STM32PWM波驱动蜂鸣器播放音乐 本文档将介绍如何使用STM32单片机和PWM波驱动蜂鸣器播放音乐。我们将使用STM32F10x微控制器和C语言来实现音乐播放。 知识点1: STM32单片机 STM32是STMicroelectronics公司推出的32...

    stm32 pwm 1mhz和40kHz 可切换

    STM32 PWM(脉宽调制)是一种广泛应用的数字信号输出技术,常用于电机控制、LED亮度调节、电源管理等领域。在这个项目中,我们将详细探讨如何在STM32微控制器上实现1MHz和40kHz PWM频率的切换,并通过独立按键进行...

    STM32 PWM控制蜂鸣器实验

    在本文中,我们将深入探讨如何使用STM32微控制器通过PWM(脉宽调制)来控制蜂鸣器,实现声音强度的周期性变化。STM32系列是基于ARM Cortex-M内核的微控制器,广泛应用于各种嵌入式系统中,包括工业、消费电子和...

    stm32 PWM输出模拟声音

    STM32 PWM 输出模拟声音是嵌入式系统中常见的音频播放技术。PWM(Pulse Width Modulation)是一种数字信号处理方式,通过调整脉冲宽度来模拟连续信号,从而实现模拟声音的输出。在这个主题中,我们将深入探讨如何...

    stm32PWM呼吸灯

    **STM32 PWM呼吸灯详解** STM32是一款广泛应用的微控制器,以其强大的性能和丰富的资源深受嵌入式开发者的喜爱。在STM32的众多功能中,PWM(脉宽调制)是一种非常重要的技术,它广泛应用于电机控制、LED亮度调节、...

    STM32 PWM波形输入捕获测频率及占空比

    STM32 PWM波形输入捕获测频率及占空比是嵌入式系统开发中的一个常见任务,尤其在电机控制、电源管理以及其他需要精确时序控制的应用中。STM32系列微控制器以其丰富的定时器资源和强大的GPIO接口,非常适合进行PWM...

    Proteus STM32 PWM输出仿真.rar

    标题 "Proteus STM32 PWM输出仿真" 涉及到的是在嵌入式系统开发中的一个重要概念,即脉宽调制(PWM)技术在STM32微控制器上的实现和仿真。STM32是基于ARM Cortex-M内核的一系列高性能、低功耗的微控制器。PWM是一种...

    stm32 pwm 输出一定数量脉冲

    "STM32 PWM 输出一定数量脉冲" STM32 微控制器可以使用 PWM 模式输出一定数量脉冲,这是一种常见的应用场景。在这个文件中,我们将学习如何使用 STM32 微控制器输出一定数量脉冲,并了解相关的知识点。 PWM 模式 ...

    STM32_PWM.zip_STM32 PWM捕获_STM32 PWM输入_STM32 捕获 PWM_stm32 input

    STM32 PWM(脉宽调制)是一种在微控制器中广泛应用的数字信号生成技术,它通过改变信号的高电平持续时间(占空比)来模拟不同电压或电流等级。在给定的“STM32_PWM.zip”压缩包中,包含的资源很可能是关于STM32系列...

    stm32 pwm输出

    STM32 PWM 输出详解 STM32 系列微控制器是基于ARM Cortex-M内核的高性能微处理器,广泛应用于各种嵌入式系统设计,其中包括控制电机、LED亮度调节、声音合成等多种场合,其中PWM(脉宽调制)输出是其核心功能之一。...

    stm32pwm程序以及串口程序(已调试好)

    STM32 PWM与串口程序是嵌入式开发中的常见应用,主要涉及到STM32微控制器的硬件定时器模块和串行通信接口。在给定的压缩包文件中,我们推测包含了一些经过调试的源代码,用于实现STM32F103芯片上的PWM输出和串口通信...

    PWM.rar_STM32 PWM 电机_pwm stm32_stm32 PWM控制_stm32 pwm_stm32 电机

    STM32 PWM 电机控制是嵌入式系统中一个关键的应用领域,特别是在自动化、机器人以及各种运动控制设备中。PWM(脉冲宽度调制)是一种高效的方法,通过改变信号的占空比来调整输出功率,进而实现对电机速度、亮度等...

    STM32利用PWM波播放WAV声音文件

    在本文中,我们将深入探讨如何使用STM32微控制器通过PWM波来播放WAV音频文件。STM32是一款广泛应用于嵌入式系统中的高性能、低功耗的微处理器,而WAV是一种常见的数字音频格式,它保留了原始录音的全部数据,因此...

Global site tag (gtag.js) - Google Analytics