3.12作业

// 系统时钟初始化  - 不加入会报错 可以尝试一下

typedef struct
{
	volatile unsigned int GPIO_MODE;
	volatile unsigned int GPIO_TYPE;
	volatile unsigned int GPIO_SPEED;
	volatile unsigned int GPIO_PUPD;
	volatile unsigned int GPIO_IDR;
	volatile unsigned int GPIO_ODR;
	volatile unsigned int GPIO_BSRR;
	
}GPIOX;

volatile GPIOX * GPIO_A = (volatile GPIOX *)0x52020000;
volatile GPIOX * GPIO_B = (volatile GPIOX *)0x52020400;
volatile GPIOX * GPIO_C = (volatile GPIOX *)0x52020800;


void SystemInit(void)
{
  
	//对地址 0xE000ED88 的内容 进行修改:
 
	//将0X3向左移动20位 或上 0X3 向左移动22位
  
	*(unsigned int*) 0xE000ED88=((3UL << 20U)|(3UL << 22U));

}

//PB2	光电门
//PB3 	火焰传感器
//PA15 	蜂鸣器报警
//PC6	风扇除烟

int main(void)
{
	//RCC AHB2 时钟使能
	
	//GPIOA
	*(unsigned int *)0x56020C8C |= 1 << 0;
	//GPIOB
	*(unsigned int *)0x56020C8C |= 1 << 1;
	//GPIOC
	*(unsigned int *)0x56020C8C |= 1 << 2;
	
	
	//PB2  	配置
	//MODE 	输入模式		00
	GPIO_B->GPIO_MODE &= ~(1 << 5);
	GPIO_B->GPIO_MODE &= ~(1 << 4);
	//PUPD	浮空输入		00
	GPIO_B->GPIO_PUPD &= ~(1 << 5);
	GPIO_B->GPIO_PUPD &= ~(1 << 4);
	
	//PB3 	配置
	//MODE 	输入模式		00
	GPIO_B->GPIO_MODE &= ~(1 << 7);
	GPIO_B->GPIO_MODE &= ~(1 << 6);
	//PUPD	浮空输入		00
	GPIO_B->GPIO_PUPD &= ~(1 << 7);
	GPIO_B->GPIO_PUPD &= ~(1 << 6);
	
	
	
	//PA15	配置
	//MODE	通用输出模式		01
	GPIO_A->GPIO_MODE &= ~(1 << 31);
	GPIO_A->GPIO_MODE |= 1 << 30;
	//TYPE	推挽输出		0
	GPIO_A->GPIO_TYPE &= ~(1 << 15);
	//SPEED 低速模式		00
	GPIO_A->GPIO_SPEED &= ~(1 << 31);
	GPIO_A->GPIO_SPEED &= ~(1 << 30);
	
	
	
	
	//PC6	配置
	//MODE	通用输出模式		01
	GPIO_C->GPIO_MODE &= ~(1 << 13);
	GPIO_C->GPIO_MODE |= 1 << 12;
	//TYPE	推挽输出		0
	GPIO_C->GPIO_TYPE &= ~(1 << 6);
	//SPEED 低速模式		00
	GPIO_C->GPIO_SPEED &= ~(1 << 13);
	GPIO_C->GPIO_SPEED &= ~(1 << 12);
	
	
	while(1)
	{
		
		//读取光电门状态		PB2
		if((GPIO_B->GPIO_IDR & 1 << 2) == 0)
		{
			GPIO_C->GPIO_ODR &= ~(1 << 6);
		}
		
		if(GPIO_B->GPIO_IDR & 1 << 2)
		{
			GPIO_C->GPIO_ODR |= 1 << 6;
		}
		
		//读取火焰传感器状态	PB3
		if((GPIO_B->GPIO_IDR & 1 << 3) == 0)
		{
			GPIO_A->GPIO_ODR &= ~(1 << 15);
		}
		
		if(GPIO_B->GPIO_IDR & 1 << 3)
		{
			GPIO_A->GPIO_ODR |= 1 << 15;
		}
	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值