STM32的IO口的8种配置(GPIO)

发布者:心满意足最新更新时间:2021-07-14 来源: eefocus关键字:STM32  IO口  配置  GPIO 手机看文章 扫描二维码
随时随地手机看文章

1STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出)


①浮空输入_IN_FLOATING


②带上拉输入_IPU


③带下拉输入_IPD


④模拟输入_AIN

开漏输出_OUT_OD


⑥推挽输出_OUT_PP


⑦复用功能的推挽输出_AF_PP


⑧复用功能的开漏输出_AF_OD


1.1I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声 控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。


关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。比如:


1.1.1对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。


1.1.2对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。


1.1.3对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。


1.2GPIO口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。


1.3在复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。


1.4所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。


1.5GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。




2在STM32中如何配置片内外设使用的IO端口


首先,一个外设经过①配置输入的时钟和②初始化后即被激活(开启);③如果使用该外设的输入输出管脚,则需要配置相应的GPIO端口(否则该外设对应的输入输出管脚可以做普通GPIO管脚使用);④再对外设进行详细配置。


对应到外设的输入输出功能有下述三种情况:

一、外设对应的管脚为输出:需要根据外围电路的配置选择对应的管脚为复用功能的推挽输出或复用功能的开漏输出。

二、外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输入、带上拉输入或带下拉输入。

三、ADC对应的管脚:配置管脚为模拟输入。


如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。将管脚配置成复用输出功能后,如果外设没有被激活,那么它的输出将不确定。


3通用IO端口(GPIO)初始化:


3.1GPIO初始化


3.1.1RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | B | C, ENABLE):使能APB2总线外设时钟


3.1.2RCC_ APB2PeriphResetCmd (RCC_APB2Periph_GPIOA | B | C, DISABLE):释放GPIO复位


3.2配置各个PIN端口(模拟输入_AIN、输入浮空_IN_FLOATING、输入上拉_IPU、输入下拉_IPD、开漏输出_OUT_OD、推挽式输出_OUT_PP、推挽式复用输出_AF_PP、开漏复用输出_AF_OD)


3.3GPIO初始化完成。


关键字:STM32  IO口  配置  GPIO 引用地址:STM32的IO口的8种配置(GPIO)

上一篇:STM32F10x的复位及时钟控制
下一篇:基于CORTEX-M3的多机通信网络的设计与实现

推荐阅读最新更新时间:2024-11-17 13:17

