arm作业

该代码段展示了如何对STM32的RCC、GPIO和定时器模块进行初始化,包括TIM4、TIM16和TIM1的相关配置,用于蜂鸣器、马达和风扇控制。

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

main.c

include "beep.h"

extern void printf(const char *fmt, ...);

void delay_ms(int ms)

{

	int i,j;

	for(i = 0; i < ms;i++)

		for (j = 0; j < 1800; j++);

}







int main(void)

{

	//unsigned int i =0;

	//hai_beep_init();

	//hai_mada_init();

	hai_fen_init();

	while(1)

	{

	}

	return 0;

}

beep.c

#include "beep.h"
void hai_beep_init()
{
        //RCC 章节
		//RCC_MP_AHB4ENSETR[1] = 1
		RCC->MP_AHB4ENSETR |= (0x1 << 1);
		//RCC_MP_APB1ENSETR[2] = 1
		RCC->MP_APB1ENSETR  |= (0x1 << 2);

	     
		//GPIO章节
		//GPIO->AFRL[27:24] = 0010
		GPIOB->AFRL &= (~(0xf <<24));
		GPIOB->AFRL |= (0x1 << 25);
		//GPIO->MODER[13:12] = 10
		GPIOB->MODER &= (~(0x3 << 12));
		GPIOB->MODER |= (0x1 << 13);
		
		//TIME4章节
	
    

     	TIM4->PSC = 0xD0;
		TIM4->ARR = 0x3E8;
	    TIM4->CCR1 = 0x2BC;



	    TIM4->CR1 |= (0x1 << 7);
		TIM4->CR1 &= (~(0x3 << 5));
		TIM4->CR1 |= (0x4 << 4);
		TIM4->CR1 |= (0x1 << 0);
	


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

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

}
void hai_mada_init()
{
   RCC->MP_AHB4ENSETR |= (0x1 << 5);
   RCC->MP_APB2ENSETR |= (0x1 << 3);

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

	GPIOF->MODER &= (~(0x3 << 12));
	GPIOF->MODER |= (0x1 << 13);


        TIM16->PSC = 0xD0;
		TIM16->ARR = 0x3E8;
	    TIM16->CCR1 = 0x12C;

		TIM16->CR1 |= (0x1 << 0);
		TIM16->CR1 |= (0x1 << 7);

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


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

	 TIM16->BDTR |= (0x1 << 15);
}


void hai_fen_init()
{
	RCC->MP_AHB4ENSETR |= (0x1 << 4);
	RCC->MP_APB2ENSETR |= (0x1 << 0);
 

	GPIOE->MODER &= (~(0x3 << 18));
	GPIOE->MODER |= (0x1 << 19);
	GPIOE->AFRH &= (~(0xf << 4));
	GPIOE->AFRH |= (0x1 << 4);
	
	
	//PSC
	TIM1->PSC = 0xD0;
 
	//ARR
	TIM1->ARR = 0x1F4;
 
	//CCR1
	TIM1->CCR1 = 0x12C;
 
	//CR1
	TIM1->CR1 |= (0x1 << 7);
	TIM1->CR1 &= (~(0x3 << 5));
	TIM1->CR1 |= (0x1 << 4);
	TIM1->CR1 |= (0x1 << 0);
	//设置为PWM1模式
	TIM1->CCMR1 &= (~(0x1 << 16));
	TIM1->CCMR1 &= (0x7 << 4);
	TIM1->CCMR1 |= (0x3 << 5);
	TIM1->CCMR1 |= (0x1 << 3);
	TIM1->CCMR1 &= (~(0x3 << 0));
	
	//CCER
	TIM1->CCER |= (0x1 << 3);
	TIM1->CCER &= (~(0x1 << 1));
	TIM1->CCER |= (0x1 << 0);
 
	//BDTR
	TIM1->BDTR |= (0x1 << 15);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值