/*******************************************************************************
设置GPIO基本参数
*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5 ;
//设置的IO为pin4与pin5
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/* GPIO_Speed 描述
GPIO_Speed_10MHz 最高输出速率10MHz
GPIO_Speed_2MHz 最高输出速率2MHz
GPIO_Speed_50MHz 最高输出速率50MHz
*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
/*
GPIO_Speed 描述
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出通常有5种方式使用某个引脚功能,
它们的配置方式如下:
1)作为普通GPIO输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,
同时不要使能该引脚对应的所有复用功能模块。
2)作为普通GPIO输出:
根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引
脚对应的所有复用功能模块。
3)作为普通模拟输入:
配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有
复用功能模块。
4)作为内置外设的输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,
同时使能该引脚对应的某个复用功能模块。
5)作为内置外设的输出:
根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能
该引脚对应的所有复用功能模块。1、模拟输入模式下,是用于AD输入时输入模拟量,此时施密特触
发器输入关闭,施密特触发器输出为0.
2、下拉输入:打开内部下拉电阻
3、上拉输入:打开内部上拉电阻
4、浮空输入 :这个输入模式,输入电平必须由外部电路确定,
要根据具体电路,加外部上拉电阻或下拉电阻。
5、推挽输出:可以输出高,低电平,连接数字器件。推挽式输出输出电阻
小,带负载能力强。
6、开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要
上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强
(一般20ma以内).能驱动大电流和大电压。LED就使用这种模式
7、复用是指该引脚打开remap功能。*/
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource4);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line=EXTI_Line4;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line=EXTI_Line5;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);
}
/*GPIO常使用的几条函数
GPIO_ReadInputDataBit 读取指定端口管脚的输入
u8 ReadValue;
ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);
使用setbits 与resetbits 是比较简单,其实还是可以使用
其它函数。例如可以使用GPIO_WriteBit
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET);对于好像流水灯呀这些一个整段IO,可以使用
GPIO_Write(GPIOA, 0x1101);GPIO_EXTILineConfig 选择GPIO管脚用作外部中断线路
GPIO_EXTILineConfig(GPIO_PortSource_GPIOB, GPIO_PinSource8);*/
关键字:STM32 GPIO设置
引用地址:
学习STM32笔记3 GPIO设置
推荐阅读最新更新时间:2024-03-16 15:15
stm32舵机驱动程序分享
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按内核架构分为不同产品: 其中STM32F系列有: STM32F103“增强型”系列 STM32F101“基本型”系列 STM32F105、STM32F107“互联型”系列 增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是32位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,相当于0.5mA/MHz。
[单片机]
stm32.cube(五)——HAL.RCC
一、RCC特性 1.1 HIS内部高速时钟 HIS 时钟信号通过一个 8MHz 的 RC 振荡器产生,上电复位时,被自动选做系统时钟。但由于HIS的稳定性较差,受温度、电压等环境参数影响较大,一般只作为备用时钟使用。在芯片初始化的startup.s里,通常会调用一个c编写的函数system_init(),里面会将系统时钟源从HIS设置成HSE。 1.2 HSE外部高速时钟 由晶振或者外部时钟源提供的时钟,较为稳定。 1.3 PLL PLL可用于将 HIS RC 振荡器的输出时钟频率倍频,具体的原理要参考锁相环电路的相关知识。 1.4 LSE外部低速时钟 LSE 振荡器是一个 32.768kHz 的低速外部晶体或者陶瓷共振器
[单片机]
一文教会你STM32使用内部振荡器及其和外部晶体振荡器的区别和STM32L031性能分析和比较
在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 2)对于少于100脚的产品,有2种接法: 2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。 2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出‘0’。此方法可以减小功耗并(相对上面 首先要明确的是STM32没有内部晶振,HSI是内部RC振荡器。 HSI内部8MHz的RC振荡器的误差在1%左右 内部RC振荡器的精度通常比用HSE(外部晶振
[单片机]
有关STM32外设配置的几个常见问题
在做STM32开发应用的过程中,常常会遇到这样那样的问题,其中相当部分问题是与各外设及相关GPIO的配置有关的。就这方面的问题,这里一起总结交流下。 目前的STM32芯片是基于ARM内核的可编程微处理器,我们可以简单地把内核以外的东西统称为外设,比方 TIMER、UART、SPI、USB、I2C、存储器等功能模块。以32F427芯片功能框图为例,那些红圈上的都是。 好,我们直接切入主题。围绕外设的配置,我们遇到的问题,大致可以分为两大类。 一、时钟问题,就这方面的问题又可以细分为几小点。 1.1 时钟没打开就使用。 这个不难理解,就是相关外设的时钟没有打开。比如UART5的时钟没有打开,SPI的时钟没打开
[单片机]
STM32驱动LCD原理
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 ▲驱动流程 01、使用FSMC驱动LCD 关于FSMC,把数据写入相应的地址,FSMC就会把地址从FSMC_A出去,写入的数据会会从FSMC_D发出去。至于片选等信号线都是自动的。读的话,直接读相应的地址,就会拿到改地址上的数据。 FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即
[单片机]
一个关于STM32 CAN出错恢复的话题
最近有个STM32 用户咨询: 最近在使用stm32f105做双can通信,can驱动芯片使用的TJA1042,发现将canH canL 短路再放开以后,can出错恢复不回来?之前在K40上使用的时候没有这个问题,不知道这个情况大家有什么指导建议啊? 另外,他还附上了基于STM32CUBEMX工具配置的相关代码如下: hcan1.Instance = CAN1; hcan1.Init.Prescaler = 2; hcan1.Init.Mode = CAN_MODE_NORMAL; hcan1.Init.SJW = CAN_SJW_1TQ; hcan1.Init.BS1 = CAN_BS1_8TQ; hc
[单片机]
单片机stm32你了解多少
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm32的视频资料便于学习参考。 什么是串口 UART : Universal Asynchronous Receiver/Transmitter 通用异步收发器 USART : Universal Synchronous Asynchronous Receiver/Transmitter 通用同步/异步收发器 一种是常用也是最简单的串行数据传输协议。数据线只需要两根就可以实现全双工。 Tx: 发送数据线 Rx: 接收数据线 A B TX
[单片机]
STM32中电源各引脚说明分析
一、数字电路中,电源符号 VCC:C=circuit,表示电路的意思,即接入电路的电压; VDD:D=Device,表示器件的意思,即器件的工作电压; VSS:S=Series,表示公共连接的意思,通常指电路公共接地端电压。 总结来说,VCC接电路的电源(±),VSS接电路的地,VDD接器件的电源引脚(±)。 二、STM32中电源各引脚说明 VDDA:A=Analog,表示模拟的意思,所以就是表示模拟器件的工作电压; VSSA:表示模拟器件的公共端地。 VBAT:给后备区域供电,维持包括RTC/BKP寄存器等在内的一些数据的保存。 100引脚的封装中: VREF-:A/D的参考,当需要使用时,必须绑定到VSSA(使得所有模拟器
[单片机]