2023.1.5---PWM

该代码段展示了如何初始化STM32MP1xx微控制器上的风扇马达(使用TIM1)和另一个马达(使用TIM16)。主要步骤包括设置RCC以启用GPIO和TIM模块,配置GPIO为复用功能,设定TIM的预分频器、自动重载计数器和捕获/比较寄存器值,以及设置输出模式和极性,最后启用TIM。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完成风扇马达的初始化

//fan.c
#include "fan.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_tim.h"

//TIM1-------PE9
void fan_init()
{
	//RCC章节初始化
	//使能GPIOE
	RCC->MP_AHB4ENSETR |= (0x1<<4);
	//使能TIM1
	RCC->MP_APB2ENSETR |= (0x1);

	//GPIO章节初始化
	//设置PE9为复用功能
	GPIOE->MODER &= (~(0x3<<18));
	//设置复用功能TIM1_CH1
	GPIOE->MODER |= (0x2<<18);

	//设置AFRH寄存器
	GPIOE->AFRH &= (~(0xF<<4));
	GPIOE->AFRH |= (0x1<<4);

	//TIM1章节初始化
	//设置预分频器的值为208
	TIM1->PSC=0xD0;
	//设置自动重载计数器的值为1000
	TIM1->ARR=0x3E8;
	//设置捕获/比较寄存器的值为700
	TIM1->CCR1=0x2BC;
	//设置主输出使能
	TIM1->BDTR |= (0x1<<15);

	//设置输出比较模式为PWM模式
	TIM1->CCMR1 |= (0x1<<16);
	TIM1->CCMR1 &= (~(0x7<<4));
	TIM1->CCMR1 |= (0x6<<4);
	//设置输出比较预加载使能
	TIM1->CCMR1 |= (0x1<<3);
	//设置通道1为输出模式
	TIM1->CCMR1 &= (~(0x3));

	//设置捕获/比较寄存器输出极性
	TIM1->CCER &= (~(0x1<<3));
	//设置捕获/比较寄存器输出极性为低电平
	TIM1->CCER |= (0x1<<1);
	//设置捕获/比较寄存器使能
	TIM1->CCER |= (0x1);

	//设置自动重载计数器使能
	TIM1->CR1 |= (0x1<<7);
	//设置定时器为边沿对齐
	TIM1->CR1 &= (~(0x3<<5));
	//设置计数器为递减计数器
	TIM1->CR1 |= (0x1<<4);
	//设置计数器使能
	TIM1->CR1 |= (0x1);
}
//motor.c
#include "motor.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_tim.h"


//TIM16------PF6
void motor_init()
{
	//RCC章节初始化
	RCC->MP_AHB4ENSETR |= (0x1<<5);
	RCC->MP_APB2ENSETR |= (0x1<<3);

	//GPIO章节初始化
	GPIOF->MODER &= (~(0x3<<12));
	GPIOF->MODER |= (0x2<<12);

	GPIOF->AFRL &= (~(0xF<<24));
	GPIOF->AFRL |= (0x1<<24);

	//TIM16章节初始化
	TIM16->PSC=0xD0;
	TIM16->ARR=0x3E8;
	TIM16->CCR1=0x2BC;
	TIM16->BDTR |= (0x1<<15);

	TIM16->CCMR1 |= (0x1<<16);
	TIM16->CCMR1 &= (~(0x7<<4));
	TIM16->CCMR1 |= (0x6<<4);
	TIM16->CCMR1 |= (0x1<<3);
	TIM16->CCMR1 &= (~(0x3));

	TIM16->CCER &= (~(0x1<<3));
	TIM16->CCER |= (0x1<<1);
	TIM16->CCER |= (0x1);

	TIM16->CR1 |= (0x1<<7);
	//TIM16->CR1 &= (~(0x3<<5));
	//TIM16->CR1 |= (0x1<<4);
	TIM16->CR1 |= (0x1);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值