单片机物联网开发资料:
链接:https://pan.baidu.com/s/1XzodQuML7CqZ4ZKinDGKkg?pwd=bgep
提取码:bgep
===========================================
PWM模块测试
- 功能描述
脉冲宽度调制模式:
- PWM边沿对齐模式:
- 向上计数配置
当TIMX_CR1寄存器中的DIR为低的时候执行向上计数,下面是一个PWM1模式1的例子,当TIMx_CNT < TIMX_CCRx时PWM信号OCxREF为高,否则为低。如果TIMx_CCRx中的比较值大于自动重装载值(TIMx_ARR),则OCxREF保持为"1",如果比较值为0,则OCxREF保持为"0",
- 向下计数配置
当TIMx_CR1寄存器的DIR位为高时执行向下计数
在PWM模式1,当TIMx_CNT > TIMx_CCRx时OCxREF为低,否则为高,如果TIMx_CCRx中的比较值大于TIMx_ARR中的自动重装载值,则OCxREF保持为"1",该模式下不能长生0%的PWM波形
- PWM中央对齐模式
- 主要特性
3、通用IO
|------|-----|-----|------|------|
| TIMx | CH1 | CH2 | CH3 | CH4 |
| TIM1 | PA8 | PA9 | PA10 | PA11 |
| TIM2 | PA0 | PA1 | PA2 | PA3 |
| TIM3 | PA6 | PA7 | PB0 | PB1 |
| TIM4 | PB6 | PB7 | PB8 | PB9 |
3、硬件电路
- 软件代码
/********************************************************************
* 文件 :pwm.c
* 版本 :V1
* 描述 :使用PWM来调节LED的亮度
* 说明 :使用TIM2的CH2通道,设置TIM2为PWM模式,输出PWM脉冲
********************************************************************/
#include"stm32f10x_lib.h"
/******************************************************
*函数名称:void GPIO_Configuration(void)
*函数功能:GPIO的配置,配置PA1为TIM2的PWM输出
*入口参数:无
*出口参数:无
******************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能APB2外设GPIOC时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); // Enable TIM2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //PA1 定时器的通道2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
/*****************************************************
*函数名称:void TIM_Configuration(void)
*函数功能:TIM2的配置
*入口参数:无
*出口参数:无
*****************************************************/
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseStructure.TIM_Prescaler = 0 ; //72M
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up ; //计数向上
TIM_TimeBaseStructure.TIM_Period = 0xff; //分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //分割
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1模式(边沿对齐模式)
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //CH2通道有效
TIM_OCInitStructure.TIM_Channel = TIM_Channel_2; //通道2
TIM_OCInitStructure.TIM_Pulse = 0xff ; //占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性为高电平
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
// TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能预装载
TIM_Cmd(TIM2,ENABLE);
}