STM32 定时器 PWM

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32+按键调控PWM输出+串口输出占空比(2010-09-20 21:59) 分类:STM32学习笔记

TIM.c

main.c

#include "stm32f10x.h"

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

uint16_t CCR1_V al = 250;

uint16_t CCR2_V al = 500;

uint16_t CCR3_V al = 750;

uint16_t CCR4_V al = 0;

uint16_t PrescalerV alue = 0;

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

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

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

int main(void)

{

RCC_Configuration();

GPIO_Configuration();

PrescalerV alue = (uint16_t) (SystemCoreClock / 24000000) - 1;

TIM_TimeBaseStructure.TIM_Period = 1000; //周期

TIM_TimeBaseStructure.TIM_Prescaler = PrescalerV alue; //分频

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_V al; //写比较值(占空比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_V al;

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_V al;

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_V al;

TIM_OC4Init(TIM3, &TIM_OCInitStructure);

TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM3, ENABLE); //

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

while (1)

{

CCR4_V al++;

if(CCR4_V al==1000)CCR4_V al=0;

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

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)

相关文档
最新文档