STM32的IO口的8种配置详解

转:http://www.elecfans.com/dianzichangshi/20171114579103_a.html

I/O口的输出模式下。有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出驱动电路,用户能够依据自己的须要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块。达到最佳的噪声 控制和减少功耗的目的。

  高频的驱动电路。噪声也高,当不须要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。

  当然假设要输出较高频率的信号,但却选用了较低频率的驱动模块。非常可能会得到失真的输出信号。

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

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

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

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

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

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

  6、全部port都有外部中断能力。为了使用外部中断线,port必须配置成输入模式。

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

  8 、在STM32中怎样配置片内外设使用的IOport

  首先,一个外设经过 ①配置输入的时钟和 ②初始化后即被激活(开启);③假设使用该外设的输入输出管脚,则须要配置相应的GPIOport(否则该外设相应的输入输出管脚能够做普通GPIO管脚使用);④再对外设进行具体配置。

 

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

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

  二、外设相应的管脚为输入:则依据外围电路的配置能够选择浮空输入、带上拉输入或带下拉输入。

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

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

 

3 通用IOport(GPIO)初始化:

  1 )GPIO初始化

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

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

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

  3) GPIO初始化完毕

  推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

  推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

 

 

最后总结下使用情况:

  在STM32中选用IO模式

  (1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1

  (2)带上拉输入_IPU——IO内部上拉电阻输入

  (3)带下拉输入_IPD—— IO内部下拉电阻输入

  (4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电

  (5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能

  (6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的

  (7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)  ?????

  (8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)  ????

 

 

 

 

 

  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 中,IO 中断配置需要以下步骤: 1. 选择需要配置IO ,例如 PA0。 2. 配置 IO 为输入模式,使用下面的代码: ```c GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); ``` 3. 配置 IO 的中断线,使用下面的代码: ```c HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); ``` 4. 配置 IO 的触发方式,可以选择上升沿、下降沿、或者双边沿触发。例如选择上升沿触发,使用下面的代码: ```c HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 确保 IO 为低电平 HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); HAL_GPIO_EXTI_Callback(GPIO_PIN_0); // 手动触发一次中断 HAL_NVIC_DisableIRQ(EXTI0_IRQn); // 禁用中断 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 设置 IO 为高电平 HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); ``` 5. 在中断服务函数中处理中断事件。例如: ```c void EXTI0_IRQHandler(void) { if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0) != RESET) { // 处理中断事件 // ... __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0); } } ``` 其中,`HAL_NVIC_SetPriority` 函数用于设置中断优先级,`HAL_NVIC_EnableIRQ` 函数用于使能中断,`HAL_GPIO_WritePin` 函数用于设置 IO 的电平,`HAL_GPIO_EXTI_Callback` 函数用于手动触发一次中断,`__HAL_GPIO_EXTI_GET_IT` 函数用于判断中断是否来自指定 IO ,`__HAL_GPIO_EXTI_CLEAR_IT` 函数用于清除中断标志位。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值