stm32读取gpio高低电平速度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32读取gpio高低电平速度相关的知识,希望对你有一定的参考价值。
参考技术A STM32读取GPIO高低电平的速度受到许多因素的影响,包括GPIO口的数目、开启的时钟频率、中断设置和外设的负载等。一些实用的技巧可以用来提高GPIO读取速度:1. 确保GPIO口的外设时钟已经开启并且合适速度的外设时钟被选择。
2. 最好使用IVC方式设置GPIO口。使用IVC可以加快GPIO端口的读取速度。芯片的文档,Clock sources for STM32 devices 也可以解释这个问题。
3. 避免使用轮询方式读取GPIO口。中断方式和DMA方式都比轮询方式更快。其中,DMA方式的速度更快,因为它利用DMA通道转移数据,芯片的中断服务程序不需要频繁地去读取GPIO口。
4. 将GPIO口的中断优先级设置较低。因为如果中断优先级过高,当有多个GPIO口发生中断时,系统的优先级切换会变得非常频繁,会降低整体读取速度。
5. 待检查的GPIO口的数量尽可能少。因为每个GPIO口需要单独进行检查,所以如果检查的GPIO口越多,整体速度就会越慢。
通过这些技巧,你可以最大限度地提高STM32读取GPIO高低电平的速度。
STM32学习笔记
STM32笔记
GPIO输出
GPIO(general purpose input output)通用输入输出
引脚电平:0V ~ 3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,控制LED、蜂鸣器、模拟通信协议输出时序等
输入模式下可读取端口的额高低电平活电压,用于按键读取、外界模块电平信号输入、ADC电压猜忌、模拟通信协议接收数据等
单独操作输出数据寄存器的某一位的方法
- &=和|=操作,比较麻烦效率不高
- 操作位设置\\清除寄存器,
- 读写"位带"区域,在stm32中,专门分配的一段地址区域,这段地址区域映射了RAM和外设寄存器的所有的位,操作相应的地址就相当于操作某一位
GPIO8种模式
代码操作
- 使用RCC开启GPIO的时钟
- 使用GPIO_Init函数初始化GPIO
- 使用输入输出函数控制GPIO
RCC常用函数
// 外设使能或失能
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
GPIO常用函数
// GPIO复位
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
void GPIO_AFIODeInit(void);
// GPIO初始化
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
typedef struct
uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIOMode_TypeDef */
GPIO_InitTypeDef;
推挽开漏
推挽输出高低电平均有驱动能力
开漏高电平相当于高阻态,没有驱动能力,低电平有驱动能力
以上是关于stm32读取gpio高低电平速度的主要内容,如果未能解决你的问题,请参考以下文章