STM32LED灯闪烁、流水灯、驱动蜂鸣器(使用寄存器操作,对GPIO引脚进行初始化)

基于STM32F407ZE开发板LED灯闪烁(使用寄存器操作,对GPIO引脚进行初始化)
使用官方函数对GPOI初始化的版本:https://blog.csdn.net/weixin_43793181/article/details/109008629

LED1 部分

#include <stm32f4xx.h>

void delay_ms(int ms)									//延时函数
{
    
    
	int i,j;
	for(i=0; i<ms; i++)
		for(j=0; j<10000;j++);
}


int main()
{
    
    	
	//先开启对应用到的模块时钟节拍
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	
	GPIOF->MODER 	&= 0xFFF3FFFF;						//对寄存器操作
	GPIOF->MODER	|= 0x00040000;						//对寄存器操作
	
	
	GPIOF->OSPEEDR	&= 0xFFF3FFFF;
	GPIOF->OSPEEDR	|= 0x00080000;
	
	GPIOF->OTYPER	&= 0xFDFF;
	GPIOF->OTYPER	|= 0x0000;
	
	
	GPIOF->PUPDR	&= 0xFFF3FFFF;
	GPIOF->PUPDR	|= 0x00040000;

	
	int t = 1;
	while(t)
	{
    
    
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_9);
		delay_ms(100);
		
		t++;
		if(t == 20)
		{
    
    
			t = 0;
		}
	}
	return 0;
}

LED1 + 蜂鸣器部分

#include <stm32f4xx.h>

void delay_ms(int ms)									//延时函数
{
    
    
	int i,j;
	for(i=0; i<ms; i++)
		for(j=0; j<10000;j++);
}


int main()
{
    
    	
	//先开启对应用到的模块时钟节拍
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	
	GPIOF->MODER 	&= 0xFFF0FFFF;
	GPIOF->MODER	|= 0x00050000;
	
	
	GPIOF->OSPEEDR	&= 0xFFF0FFFF;
	GPIOF->OSPEEDR	|= 0x000A0000;
	
	GPIOF->OTYPER	&= 0xFCFF;
	GPIOF->OTYPER	|= 0x0000;
	
	
	GPIOF->PUPDR	&= 0xFFF0FFFF;
	GPIOF->PUPDR	|= 0x00050000;

	
	int t = 1;
	while(t)
	{
    
    
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_9);
		delay_ms(100);
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_8);
		delay_ms(3);
		GPIO_ToggleBits(GPIOF,GPIO_Pin_8);
		
		t++;
		if(t == 20)
		{
    
    
			t = 0;
		}
	}
	return 0;
}

LED1 + LED2 + 蜂鸣器部分

#include <stm32f4xx.h>

void delay_ms(int ms)									//延时函数
{
    
    
	int i,j;
	for(i=0; i<ms; i++)
		for(j=0; j<10000;j++);
}


int main()
{
    
    	
	//先开启对应用到的模块时钟节拍
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	
	GPIOF->MODER 	&= 0xFFC0FFFF;						//对寄存器进行操作
	GPIOF->MODER	|= 0x00150000;						//对寄存器进行操作
	
	
	GPIOF->OSPEEDR	&= 0xFFC0FFFF;
	GPIOF->OSPEEDR	|= 0x002A0000;
	
	GPIOF->OTYPER	&= 0xFAFF;
	GPIOF->OTYPER	|= 0x0000;
	
	
	GPIOF->PUPDR	&= 0xFFC0FFFF;
	GPIOF->PUPDR	|= 0x00150000;

	
	int t = 1;
	while(t)
	{
    
    
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_9);
		GPIO_ToggleBits(GPIOF,GPIO_Pin_10);
		delay_ms(100);
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_8);
		delay_ms(3);
		GPIO_ToggleBits(GPIOF,GPIO_Pin_8);
		
		t++;
		if(t == 20)
		{
    
    
			t = 0;
		}
	}
	return 0;
}

LED1 + LED2 + LED3 + 蜂鸣器部分

#include <stm32f4xx.h>

void delay_ms(int ms)									//延时函数
{
    
    
	int i,j;
	for(i=0; i<ms; i++)
		for(j=0; j<10000;j++);
}


int main()
{
    
    	
	//先开启对应用到的模块时钟节拍
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	
	GPIOF->MODER 	&= 0xFFC0FFFF;						//对寄存器进行操作
	GPIOF->MODER	|= 0x00150000;						//对寄存器进行操作
	GPIOE->MODER 	&= 0xF3FFFFFF;						//对寄存器进行操作
	GPIOE->MODER	|= 0x04000000;						//对寄存器进行操作
	
	
	GPIOF->OSPEEDR	&= 0xFFC0FFFF;
	GPIOF->OSPEEDR	|= 0x002A0000;
	GPIOE->OSPEEDR	&= 0xF3FFFFFF;
	GPIOE->OSPEEDR	|= 0x08000000;
	
	GPIOF->OTYPER	&= 0xFAFF;
	GPIOF->OTYPER	|= 0x0000;
	GPIOE->OTYPER	&= 0xDFFF;
	GPIOE->OTYPER	|= 0x0000;
	
	
	GPIOF->PUPDR	&= 0xFFC0FFFF;
	GPIOF->PUPDR	|= 0x00150000;
	GPIOE->PUPDR	&= 0xF3FFFFFF;
	GPIOE->PUPDR	|= 0x04000000;

	
	int t = 1;
	while(t)
	{
    
    
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_9);
		GPIO_ToggleBits(GPIOF,GPIO_Pin_10);
		GPIO_ToggleBits(GPIOE,GPIO_Pin_13);
		delay_ms(100);
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_8);
		delay_ms(3);
		GPIO_ToggleBits(GPIOF,GPIO_Pin_8);
		
		t++;
		if(t == 20)
		{
    
    
			t = 0;
		}
	}
	return 0;
}

