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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佳佳鸽

若文章帮到你,能不能请我喝杯茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值