GPIO口输入总结
看了几个星期才看完3讲跑马灯的视频。
总结一下:
对于GPIO口的输出操作总共有三种方式。
一 库函数
库函数就跟工作中调用到的初始化函数一样。
不过知道了对于结构体的成员具体是怎么初始化的。
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //选择输出模式 输出输出 复用 模拟 最后两个不知道是什么模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出 开路输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;//对pin脚的选择 当两个pin脚设置为一样的时候 可以这样写
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;//上拉下拉 不拉 上拉输入 下拉输出?
GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz;//设置频率
GPIO_Init(GPIOF,&GPIO_InitStruct);//设置完毕 把结构体值设置进去
然后到主函数调用函数 然后延时 正常流程
二 寄存器
寄存器是一位一位对GPIO口的设置
F9的寄存器设置:
GPIOF->MODER &= ~(3<<18);
GPIOF->MODER |= 1<<18;
GPIOF->OSPEEDR &= ~(3<<18);
GPIOF->OSPEEDR |= 2<<18;
GPIOF->PUPDR &= ~(3<<18);
GPIOF->PUPDR |= 1<<18;
GPIOF->OTYPER &= ~(1<<9);
GPIOF->OSPEEDR |= 0<<9;
GPIOF->ODR |= 1<<9;//1
正常流程应该是先读 然后再改 然后再写入 (不知道为毛直接改不行)
~(3<<18) 高端操作 3 =11(2进制) 右移18位 然后再取反
相当于一个32位的寄存器 第18 19位设置为0. (这个好像是先置0 然后再写入正常的寄存器)
一般一种32位的寄存器存着16个pin脚的不同设置模式
比如在一种寄存器中18 19 位是pin9 20 21 位就是pin10
三 位操作
位操作的gpio初始化跟一种的库函数一样
不同的只是在主函数的调用上。
输入是PXin(管脚号) x是哪组pin脚
输出是PXout(管脚号)
主要说明的是地址上的映射。
把寄存器拿出来设置映射到地址上 ,然后每个寄存器的值都对应上一个地址。
然后给地址赋值就行了。
最近还是懒了一点。