3.12ZUOY

// 系统时钟初始化  - 不加入会报错 可以尝试一下
typedef struct
{
    volatile unsigned int GPIO_MODE;//0x00 GPIO_MODE的地址就是结构体的地址
    volatile unsigned int GPIO_TYPE;//0x04
    volatile unsigned int GPIO_SPEED;//0x08
    volatile unsigned int GPIO_PUPD;//0x0C
    volatile unsigned int GPIO_IDR;//0x10
    volatile unsigned int GPIO_ODR;//0x14
    volatile unsigned int GPIO_BSRR;//0x18
    
}GPIOX;
volatile GPIOX * GPIO_B = (volatile GPIOX *)0x52020400; //PB2
volatile GPIOX * GPIO_A = (volatile GPIOX *)0x52020000;//PA15蜂鸣器

volatile GPIOX * GPIO_C	= (volatile GPIOX *)0x52020800;
void SystemInit(void)
{ 
  //对地址 0xE000ED88 的内容 进行修改:
  //将0X3向左移动20位 或上 0X3 向左移动22位
  *(unsigned int*) 0xE000ED88|=((3UL << 20U)|(3UL << 22U));
}
//2、使能GPIO总线上的时钟。
//3、配置GPIO相关寄存器。
int main()
{
     *(unsigned int *)0x56020C8C|=1<<1;
     *(unsigned int *)0x56020C8C|=1<<0;
	*(unsigned int *)0x56020C8C|=1<<2;
    //使能GPIO的模式
    //*(unsigned int *)0x52020000&=~(1<<31);
    //*(unsigned int *)0x52020000|=(1<<30);
    GPIO_A->GPIO_MODE &=~(1<<31);
    GPIO_A->GPIO_MODE |=(1<<30);
	//蜂鸣器
    
	//PB2
    GPIO_B->GPIO_MODE &=~(1<<5);
	  GPIO_B->GPIO_MODE &=~(1<<4);
		GPIO_B->GPIO_PUPD &=~(1<<5);
		GPIO_B->GPIO_PUPD &=~(1<<4);
	
	GPIO_B->GPIO_MODE &=~(1<<7);
	  GPIO_B->GPIO_MODE &=~(1<<6);
		GPIO_B->GPIO_PUPD &=~(1<<7)                        ;
		GPIO_B->GPIO_PUPD &=~(1<<6);
	
	//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);
	
 
    //使能GPIO的类型
    //*(unsigned int *)0x52020004&=~(1<<15);
    GPIO_A->GPIO_TYPE&=~(1<<15);
    //使能GPIO的输出速度为低速
    //*(unsigned int *)0x52020008&=~(1<<30);
    //*(unsigned int *)0x52020008&=~(1<<31);
    GPIO_A->GPIO_SPEED&=~(1<<31);
    GPIO_A->GPIO_SPEED&=~(1<<30);
    //使能GPIO输出数据为高电平(1)
    //*(unsigned int *)0x52020014|=(1<<15);
		 //*(unsigned int*)0x52020814|=(1<<6);
		 GPIO_A->GPIO_ODR &=~(1<<15);
    int i,j;
    while(1)
    {
			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;
		}  
        /*if((GPIO_B->GPIO_IDR &1<<2)==0)//光电开关触发
        {
            for(i = 0;i<4000;i++)//4MHZ 需要延迟200ms的写法
            {
                for(j = 0;j<200;j++)
                {
                    
                }
            }
            
    }
    
    
    return 0;
}*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值