STM32入门学习之GPIO(STM32F030F4P6基于CooCox IDE)(三)
2015-09-26 15:00
465 查看
先直接上代码
1、说头文件
既然有用到GPIO函数,就必须使用到gpio.h。而Cotex M0架构,所有外围模块的时钟是可控制的,所以如果要使能IO口,必须要配置时钟,于是需要应用时钟相关的库,所以有rcc.h。另外,作为芯片本身的头文件,这个基本需求,于是有了stm32f0xx.h。其实,以上头文件在配置Repository就已经在项目文件夹下面了。
2、说时钟
关于STM32的时钟,也是一个大内容,这里不详细讲解,请大家百度之。简要介绍时钟函数RCC_AHBPeriphClockCmd函数,这个函数可在stm32f0xx_rcc.c文件下查看到源代码,本质就是寄存器配置。
看RCC相关的寄存器
3、再说GPIO
网上看到很多GPIO_InitTypeDef GPIO_InitStructure,其实这就是定义一个结构体,后面的结构体名称是可以随便取的,只要不和关键词冲突,所以我定义了一个PORT_LED,接下来我们就要配置IO的各种参数了。具体有哪些参数呢,我们可以从GPIO_InitTypeDef 这个源代码下面看一看。如下图所示,有GPIO脚位、模式、速度、输出类型、上下拉这几个参数。
4、关于GPIO_pin,如果定义的IO是PA4,则对应就是GPIO_Pin_4,而MoDe、Speed、Otype、Pupd等我们也可以从gpio.h找到相关的取值。
5、以上参数配置完成后,调用GPIO_Init 正式加载配置。第一个参数为GPIOA、B、C、D等,第二个参数就是我们自己定义的结构体
只有这个函数调用玩了,才算是正式加载了。
对于同一个A口或者B口等多个引脚,如果其输入输出、上拉下拉等参数完全一致,则在定义引脚的时候可通过“|”的符号来实现多个IO同时定义
如多个LED,可以PORT_LED.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_9类似
控制输入输出,set函数输出高电平,reset函数输出低电平,注意函数第一个参数表示端口ABCD等,第二个参数是引脚,这里不能采用我们自定义的什么PORT_LED、PORT_KEY1等。
GPIO_SetBits(GPIOA,GPIO_Pin_4);//输出高电平
//GPIO_ResetBits(GPIOA,GPIO_Pin_4);//输出低电平
6、关于GPIO输入,则只要在GPIO参数配置时将GPIO_Mode_OUT改成GPIO_Mode_IN即可。
然后调用 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_X)函数来读取IO
关于IO更多函数,可以查看stm32f0xx_gpio.h
#include "stm32f0xx.h" #include "stm32_lib/inc/stm32f0xx_rcc.h" #include "stm32_lib/inc/stm32f0xx_gpio.h" int main(void) { //1、使能时钟 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //定义一个IO GPIO_InitTypeDef PORT_LED; //设置IO引脚,模式,输出类型,速度 PORT_LED.GPIO_Pin=GPIO_Pin_4;//IO引脚,第4脚(个人的小板子PA4有连接LED) PORT_LED.GPIO_Mode=GPIO_Mode_OUT;//模式:输出 PORT_LED.GPIO_OType=GPIO_OType_PP;//输出类型,推挽输出 PORT_LED.GPIO_Speed=GPIO_Speed_10MHz;//输出速率,10MHz GPIO_Init(GPIOA,&PORT_LED);//正式初始化,PA口 GPIO_SetBits(GPIOA,GPIO_Pin_4);//输出高电平 //GPIO_ResetBits(GPIOA,GPIO_Pin_4);//输出低电平 while(1){} }
1、说头文件
既然有用到GPIO函数,就必须使用到gpio.h。而Cotex M0架构,所有外围模块的时钟是可控制的,所以如果要使能IO口,必须要配置时钟,于是需要应用时钟相关的库,所以有rcc.h。另外,作为芯片本身的头文件,这个基本需求,于是有了stm32f0xx.h。其实,以上头文件在配置Repository就已经在项目文件夹下面了。
2、说时钟
关于STM32的时钟,也是一个大内容,这里不详细讲解,请大家百度之。简要介绍时钟函数RCC_AHBPeriphClockCmd函数,这个函数可在stm32f0xx_rcc.c文件下查看到源代码,本质就是寄存器配置。
看RCC相关的寄存器
3、再说GPIO
网上看到很多GPIO_InitTypeDef GPIO_InitStructure,其实这就是定义一个结构体,后面的结构体名称是可以随便取的,只要不和关键词冲突,所以我定义了一个PORT_LED,接下来我们就要配置IO的各种参数了。具体有哪些参数呢,我们可以从GPIO_InitTypeDef 这个源代码下面看一看。如下图所示,有GPIO脚位、模式、速度、输出类型、上下拉这几个参数。
4、关于GPIO_pin,如果定义的IO是PA4,则对应就是GPIO_Pin_4,而MoDe、Speed、Otype、Pupd等我们也可以从gpio.h找到相关的取值。
5、以上参数配置完成后,调用GPIO_Init 正式加载配置。第一个参数为GPIOA、B、C、D等,第二个参数就是我们自己定义的结构体
<span style="font-size:14px;">GPIO_Init(GPIOA,&PORT_LED);//正式初始化,PA口</span>
只有这个函数调用玩了,才算是正式加载了。
对于同一个A口或者B口等多个引脚,如果其输入输出、上拉下拉等参数完全一致,则在定义引脚的时候可通过“|”的符号来实现多个IO同时定义
如多个LED,可以PORT_LED.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_9类似
控制输入输出,set函数输出高电平,reset函数输出低电平,注意函数第一个参数表示端口ABCD等,第二个参数是引脚,这里不能采用我们自定义的什么PORT_LED、PORT_KEY1等。
GPIO_SetBits(GPIOA,GPIO_Pin_4);//输出高电平
//GPIO_ResetBits(GPIOA,GPIO_Pin_4);//输出低电平
6、关于GPIO输入,则只要在GPIO参数配置时将GPIO_Mode_OUT改成GPIO_Mode_IN即可。
然后调用 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_X)函数来读取IO
关于IO更多函数,可以查看stm32f0xx_gpio.h
相关文章推荐
- local_irq_save和 local_irq_disable
- 采用hash_map进行表格之间数据的查找
- html5定位
- 项目实操Mono+Linux配置 实现ASP.NET运行
- vmtools安装完后为什么无法粘贴
- Emmet语法
- 设备访问机制------阻塞与非阻塞
- SQL Server分页存储过程的五种方法及性能比较
- 数制知识小结
- Android杂谈-RelativeLayout中的baseline是什么
- Android Provider获取通信录
- 微软称今后所有的Win10发行包都是累积的
- iOS基础-事件处理、响应者链
- 2015 ACM/ICPC Asia Regional Shanghai Online A Sweet Journey(简单题)
- 记录——《C Primer Plus (第五版)》第七章编程练习第八题
- android 解析XML方式(三)
- Hive 笔记之 加载数据时,找不到文件路径异常
- SQL中的case when then else end用法
- android MSM8974 上DeviceTree简介
- android 解析XML方式(二)