一、常用的GPIO相关HAL库函数
1、GPIO的初始化
void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init );
2、配置GPIO引脚输出电平
void HAL_GPIO_WritePin( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState);
3、切换指定引脚的电平,电平的翻转
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
4、读取指定GPIO引脚的电平
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
5、结构体 GPIO_InitTypeDef (引脚)定义:
typedef struct
{
uint32_t Pin ;//指定要配置的GPIO引脚
uint32_t Mode ;//选择所选引脚的工作模式
uint32_t Pull ;//指定所选引脚的上拉或下拉激活
uint32_t Speed ;//指定所选引脚的速度
} GPIO_InitTypeDef ;//把结构体命名为 GPIO_InitTypeDef
6、高低电平的表示
typedef enum
{
GPIO_PIN_RESET = 0u,//低电平
GPIO_PIN_SET//高电平
} GPIO_PinState;
7、延时函数(提供了最小延时ms级别)
__weak void HAL_Delay(uint32_t Delay)
注意:在中断服务函数里调用HAL_Delay函数,如果直接调用就会造成系统卡死。
原因:程序在执行的时候默认把滴答定时器的中断优先级设置为最低,其他中断源很容易把他打断导致卡死
解决:在main函数里使用以下函数提高滴答定时器的中断优先级(提升至0)
HAL_NVIC_SetPriority ( SysTick_IRQn , 0 , 0 );//设置中断的优先级
二、EXTI模式的中断
定义:
EXTI 可分为两大部分功能,一个是产生中断,另一个是产生事件,这两个功能从硬件上就有所不同。
产生中断线路目的是把输入信号输入到 NVIC(中断控制器,处理中断的),进一步会运行中断服务函数,实现功能,这样是软件级的。而 产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号传输,属于硬件级的。
中断触发类型:
typedef enum
{
EXTI_Trigger_Rising = 0x08 , // 上升沿
EXTI_Trigger_Falling = 0x0C , // 下降沿
EXTI_Trigger_Rising_Falling = 0x10 // 上升沿和下降沿都触发
} EXTITrigger_TypeDef ;
1、中断产生回调函数
(简而言之就是发生中断就会调用这个函数,需要我们重写)
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
传递过来的是发生中断的GPIO口
三、定时器Timer
STM32之定时器
PSC:预分频器的值
ARR:自动重装载值
Tclk:时钟频率
Tout:设定的时间
1Mhz=