推挽:单片机内部与VCC连接,输出高电平【高电平输出能力有限】
开漏:单片机内部与GND连接,输出低电平0v【控制外设,推荐用开漏】
复用:相当于其他设备的引脚并联在io脚上。
GPIO_InitTypeDef GPIO_InitStruct;
参数:Pin Mode Pull Speed Alternate(复用)
GPIO_PIN_0 GPIO_PIN_15 GPIO_PIN_All GPIO_PIN_MASK GPIO_MODE_INPUT 输入
GPIO_MODE_OUTPUT_PP 推挽
GPIO_MODE_OUTPUT_OD 开漏
GPIO_MODE_AF_PP 复用推挽
GPIO_MODE_AF_OD 复用开漏
GPIO_MODE_ANALOG 模拟
GPIO_MODE_IT_RISING 中断上升沿
GPIO_MODE_IT_FALLING 中断下降沿
GPIO_MODE_IT_RISING_FALLING 中断沿
GPIO_MODE_EVT_RISING 事件上升沿
GPIO_MODE_EVT_FALLING 事件下降沿
GPIO_MODE_EVT_RISING_FALLING 事件沿
GPIO_NOPULL 无电阻
GPIO_PULLUP 上拉电阻
GPIO_PULLDOWN 下拉电阻
GPIO_SPEED_FREQ_LOW 低速 2MHz
GPIO_SPEED_FREQ_MEDIUM 中速 50MHz
GPIO_SPEED_FREQ_HIGH 高速 100MHz
GPIO_SPEED_FREQ_VERY_HIGH 很高 200MHz
#include "stm32f4xx_hal_gpio_ex.h"//复用引脚
GPIO_AF0_RTC_50Hz
GPIO_AF0_MCO
GPIO_AF0_TAMPER
GPIO_AF0_SWJ
GPIO_AF0_TRACE
GPIO_AF1_TIM1
GPIO_AF1_TIM2
GPIO_AF2_TIM3
GPIO_AF2_TIM4
GPIO_AF2_TIM5
GPIO_AF15_EVENTOUT
设置:GPIO_PIN_RESET GPIO_PIN_SET
__HAL_RCC_GPIOx_CLK_ENABLE().
HAL_GPIO_Init 引脚初始化
//初始化我们需要用到的引脚的工作模式,包括具体引脚的工作速度、是否复用模式、上下拉等等参数。
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
HAL_GPIO_DeInit 复位引脚
//将初始化之后的引脚恢复成默认的状态–各个寄存器复位时的值
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
例:HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
HAL_GPIO_ReadPin 读引脚电平
//读取我们想要知道的引脚的电平状态、函数返回值为0或1。
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
例:pin_State = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9);
HAL_GPIO_WritePin 输出
//给某个引脚写0或1,但是不要理解成,写1就是使能之类的意思,有些寄存器写1是擦除的意思
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
例:HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9,GPIO_PIN_RESET)
HAL_GPIO_TogglePin 翻转电平
//翻转某个引脚的电平状态
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
例:HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9);
HAL_GPIO_LockPin 锁定输入值
//如果一个管脚的当前状态是1,读管脚值使用锁定,当这个管脚电平变化时保持锁定时的值,直到重置才改变
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
例:
HAL_StatusTypeDef hal_State;
hal_State = HAL_GPIO_LockPin(GPIOF, GPIO_PIN_9);
HAL_GPIO_EXTI_IRQHandler 中断处理
//这个函数是外部中断服务函数,用来响应外部中断的触发,函数实体里面有两个功能,1是清除中断标记位,2是调用下面要介绍的回调函数。实际调用的是下边的中断回调函数
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
例:HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
HAL_GPIO_EXTI_Callback 行检测回调
//中断回调函数,可以理解为中断函数具体要响应的动作。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
例:HAL_GPIO_EXTI_Callback(GPIO_Pin);
///
// HAL_RCC_GetHCLKFreq()/1000 //1ms中断
// HAL_RCC_GetHCLKFreq()/100000 //10us中断
// HAL_RCC_GetHCLKFreq()/1000000 // 1us中断
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); // 滴答定时器
/* ϵͳµÎ´ð¶¨Ê±Æ÷ʱÖÓÔ´ */
//时钟源
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* ϵͳµÎ´ð¶¨Ê±Æ÷ÖжÏÓÅÏȼ¶ÅäÖà */
//中断优先级
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);