不用晶振,STM32内部HSI时钟的倍频使用
博主最近用STM32F1系列单片机做一个触摸屏USB鼠标,考虑不用外部晶振而使用STM32内部8MHz HSI RC作为时钟源。由于USB协议规定了48MHz 的USB时钟,故必须对HIS作PLL倍频处理后得到PLLCLK作为STSCLK时钟。时钟关系见如下STM32F1时钟树: 类比正点原子STM32F1寄存器版本使用外部晶振的时钟初始化函数,改动得到使用HSI作为时钟源,SYSCLK为48MHz的初始化代码: void Stm32_Clock_Init(u8 PLL) { unsigned char temp=0; MYRCC_DeInit(); //复位并配置向量表 RCC- CR|=0x00
[单片机]
不用晶振,<font color='red'>STM32</font>内部HSI时钟的倍频使用
STM32F429 Cubemx配置Timer实现5ms一个中断
目的:在STM32F429实现一个5ms一个interrupt的中断,并且重复触发 我们选用TIM2,可以看到TIM2是在APB1总线上,也可以看到APB1总线的 Clock是90M 整个Cube的配置为: 其中我要来说下几个参数: 预分频器值(Prescaler value):此部分就是把clock source分频到一个你想要的频率,计数器时钟频率CK_CNT 等于fCK_PSC/ (PSC + 1) 比如我们APB1是90M,我们此部分设置90-1,得到的最终频率是90M/((90-1)+1) = 1MHz 定时器周期(Period):我们设置预分频后得到1MHz,此部分想得到5ms,就是1M Hz
[单片机]
STM32F429 Cubemx<font color='red'>配置</font>Timer实现5ms一个中断
stm32移植过程中遇到的问题
1.Warning: L6305W: Image does not have an entry point. (Not specified or not set due to multiple choices.) 在Options for Target选项的Linker---Misc controls加入入口地址:--entry Reset_Handler 2. Error: L6915E: Library reports error: __use_no_semihosting was requested, but __user_initial_stackheap was referenced 对于这个问题,我在
[单片机]
<font color='red'>stm32</font>移植过程中遇到的问题
stm32专题十二:DEBUG调试宏 C语言 调试宏
调试宏在c编程中比较重要,通常用于前期测试打印调试信息,然后正式发布时,只需要修改宏,就能取消打印全部调试信息,非常方便。 fmt为希望输出的调试信息,比较关键的就是(fmt,...)和##__VA_ARGS__,__VA_ARGS__用于把...替换成宏并连接。 典型用法: void DefaultFlashSet(void) { // 若Flash标记地址的值没有被正确的写入,则重新写入,只会在全片擦除后执行 if ((InternalFlashRead(FLASH_SIGN_ADDR) != FLASH_WRITE_SIGN)) { DEBUG_INFO( Flash擦除 ); InternalFlas
[单片机]
<font color='red'>stm32</font>专题十二:DEBUG调试宏 C语言 调试宏
STM32CubeMX配置硬件CRC
实验目的: 通过STM32CubeMX进行简单配置生成HAL库实现硬件CRC32校验的功能。 一、STM32CubeMX配置如下: 二、生成的HAL库源码如下: 三、Debug结果如下: 对字符串 DA0000000000 进行CRC32计算结果如下: 四、在线工具CRC校验结果如下: 完美,收工!
[单片机]
STM32CubeMX<font color='red'>配置</font>硬件CRC
基于stm32做的遥控器源程序(按键和摇杆均有)
按键的话非常简单,定义一个函数,然后可以直接在主函数里实现,要确认好自己的蓝牙就可以,波特率也要一致才行。 int main(void) { delay_init(); LED_Init(); Key_Init(); uart_init(9600); while(1) { keys(); } } 摇杆的话,需要用到ADC算法,下面会分享一个ADC搜集数据的程序然后将搜集的数据加以利用就好了。 如下: void chuli(void ) { u16 x; u16 y; x = Get_Adc_Average(ADC_Channel_1 , 10);
[单片机]
stm32CAN波特率计算小程序(QT源码)
软件:Qt Creator 开发环境:Window7 用qt做得一个计算波特率的小程序,在实际的应用中我们设置波特率的时候是通过以下参数来定的: CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_9tq; CAN_InitStructure.CAN_BS2=CAN_BS2_6tq; CAN_InitStructure.CAN_Prescaler=5; 波特率计算小程序的截图: 根据所需的的采样点、波特率以及错误率得到以上外设初始化所需的参数。 据网上资料,采样点的设置有以下规律: 75% when 波特率
[单片机]
stm32CAN波特率计算小程序(QT源码)
STM32 入门之 GPIO
入手STM32有一段时间了,感觉刚入门时很难,无处下手,现在学到了点皮毛,写出来和大家分享一下。 首先,什么叫GPIO?这个问题,答案是我也不知道!至少目前我没有必要知道,我只要知道他其实就是51单片机的那种IO口而已,不同的是,51单片机的IO口是不需要配置模式的,而STM32的IO口(哦,不,应该说是GPIO口,╮(╯▽╰)╭,真绕舌头)是需要配置模式和时钟的(好吧,又冒出一个时钟来,够麻烦的),在这里要说明一下,STM32的GPIO,如果你要用它,就要做两步工作,第一是配置模式、速度,第二是配置其时钟并使能(貌似说两步有点牵强)。估计现在大家已经糊涂了,好吧,别急,我一点一点给大家解释解释; 我
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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