新闻中心

EEPW首页>嵌入式系统>设计应用> STM32自带PWM输出实验

STM32自带PWM输出实验

作者: 时间:2016-11-30 来源:网络 收藏
#include
#include "sys.h"
#include "delay.h"
#include "usart.h"

#define LED0_val TIM3->CCR2

void PWM_init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能
GPIOA->CRH&=0xfffffff0; //PA8
GPIOA->CRH|=0x00000004; //PA8 浮空输入
GPIOA->CRL&=0x0fffffff;
GPIOA->CRL|=0xB0000000; //PA7复用输出
GPIOA->ODR|=1<<7; //PA7上啦
TIM3->ARR=arr; //设置重装载值
TIM3->PSC=psc; //设置预分频系数
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCER|=1<<4; //OC2输出使能
TIM3->CR1|=0x0080; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
}

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]为

本文引用地址: //m.amcfsurvey.com/article/201611/323885.htm
111:PWM模式2- 在向上计数时,一旦TIMx_CNT TIMx_CCR1时通道1为有效电平,否则为无效电平。
默认为高电平有效

数模式是 TIM3_CR1 中 位4决定
位4 0:计数器向上计数; 1:计数器向下计数。
默认为向上计数模式
定时器的值从0-----> TIM->ARR 到自动装载值 循环变化
//---------------------------------------------------------------------------------------
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCER|=1<<4; //OC2输出使能


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寄存器被装入缓冲器。

//



关键词:STM32PWM输出实

评论


技术专区

关闭