STM32 实现PWM 寄存器版

STM32 实现PWM 寄存器版

上一篇实现PWM 库函数版本 点我

这一篇实现寄存器版本使用通道1 CH1 控制PC6小灯

原理在库函数中做了相关介绍,这里就不过多说明,它的配置步骤是一样的
所以直接上码观看

代码如下


#include "pwm.h"

// pre 自动重转载值  psc预分频数
void TIM3_PWM_Init(u16 pre,u16 psc)
{
	RCC->APB1ENR |= 1 << 1; //定时器3 时钟
	RCC->APB2ENR |= 1 << 4; //GPIO C
	RCC->APB2ENR |= 1 << 0; //AFIO使能
	
	
	GPIOC->CRL &= 0xF0FFFFFF;
	GPIOC->CRL |= 0x0B000000;  //复用推挽 50Mhz
	
	AFIO->MAPR &= 0xFFFFF3FF;
	AFIO->MAPR |= 0x00000C00; ///定时器3 完全重映射  PC 6
	
	TIM3->ARR = pre;
	TIM3->PSC = psc;
	
	//捕获/比较模式寄存器
	TIM3->CCMR1 |= 7 << 4; //输出比较模式1
	TIM3->CCMR1 |= 1 << 3; //输出比较1预装载使能
	
	//捕获/比较 使能寄存器
	TIM3->CCER  |= 1 << 0; //OC1输出使能
	
	//CR1 控制寄存器
	TIM3->CR1 = 0x0080;  //ARPE 重装载使能
	TIM3->CR1 |= 1;  //使能

}

头文件要加这句(控制关键)

//控制CCR1 来控制占空比
#define LED_PWM TIM3->CCR1

主函数如下

#include "stm32f10x.h"
#include "Usart.h"
#include "SysTick.h"
#include "Led.h"
#include "pwm.h"

void SystemInit()
{
	
}

int main()
{	
	// 10:20:20
	u32 indata = 0,i = 1;
	Stm32_Clock_Init(9);
	
	Led_Init();
	Delay_Init();
	
	//Led_Init();
	
//PWM = (72000 ) / psc*(pre + 1) = 30KHz
	TIM3_PWM_Init(899,0);
	while(1)
	{
		Delay_ms(10);
		
		if(i == 1)
		{
			indata++;
		}
		else
		{
			indata--;
		}
			
		if(indata == 300)
		{
			i = 0;
		}
		if(indata == 0)
		{
			i = 1;
		}
		
		LED_PWM = indata;
	}
}




  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值