主函数:
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)));
}
}
分享到:
相关推荐
### STM32 PWM波输出详解 #### 引言 在微控制器的应用中,PWM(脉冲宽度调制)是一种常用的技术,广泛应用于电机控制、LED亮度调节、信号合成等领域。STM32作为一款高性能的ARM Cortex-M系列微控制器,提供了丰富...
【STM32PWM智能风扇】项目是一个基于STM32微控制器的智能散热系统,通过DS18B20数字温度传感器来检测环境温度,并利用PWM(脉宽调制)技术来控制风扇转速,实现温度的智能调节。下面将详细阐述该项目涉及的主要知识...
【STM32PWM风扇】利用了STM32F103的PWM(脉宽调制)功能。PWM是一种常见的模拟信号控制技术,通过调整占空比来改变输出信号的平均电压,进而控制风扇电机的转速。在智能风扇项目中,STM32通过设置不同的PWM频率和...
STM32 PWM,全称脉宽调制(Pulse Width Modulation),是STM32微控制器中的一个重要功能模块,常用于电机控制、电源管理、模拟信号生成等多种应用场景。本资源"STM32-PWM.rar"提供了STM32的PWM程序,包含库函数,...
STM32 PWM(脉宽调制)是一种广泛应用的数字信号输出技术,常用于电机控制、电源调节、模拟信号生成等领域。在这个项目中,我们重点讨论如何在STM32微控制器上实现不同相位差和占空比的PWM输出。STM32家族是意法...
根据给定的文件信息,以下是对“STM32 PWM占空比和频率调节程序”的详细解析及相关的知识点。 ### STM32定时器产生PWM波 #### 核心知识点概述: 在STM32微控制器中,利用定时器可以方便地产生PWM(脉冲宽度调制)...
STM32PWM波驱动蜂鸣器播放音乐 本文档将介绍如何使用STM32单片机和PWM波驱动蜂鸣器播放音乐。我们将使用STM32F10x微控制器和C语言来实现音乐播放。 知识点1: STM32单片机 STM32是STMicroelectronics公司推出的32...
STM32 PWM(脉宽调制)是一种广泛应用的数字信号输出技术,常用于电机控制、LED亮度调节、电源管理等领域。在这个项目中,我们将详细探讨如何在STM32微控制器上实现1MHz和40kHz PWM频率的切换,并通过独立按键进行...
在本文中,我们将深入探讨如何使用STM32微控制器通过PWM(脉宽调制)来控制蜂鸣器,实现声音强度的周期性变化。STM32系列是基于ARM Cortex-M内核的微控制器,广泛应用于各种嵌入式系统中,包括工业、消费电子和...
STM32 PWM 输出模拟声音是嵌入式系统中常见的音频播放技术。PWM(Pulse Width Modulation)是一种数字信号处理方式,通过调整脉冲宽度来模拟连续信号,从而实现模拟声音的输出。在这个主题中,我们将深入探讨如何...
**STM32 PWM呼吸灯详解** STM32是一款广泛应用的微控制器,以其强大的性能和丰富的资源深受嵌入式开发者的喜爱。在STM32的众多功能中,PWM(脉宽调制)是一种非常重要的技术,它广泛应用于电机控制、LED亮度调节、...
STM32 PWM波形输入捕获测频率及占空比是嵌入式系统开发中的一个常见任务,尤其在电机控制、电源管理以及其他需要精确时序控制的应用中。STM32系列微控制器以其丰富的定时器资源和强大的GPIO接口,非常适合进行PWM...
标题 "Proteus STM32 PWM输出仿真" 涉及到的是在嵌入式系统开发中的一个重要概念,即脉宽调制(PWM)技术在STM32微控制器上的实现和仿真。STM32是基于ARM Cortex-M内核的一系列高性能、低功耗的微控制器。PWM是一种...
"STM32 PWM 输出一定数量脉冲" STM32 微控制器可以使用 PWM 模式输出一定数量脉冲,这是一种常见的应用场景。在这个文件中,我们将学习如何使用 STM32 微控制器输出一定数量脉冲,并了解相关的知识点。 PWM 模式 ...
STM32 PWM(脉宽调制)是一种在微控制器中广泛应用的数字信号生成技术,它通过改变信号的高电平持续时间(占空比)来模拟不同电压或电流等级。在给定的“STM32_PWM.zip”压缩包中,包含的资源很可能是关于STM32系列...
STM32 PWM 输出详解 STM32 系列微控制器是基于ARM Cortex-M内核的高性能微处理器,广泛应用于各种嵌入式系统设计,其中包括控制电机、LED亮度调节、声音合成等多种场合,其中PWM(脉宽调制)输出是其核心功能之一。...
STM32 PWM与串口程序是嵌入式开发中的常见应用,主要涉及到STM32微控制器的硬件定时器模块和串行通信接口。在给定的压缩包文件中,我们推测包含了一些经过调试的源代码,用于实现STM32F103芯片上的PWM输出和串口通信...
STM32 PWM 电机控制是嵌入式系统中一个关键的应用领域,特别是在自动化、机器人以及各种运动控制设备中。PWM(脉冲宽度调制)是一种高效的方法,通过改变信号的占空比来调整输出功率,进而实现对电机速度、亮度等...
在本文中,我们将深入探讨如何使用STM32微控制器通过PWM波来播放WAV音频文件。STM32是一款广泛应用于嵌入式系统中的高性能、低功耗的微处理器,而WAV是一种常见的数字音频格式,它保留了原始录音的全部数据,因此...