简介
寄存器版本
寄存器
配置寄存器(CRL CRH)
控制输出模式和输出速率
CRH控制高八位模式,CRL控制低八位模式
GPIOC->CRH
位 | 控制引脚号 |
---|---|
31:28 | PC15 |
… | … |
3:0 | PC8 |
GPIOC->CRL
位 | 控制引脚号 |
---|---|
31:28 | PC7 |
… | … |
3:0 | PC0 |
配置表 |
端口输入数据寄存器(IDR)
只读寄存器,只能以16位读出
端口输出数据寄存器(ODR)
可读可写,只用了低16位
写:控制电平
读:读电平
GPIO输出
RCC->APB2ENR|=1<<3;//开启PORTB的时钟
GPIOC->CRH&=0xFFF00FFF;//清掉PC11和PC12位信息
GPIOC->CRH|=0x00038000;//设置PC11推挽输入,PC12输出
CPIOC->ODR=1<<11;//PC11上拉
GPIO输入
轮询方式
KEY初始化
RCC->APB2ENR|=1<<3;//开启PORTB的时钟
GPIOC->CRH&=0xFFFFFFF0;//清掉PC8
GPIOC->CRH|=0x00000008;//设置PC8为输入
CPIOC->ODR=1<<8;//PC8上拉
放到while循环里
#define KEY0 PBin(8)//读PB8引脚值
{
if(KEY0==0)
{
delay_ms(10);//去抖动
if(KEY0==0)
return 1;
}
return 0;
}
中断方式
GPIO口
0-4口对应中断线0-4,
5-9口共用一个EXTI9_5_IRQn,
10-15共用一个EXTI15_10_IRQn
KEY初始化
RCC->APB2ENR|=1<<3;//开启PORTB的时钟
GPIOC->CRH&=0xFFFFFFF0;//清掉PC8
GPIOC->CRH|=0x00000008;//设置PC8为输入
CPIOC->ODR=1<<8;//PC8上拉
Ex_NVIC_Config(GPIO_C,8,FTIR);//上升沿触发
MY_NVIC_Init(2,0,EXTI9_5_IRQn,2);//抢占2,子优先级0,组2
中断处理函数
void EXTI9_5_IRQHandler(void)
{
if(EXTI->PR&&1<<8)
{
delay_ms(10);//消抖
EXTI->PR=1<<9;//清除中断标志位
}
}