stm32 GPIO口配置操作

发布者:老王古玩店最新更新时间:2017-09-17 来源: eefocus关键字:stm32  GPIO口  配置操作 手机看文章 扫描二维码
随时随地手机看文章

         stm32里面最基本的思路就是使用外设相应寄存器之前,必须开启控制对应寄存器的时钟,读者可到技术手册中查询相应的时钟控制的相应的寄存器。

           这里首先开启stm32普通io口的时钟。  

           GPIO 作为通用输入输出口使用时,当有外部中断设置时才需要开启AFIO时钟,否则不需要开启AFIO 时钟。

          然后就是进行gpio结构体的初始化设置

         GPIO 常用设置里包括三个结构体的使用如下:

1、GPIO_InitTypeDef为GPIO的基本参数设置结构体,其中GPIO_Pin表示引脚号,GPIO_Speed表示引脚的速度,GPIO_Mode表示引脚的输入输出模式选择。通过这三个基本设置实现了GPIO 的全部设置项。

typedef struct
{
  uint16_t GPIO_Pin;                                              
  GPIOSpeed_TypeDef GPIO_Speed;  
  GPIOMode_TypeDef GPIO_Mode;    

}   GPIO_InitTypeDef;

2、GPIOSpeed_TypeDef用枚举型结构体列出了GPIO_Speed的所有可能值,读者只需选择相应选项就可以了。

typedef enum

  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz, 
  GPIO_Speed_50MHz
}  GPIOSpeed_TypeDef;


3、GPIOMode_TypeDef结构体同样是列出了GPIO_Mode 的所有可能值。

typedef enum

{ GPIO_Mode_AIN = 0x0,
  GPIO_Mode_IN_FLOATING = 0x04,
  GPIO_Mode_IPD = 0x28,
  GPIO_Mode_IPU = 0x48,
  GPIO_Mode_Out_OD = 0x14,
  GPIO_Mode_Out_PP = 0x10,
  GPIO_Mode_AF_OD = 0x1C,
  GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

      通过完成以上基本设置后     

就可以通过函数来操作io口了,例如:


GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);              读取指定输入引脚
GPIO_ReadInputData(GPIO_TypeDef* GPIOx);                                                       读取指定端口号的所有输入引脚
GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);            读取指定输出引脚
GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);                                                      读取指定端口号的所有输出引脚
GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);                                   输出引脚置位
GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);                               输出引脚置0


下面附上完成配置历程片段:

GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  
 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
                                                                                 
GPIO_SetBits(GPIOA,GPIO_Pin_2);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_2);


关键字:stm32  GPIO口  配置操作 引用地址:stm32 GPIO口配置操作

上一篇:Stm32RS232串口通信——中断接收发送数据
下一篇:关于STM32GPIO口配置命令

推荐阅读最新更新时间:2024-03-16 15:37

