#include
#include “delay.h”
#include “usart.h”
#define LED0_val TIM3->CCR2
int main(void)
{
u16 pwm=0;
u8 dir=1;
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72,9600);
PWM_init(900,0); //频率72000/900 80KHZ
while(1)
{
delay_ms(10);
if(dir)pwm++;
else pwm–;
if(pwm>300)dir=0;
if(pwm==0)dir=1;
LED0_val=pwm;
}
}
void PWM_init(u16 arr,u16 psc)函数解析:
GPIOA->CRL&=0x0fffffff;
GPIOA->CRL|=0xB0000000; //PA7复用输出 因为TIM3_CH2 通道是I/O口复用的方式连接到PA7上的
TIM3->ARR; //设置主动重装载值
TIM3->PSC; //设置分频系数
TIM3->CCMR1|=7<<12; //CH2 PWM2方式
CCMR1用于操控CH1 和CH2通道
因为7=0x111;
所以OC1M[2:0]为
默以为高电平有用
计数模式是 TIM3_CR1 中 位4决议
位4 0:计数器向上计数; 1:计数器向下计数。
默以为向上计数方式
定时器的值从0—–> TIM->ARR 到主动装载值 循环改变
//—————————————————————————————
CC2E:输入/捕获1输出使能 (Capture/Compare 1 output enable)
CC2通道装备为输出: 0: 封闭- OC1制止输出。 1: 敞开- OC2信号输出到对应的输出引脚。
CC2通道装备为输入: 该位决议了计数器的值是否能捕获入TIMx_CCR1寄存器。 0:捕获制止; 0:捕获使能。
TIM3->CR1|=0x0080; //ARPE使能
ARPE:主动重装载预装载答应位 (Auto-reload preload enable)
0:TIMx_ARR寄存器没有缓冲; 1:TIMx_ARR寄存器被装入缓冲器。
//