本帖最后由 lxz600408 于 2021-2-15 20:47 编辑
由应用手册,分柝该芯片配置寄存器。实际仅是7种配置。我是如下定义:
#define GPIO_IN_AIN 0x00UL //模拟输入模式
#define GPIO_IN_FLOATING 0x04UL//浮空输入模式
#define GPIO_IN_UpDown 0x08UL //上拉/下拉输入模式 PxODR=1 上拉 PxODR=0 下拉
#define GPIO_OUT_PP 0x01UL//通用推挽输出模式
#define GPIO_OUT_OD 0x05UL//通用开漏输出模式
#define GPIO_AF_PP 0x09UL//复用推挽输出模式
#define GPIO_AF_OD 0x0DUL//复用开漏输出模式
#define CNF_MODE_MASK 0x0FUL
//脚定义
#define CNF_MODE_Pin0 0
#define CNF_MODE_Pin1 4
#define CNF_MODE_Pin2 8
#define CNF_MODE_Pin3 12
#define CNF_MODE_Pin4 16
#define CNF_MODE_Pin5 20
#define CNF_MODE_Pin6 24
#define CNF_MODE_Pin7 28
#define CNF_MODE_Pin8 0
#define CNF_MODE_Pin9 4
#define CNF_MODE_Pin10 8
#define CNF_MODE_Pin11 12
#define CNF_MODE_Pin12 16
#define CNF_MODE_Pin13 20
#define CNF_MODE_Pin14 24
#define CNF_MODE_Pin15 28
本人实际应用全部脚位配置就如下:
GPIOA->CRL = 0; //GPIOA->CRL复位值: 0x4444 4444浮空输入模式
GPIOA->CRL |= ((GPIO_AF_PP << CNF_MODE_Pin7)|(GPIO_OUT_PP << CNF_MODE_Pin6)|
(GPIO_OUT_PP << CNF_MODE_Pin5)|(GPIO_OUT_PP << CNF_MODE_Pin4)|
(GPIO_IN_UpDown << CNF_MODE_Pin3)|(GPIO_IN_AIN << CNF_MODE_Pin2)|
(GPIO_OUT_PP << CNF_MODE_Pin1)|(GPIO_AF_PP << CNF_MODE_Pin0));
GPIOA->CRH =0X04400000;////复位值: 0x4444 4444 不改变PA13/PA14
GPIOA->CRH |= ((GPIO_IN_AIN << CNF_MODE_Pin15)|(GPIO_AF_PP << CNF_MODE_Pin12)|
(GPIO_OUT_PP << CNF_MODE_Pin11)|(GPIO_OUT_PP << CNF_MODE_Pin10)|
(GPIO_AF_PP << CNF_MODE_Pin9)|(GPIO_AF_PP << CNF_MODE_Pin8));
GPIOB->CRL &= ~((CNF_MODE_MASK << CNF_MODE_Pin1)|(CNF_MODE_MASK << CNF_MODE_Pin0));
GPIOB->CRL |= ((GPIO_OUT_PP << CNF_MODE_Pin1)|(GPIO_OUT_PP << CNF_MODE_Pin0));
|