微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32自带PWM输出实验

STM32自带PWM输出实验

时间: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]为

111:PWM模式2- 在向上计数时,一旦TIMx_CNTTIMx_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寄存器被装入缓冲器。

//


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top