STM32之父谈2019产品蓝图:性价比、AI、开发体验
日前,在2019年STM32峰会上,STM32之父,意法半导体微控制器事业部全球市场总监Daniel Colonna介绍了STM32产品规划及生态战略。 Daniel几十年来的工作一直围绕着微控制器。自2006年起任意法半导体微控制器事业部全球市场总监 。他于1982年加入德州仪器,担任微控制器应用工程师;1986年加入Thomson-Mostek,负责8位微控制器业务;三年后,加入意法半导体法国公司,担任8位微控制器产品市场经理,并于90年代后期致力于启用ARM32位架构。 2002年,意法半导体推出首个基于ARM7的产品系列STR7,Daniel对此作出了重要贡献。后来,他带领团队启用新的Cortex-M架构,为意法半导体
[单片机]
<font color='red'>STM32</font>之父谈2019产品蓝图:性价比、AI、开发体验
STM32 八路AD转换用DMA传输调试成功,DMA传输不错位
// // #include stm32f10x_conf.h //把DMA.h和ADC.h 的注释去掉 #include stm32f10x.h #include stm32_eval.h #include #define N 50 //每通道采50次 #define M 8 //为8个通道 #define ADC1_DR_Address ((u32)0x4001244C) vu16 After_filter ; //用来存放求平均值之后的结果 vu16 AD_Value ; //用来存放ADC转换结果,也是DMA的目标地址
[单片机]
STM32使用标准库,有时候在SLEEP模式下无法唤醒问题
现在标准库暴露越来越多的问题,今天碰到一个客户在sleep mode下出现无法唤醒现象,正常来说,只要有中断,都可以把它唤醒,但事实就是相反,几千套产品出现几十台无法从sleep模式下唤醒。 解决办法: 1、在无法唤醒条件下,检测外围电压,电流,一切正常。 2、测量唤醒源电压,能达到唤醒电平。 3、查看代码配置,似乎并未有什么异常。 4、通过对比重上电条件和唤醒后执行代码的条件,发现重上电初始化了时钟和IO口,而唤醒后却没有,尝试在唤醒后加上时钟初始化和IO口初始化,还是不行; 5、最后在唤醒后先初始化IO口,再初始化时钟,发现能解决问题。 总结:有可能标准库唤醒时,因硬件
[单片机]
64脚和小于64脚的STM32进行AD时注意,参照电源处理方法
请注意,ADC_IN17上没有内部基准,将其说成基准电压概念不对。 所以横线以下的理解不对,如果将其做为参考,则其电压假定按1.2V计算,实际测量的数字量是1271~1275,按此推算: 1.2/1275=VDD/4095, 所以VDD=3.85V,很明显供电压换算出来的值与实际3.3V不符,所以不有用其做为参考。 实际上,可以通用ADC_IN1采集某参考源的电压,其它通道按此进行比例换算。 ---------------------------------------------------------------- ADC_IN17是内部参照电压,不是基准电压;它仅仅相当于一个标准电压参照。 STM32的内
[单片机]
毕业设计| STM32+OneNET实现NB-IOT电量采集系统
实现的功能: 1)测量用电设备的有功功率、电流和电压有效值和用电量; 2)电参数通过NB-IoT上传到OneNET,可以在后台实时监控数据; 3)通过OneNET后台发送指令控制电参数是否上传(可以拓展继电器控制)。 02 需要的材料 需要的材料: 一个STM32芯片,我这里用的是正点原子的mini开发板,型号:STM32F103RCT6 ST-Link下载器,主要用来给STM32单片机下载程序的,有其他的仿真下载器也是可以的。当然,用串口也是可以下载的,就是比较麻烦,我比较喜欢用仿真器下载,一键完事! USB-TTL串口模块,这个是用来调试M5311模块的,可以不需要,因为mini开发板板载
[单片机]
毕业设计| STM32+OneNET实现NB-IOT电量采集系统
STM32中断机制
简介:下图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。 这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。 图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚进入,经过编号2的边沿检测电路,通过编号3的或门进入中断“挂起请求寄存器”,最后经过编号4的与门输出到NVIC中断控制器;在这个通道上有4个控制选项,外部的信号首先经过边沿检测电路,这个边沿检测电路受上升沿或下降沿选择寄存器控制,用户可以使用这两个寄存器控制需要哪一个边沿产生中断,因为选择上升沿或下
[单片机]
<font color='red'>STM32</font>中断机制
STM32 CubeMX 中如何查看系统时钟
代码如下: uint32_t sysclock = 0; sysclock = HAL_RCC_GetSysClockFreq(); 这样就可以在线仿真时看sysclock了,以判断单片机是否正常运行。这些函数都在rcc这个库文件里面,还可以查看时钟树上其他总线上的时钟。
[单片机]
如何利用定时器产生PWM波
摘要:利用定时器产生PWM波。然后利用32的外部中断和定时器来测量32输出的波形硬件:STM32F103C8T6核心板、示波器、串口调试助手所用到的的引脚为PA8和PA0。 测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。然后等待第二次中断到来,在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,同时关闭计数器。因为知道了计数器计数一个数的时间,所以在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,通过这个值就知道一个脉冲的时间周期。时间周期的倒数就是外部信号的频率。 一、利用TIM1的CH1产生PWM波 pwm.c #include pwm.h voidTIM1_PWM_Init
[单片机]
如何利用定时器产生PWM波
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved