您的位置:首页 > 其它

基于STM32-基本定时器3的PWM输出 例程(带中文注释 ) ------------(转)

2011-10-08 11:07 381 查看
基于STM32-基本定时器3的PWM输出 例程(带中文注释



波形图

说明:使用标准库3.4

#include "stm32f10x.h"

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

uint16_t CCR1_Val = 250;

uint16_t CCR2_Val = 500;

uint16_t CCR3_Val = 750;

uint16_t CCR4_Val = 0;

uint16_t PrescalerValue = 0;

void RCC_Configuration(void); //时钟配置

void GPIO_Configuration(void); //管脚配置

void Delay (__IO uint32_t nCount); //延时函数

int main(void)

{

RCC_Configuration();

GPIO_Configuration();

PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;

TIM_TimeBaseStructure.TIM_Period = 1000; //周期

TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; //分频

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

//计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始TIM3

/*************************** 通道1 ********************************/

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //PWM功能使能

TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //写比较值(占空比

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //置高

TIM_OC1Init(TIM3, &TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

/****************************** 通道2 ******************************/

/* PWM1 Mode configuration: Channel2 */

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = CCR2_Val;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OC2Init(TIM3, &TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

/******************************* 通道3 *********************************/

/* PWM1 Mode configuration: Channel3 */

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = CCR3_Val;

TIM_OC3Init(TIM3, &TIM_OCInitStructure);

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);

/****************************** 通道4 *********************************/

/* PWM1 Mode configuration: Channel4 */

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = CCR4_Val;

TIM_OC4Init(TIM3, &TIM_OCInitStructure);

TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM3, ENABLE); //

TIM_Cmd(TIM3, ENABLE); //使能计数

while (1)

{

CCR4_Val++;

if(CCR4_Val==1000)CCR4_Val=0;

TIM_SetCompare4(TIM3,CCR4_Val); //占空比调节

Delay(0xFfff);

}

}

/*************************** 时钟配置 *******************************/

void RCC_Configuration(void)

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //T3时钟使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |

RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);

//管脚时钟

}

/************************** 管脚配置 ******************************/

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;

GPIO_Init(GPIOB, &GPIO_InitStructure);

}

/************************** 延时函数 ******************************/

void Delay (__IO uint32_t nCount)

{

for(; nCount != 0; nCount--);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: