图书馆建设网站注意点,比较有创意的广告,网页界面设计的原则有哪些,襄阳棋牌网站建设继续上篇博文#xff1a;STM32学习和实践笔记#xff08;4#xff09;: 分析和理解GPIO_InitTypeDef GPIO_InitStructure (a)-CSDN博客
往下写#xff0c;
为什么#xff1a;当GPIO_InitStructure.GPIO_PinGPIO_Pin_0 ; 时#xff0c;其实就是将对应的该引脚的寄存器地…继续上篇博文STM32学习和实践笔记4: 分析和理解GPIO_InitTypeDef GPIO_InitStructure (a)-CSDN博客
往下写
为什么当GPIO_InitStructure.GPIO_PinGPIO_Pin_0 ; 时其实就是将对应的该引脚的寄存器地址给了GPIO_InitStructure.GPIO_Pin这就表示选中了GPIO_Pin_0来操作
其实我还是没有真正搞清楚的。
根据
#define GPIO_Pin_0 ((uint16_t)0x0001) /*! Pin 0 selected */
那么该语句实际就是GPIO_InitStructure.GPIO_Pin((uint16_t)0x0001) ;
为什么把这个数给到这个结构体的成员就是选中了Pin0?
在库函数底层应该还是封装了一些东西我没有看到。 在前面不使用库函数而直接操作寄存器的方式我是理解的。其过程如下
首先STM32的全部memory mapping如下图所示 1个1024为1K
1024*10241M
1024*1024*10241G
一共有2的32次方个地址。2的32次方4,294,967,296它连续除3次1024就正好4也就是有4GB的地址。4*10244096 M把这4GB空间分成8块也就是每块是512M。
这4GB地址把所有的存储器和控制寄存器全部包括了进去。
所以如果想操作某一个寄存器来控制某个引脚或者别的功能先一步就是找到该寄存器的地址然后就操作这个地址内的数据这个地址内的数据变化了相应的功能也就实现了。
比如如果我需要选中GPIOC的第一个引脚并对其输入输出模式进行配置那么我需要做的就是找到控制GPIOC的第一个引脚寄存器的地址然后对这个地址内的数值进行修改也就达到了目的。
选中GPIO某个引脚并对其输入输出模式进行配置的寄存器是这两个 这里的偏移地址是指在选中相应的端口的基地址之后再偏移多少才能选中这个寄存器。
各端品的基地址可以从这里看到 以操作GPIOC的引脚为例地址偏移是这样设定的 以上还是很容易理解。