您的位置 首页 汽车

STM32自带PWM输出试验

includestm32f10x_libh>includesyshincludedelayhincludeusarthdefineLED0_valTIM3->CCR2voidPWM_ini

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

//

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/318373.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部