1 GPIO初始化配置函数 GPIO_Init(GPIOC, &GPIOInitStruct);
1 .1 正常的初始化函数代码
1.2 解读GPIO_Init(GPIOC,&GPIOInitStruct);
所以GPIOC的地址为 0x4000 0000 + 0x0001 0000 + 0x0000 1000 = 0x4001 1000
STM32F103C8T6通用与复用功能I/O(GPIO与AFIO)、寄存器映射-CSDN博客
所以将GPIOC外设的寄存器地址传过去,也就是可以通过地址进行读写相应的寄存器值
1.3 通过结构体指针赋值(&GPIOInitStruct)
然后就有了 上面正常初始化的代码
2 解读CR寄存器是如何配置输入、输出模式的,CNF、MODE
2.1 将GPIOC_13设置为开漏输出模式(最小系统板C8T6)
硬件电路搭建
2.2 因为是GPIOC_13,所以端口配置为高寄存器(GPIOx_CRH) (x=A..E)
查看端口位配置表
配置为输出模式,2Mhz的IO口翻转速度,所以MODE大于00,可以参考上面图。即MODE=11,CNF1=0,CNF0=1,为开漏输出,即CNF=01。
通过ST-LINK仿真验证结果
验证结果正确,此外还发现一个事情,也就是芯片出厂io口设置默认是浮空输入,因为省电嘛。通过仿真查看对应的是浮空输入。出厂默认是浮空输入,验证成功。
有一些少部分IO口不是浮空输入,例如PA13、14、15通过查表可得是上/下拉输入。并且输出是高电平。
因为浮空输入是高低电平不确定,并且高阻态,此PA13、14、15的IO口的本人理解可能是这样。欢迎各各位大佬指导一下。
觉得我讲的对你有帮助的话,点个赞支持一下,谢谢。也欢迎各位大牛指导一下我的错误,谢谢大家,大家一起进步。
标签:GPIOX,CNF,GPIOC,浮空,MODE,寄存器,GPIO,输入 From: https://blog.csdn.net/weixin_68142348/article/details/140263374