STM32 定时器 PWM
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)