STM32学习笔记(一)-------GPIO口的操作
2015-07-31 10:50
260 查看
1.新建一个工程模板
2.GPIO口操作的步骤
(1)声明一个结构体 GPIO_InitTypeDef GPIO_InitStructure;
这个结构体中包括GPIO_Pin 、GPIO_Mode、GPIO_Speed 。
(2)端口使能: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);
调用上述函数,函数参数第一个是你要使能端口,第二个是ENABLE,就是使能。如果其中用到几个端口,在第一个参数中
用或运算“|”连接,就可以同时声明几个端口。
(3) GPIO_InitStructure.GPIO_Pin 端口配置,就是你要用哪个IO口
GPIO_InitStructure.GPIO_Mode 模式设置,表明IO口的功能是什么,在STM32中IO口有8种模式
GPIO_InitStructure.GPIO_Speed IO口速度设置,在STM32中IO口有3中速度
注: IO口的八种模式:1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入 5、开漏输出 6、推挽输出 7、推挽式复用功能 8、开漏复用功能
IO口的三种速度:10MHZ、2MHZ、50MHZ
(4)根据设定参数初始化GPIO口 GPIO_Init(GPIOA, &GPIO_InitStructure);
5、IO的高低电平操作
GPIO_SetBits 寄存器:BSRR
GPIO_ResetBits 寄存器:BRR
GPIO_WriteBit 寄存器:BSRR BRR
GPIO_Write 寄存器:ODR
这两个调用的寄存器不同,功能也不同。区别在于
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 置高
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 置低
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
前者是直接对IO进行操作,而后者的输入是对整个IO口,如PA口进行操作,你要那位高就在那位置“1”,所以第二组函数的第三个参数应该为一个十六进制的数。
一般情况下使用使用第一组比较方便。
2.GPIO口操作的步骤
(1)声明一个结构体 GPIO_InitTypeDef GPIO_InitStructure;
这个结构体中包括GPIO_Pin 、GPIO_Mode、GPIO_Speed 。
(2)端口使能: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);
调用上述函数,函数参数第一个是你要使能端口,第二个是ENABLE,就是使能。如果其中用到几个端口,在第一个参数中
用或运算“|”连接,就可以同时声明几个端口。
(3) GPIO_InitStructure.GPIO_Pin 端口配置,就是你要用哪个IO口
GPIO_InitStructure.GPIO_Mode 模式设置,表明IO口的功能是什么,在STM32中IO口有8种模式
GPIO_InitStructure.GPIO_Speed IO口速度设置,在STM32中IO口有3中速度
注: IO口的八种模式:1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入 5、开漏输出 6、推挽输出 7、推挽式复用功能 8、开漏复用功能
IO口的三种速度:10MHZ、2MHZ、50MHZ
(4)根据设定参数初始化GPIO口 GPIO_Init(GPIOA, &GPIO_InitStructure);
5、IO的高低电平操作
GPIO_SetBits 寄存器:BSRR
GPIO_ResetBits 寄存器:BRR
GPIO_WriteBit 寄存器:BSRR BRR
GPIO_Write 寄存器:ODR
这两个调用的寄存器不同,功能也不同。区别在于
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 置高
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 置低
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
前者是直接对IO进行操作,而后者的输入是对整个IO口,如PA口进行操作,你要那位高就在那位置“1”,所以第二组函数的第三个参数应该为一个十六进制的数。
一般情况下使用使用第一组比较方便。
[code]void LED_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_2); GPIO_SetBits(GPIOA,GPIO_Pin_4); GPIO_SetBits(GPIOA,GPIO_Pin_6); }
相关文章推荐
- 1.4-sar命令
- Java遍历读取文件目录结构
- 模拟windows消息框
- Canvas globalAlpha透明度属性(转)
- HTML DOM setInterval() 方法
- Android中Application类的用法
- 【HDOJ 5327】 Olympiad
- 配置Git自动补全功能
- BZOJ 2190 仪仗队
- unity3d ppsspp模拟器中的post processing shader在unity中使用
- 多校3- RGCDQ 分类: 比赛 HDU 2015-07-31 10:50 2人阅读 评论(0) 收藏
- 理解Windows内核模式与用户模式
- 升级Windows10正式版后触摸板手势有哪些变化?
- Reverse Words in a String
- dump data
- 经典makefile例子 http://blog.chinaunix.net/uid-25100840-id-2047826.html
- 堆区和栈区的区别
- 如何优雅地使用iPad阅读源代码
- 《深入理解C++对象模型》读书笔记(一)
- leetcode--Implement strStr()