// 系统时钟初始化 - 不加入会报错 可以尝试一下
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;
}*/
3.12ZUOY
最新推荐文章于 2025-12-31 10:43:57 发布
1176

被折叠的 条评论
为什么被折叠?