LED1 + LED2 + LED3 + LED4 + 蜂鸣器部分

#include <stm32f4xx.h>

void delay_ms(int ms)									//延时函数
{
    
    
	int i,j;
	for(i=0; i<ms; i++)
		for(j=0; j<10000;j++);
}


int main()
{
    
    	
	//先开启对应用到的模块时钟节拍
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	
	GPIOF->MODER 	&= 0xFFC0FFFF;						//对寄存器进行操作
	GPIOF->MODER	|= 0x00150000;						//对寄存器进行操作
	GPIOE->MODER 	&= 0xC3FFFFFF;						//对寄存器进行操作
	GPIOE->MODER	|= 0x14000000;						//对寄存器进行操作
	
	
	GPIOF->OSPEEDR	&= 0xFFC0FFFF;
	GPIOF->OSPEEDR	|= 0x002A0000;
	GPIOE->OSPEEDR	&= 0xC3FFFFFF;
	GPIOE->OSPEEDR	|= 0x28000000;
	
	GPIOF->OTYPER	&= 0xFAFF;
	GPIOF->OTYPER	|= 0x0000;
	GPIOE->OTYPER	&= 0x9FFF;
	GPIOE->OTYPER	|= 0x0000;
	
	
	GPIOF->PUPDR	&= 0xFFC0FFFF;
	GPIOF->PUPDR	|= 0x00150000;
	GPIOE->PUPDR	&= 0xC3FFFFFF;
	GPIOE->PUPDR	|= 0x14000000;

	
	int t = 1;
	while(t)
	{
    
    
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_9);
		GPIO_ToggleBits(GPIOF,GPIO_Pin_10);
		GPIO_ToggleBits(GPIOE,GPIO_Pin_13);
		GPIO_ToggleBits(GPIOE,GPIO_Pin_14);
		delay_ms(100);
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_8);
		delay_ms(3);
		GPIO_ToggleBits(GPIOF,GPIO_Pin_8);
		
		t++;
		if(t == 20)
		{
    
    
			t = 0;
		}
	}
	return 0;
}

点亮LED流水灯 + 蜂鸣器部分

#include <stm32f4xx.h>

void delay_ms(int ms)									//延时函数
{
    
    
	int i,j;
	for(i=0; i<ms; i++)
		for(j=0; j<10000;j++);
}


int main()
{
    
    	
	//先开启对应用到的模块时钟节拍
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	
	GPIOF->MODER 	&= 0xFFC0FFFF;						//对寄存器进行操作
	GPIOF->MODER	|= 0x00150000;						//对寄存器进行操作
	GPIOE->MODER 	&= 0xC3FFFFFF;						//对寄存器进行操作
	GPIOE->MODER	|= 0x14000000;						//对寄存器进行操作
	
	
	GPIOF->OSPEEDR	&= 0xFFC0FFFF;
	GPIOF->OSPEEDR	|= 0x002A0000;
	GPIOE->OSPEEDR	&= 0xC3FFFFFF;
	GPIOE->OSPEEDR	|= 0x28000000;
	
	GPIOF->OTYPER	&= 0xFAFF;
	GPIOF->OTYPER	|= 0x0000;
	GPIOE->OTYPER	&= 0x9FFF;
	GPIOE->OTYPER	|= 0x0000;
	
	
	GPIOF->PUPDR	&= 0xFFC0FFFF;
	GPIOF->PUPDR	|= 0x00150000;
	GPIOE->PUPDR	&= 0xC3FFFFFF;
	GPIOE->PUPDR	|= 0x14000000;

	GPIO_ToggleBits(GPIOF,GPIO_Pin_9);					//LED1关灯
	GPIO_ToggleBits(GPIOF,GPIO_Pin_10);					//LED2关灯
	GPIO_ToggleBits(GPIOE,GPIO_Pin_13);					//LED3关灯
	GPIO_ToggleBits(GPIOE,GPIO_Pin_14);					//LED4关灯	
		
	int t = 1;
	while(t)
	{
    
    
		GPIO_ToggleBits(GPIOF,GPIO_Pin_9);
		delay_ms(100);
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_9);
		GPIO_ToggleBits(GPIOF,GPIO_Pin_10);
		delay_ms(100);
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_10);
		GPIO_ToggleBits(GPIOE,GPIO_Pin_13);
		delay_ms(100);
		
		GPIO_ToggleBits(GPIOE,GPIO_Pin_13);
		GPIO_ToggleBits(GPIOE,GPIO_Pin_14);
		delay_ms(100);
		GPIO_ToggleBits(GPIOE,GPIO_Pin_14);
		
		GPIO_ToggleBits(GPIOF,GPIO_Pin_8);
		delay_ms(3);
		GPIO_ToggleBits(GPIOF,GPIO_Pin_8);
		
		t++;
		if(t == 20)
		{
    
    
			t = 0;
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43793181/article/details/109009023