IO口功能寄存器式配置方法

写的东西比较多,看起来有些杂乱,主要就是把所有IO口有关的寄存器的功能列出,常用的各个位,有想咨询的可以联系[email protected]
/***********************************************************
端口配置低寄存器 (GPIOx_CRL)
端口配置高寄存器 (GPIOx_CRH)

端口输入数据寄存器 (GPIOx_IDR)
端口输出数据寄存器 (GPIOx_ODR)

端口位设置/清除寄存器 (GPIOx_BSRR)
端口位清除寄存器 (GPIOx_BRR)

端口配置锁定寄存器 (GPIOx_LCKR) x=A、B、C、D、E、F、G
***********************************************************/
//------------------------------------------
【GPIOx_CRL】配置Pin0-7的工作模式
【GPIOx_CRH】配置Pin8-15的工作模式
每个寄存器32位,每四位对应一个引脚0xFFFFFFFF,每个F一个引脚。
///----------------------------------------------
【CNFx[1:0] MODEx[1:0]】
【MODEx[1:0]】
MODE配置输入输出:输入模式(MODE[1:0]=00)
输出模式(MODE[1:0]>00)
00 保留
01 最大输出速度为10MHz
10 最大输出速度为20MHz
11 最大输出速度为50MHz
///----------------------------------------------
【CNFx[1:0]】
在输入模式(MODE[1:0]=00):
00:模拟输入模式
01:浮空输入模式(复位后的状态)
10:上拉/下拉输入模式
11:保留
//-----------------------
在输出模式(MODE[1:0]>00):
00:通用推挽输出模式
01:通用开漏输出模式
10:复用功能推挽输出模式
11:复用功能开漏输出模式
//---------------------------------------------
例:
先清零(&),再写数(|)
GPIOB->CRL&=0XFF0FFFFF;
GPIOB->CRL|=0X00300000;//PB.5 推挽输出
///-----------------------------------------------------
0 0000 模拟输入
1 0001 通用推挽输出模式,最大输出速度为10MHz
2 0010 通用推挽输出模式,最大输出速度为20MHz
3 0011 通用推挽输出模式,最大输出速度为50MHz
4 0100 浮空输入模式(复位后的状态)
5 0101 通用开漏输出模式,最大输出速度为10MHz
6 0110 通用开漏输出模式,最大输出速度为20MHz
7 0111 通用开漏输出模式,最大输出速度为50MHz
8 1000 上拉/下拉输入模式
9 1001 复用功能推挽输出模式,最大输出速度为10MHz
A 1010 复用功能推挽输出模式,最大输出速度为20MHz
B 1011 复用功能推挽输出模式,最大输出速度为50MHz
C 1100 保留
D 1101 复用功能开漏输出模式,最大输出速度为10MHz
E 1110 复用功能开漏输出模式,最大输出速度为20MHz
F 1111 复用功能开漏输出模式,最大输出速度为50MHz
////-----------------------------------------------------
(GPIOx_CRL)0xFFFFFFFF
76543210
(GPIOx_CRH)0xF F F F F F FF
15 14 13 12 11 1098
//-------------------------------------------
(【GPIOx_IDR】 端口输入,只读模式,0-15位有效,0代表Pin0输入,1代表Pin1输入,依次类推。
//////---------------------------------------------
例:
C=A&(1<<5); //读第五位
Key1=GPIOA_IDR&(1<<5),Key1取PA5的值,0或1.
//-------------------------------------------
//-------------------------------------------
【GPIOx_ODR】 端口输出,读写模式,0-15位有效,0代表Pin0输出,1代表Pin1输出,依次类推。
//---------------------------------------------
例:
GPIOB_ODR|=(1<<5),PB5输出高,其他无影响。
GPIOB_ODR&=~(1<<5),PB5输出低,其他无影响。
//-------------------------------------------
//-------------------------------------------
【GPIOx_BSRR】端口位设置/ 清除寄存器,控制GPIOx_ODR寄存器的。0-32位有效。
0-15位为1时,设置对应的ODRy位为1 为0无操作。
16-31位为1时,清除对应的ODRy位为0 为0无操作。
例:
GPIOx_BSRR|=(1<<5),PB5输出高,其他无影响。
GPIOx_BSRR|=(1<<21),PB5输出低,其他无影响。 x+16
//-------------------------------------------
//-------------------------------------------
【GPIOx_BRR】端口位清除寄存器,控制GPIOx_ODR寄存器的。0-15位有效
0-15位为1时,清除对应的ODRy位为0
GPIOx_BRR|=(1<<5),PB5输出低,其他无影响。
//-------------------------------------------

//-------------------------------------------
【GPIOx_LCKR】端口配置锁定寄存器,锁定IO口工作模式的,控制GPIOx_CRL、GPIOx_CRH寄存器的。0-15位有效
没啥用吧
//-------------------------------------------

猜你喜欢

转载自blog.csdn.net/qq_27620407/article/details/84129795
今日推荐