STM32的常用HAL库函数

*秋招自己老早就明白双非根本没机会算法岗,已经转AI模型部署了还是gg,没办法再换个行业吧,舍友和同门抬着我找嵌入式软开工作,自己也不能太拉了,不能辜负他们的好意,就陆续把自己记录一些STM32的知识设置为公开,大家共勉。

一、配置的相关函数
1、初始化函数

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
	顾名思义,即初始化一个或者多个IO口的工作方式和速度0,是否复用模式、上下拉等情况
	//参数说明 GPIOx:GPIOA~GPIOG            
typedef struct 
{
	uint16_t GPIO_Pin;            //指定要初始化的IO口
	GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度,可以选择2M 10M  50M
	GPIOMode_TypeDef GPIO_Mode;   //设置工作模式:8种中的一个
}GPIO_InitTypeDef;

初始化函数示例,这里以GPIO0口,推挽输出模式,50Mhz为例

GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量 
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //选择你要设置的IO口 
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置推挽输出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //设置传输速率 
GPIO_Init(GPIOC,&GPIO_InitStructure);/* 初始化GPIO */

其中GPIO口的8种工作模式,4种输入模式分别为:模拟输入、浮空输入、输入上拉、输出下拉,4种输出模式为:开漏输出、推挽输出、开漏复用输出、推挽复用输出。

//定义8种模式
typedef enum
{ GPIO_Mode_AIN = 0x0,          //模拟输入
  GPIO_Mode_IN_FLOATING = 0x04, //浮空输入
  GPIO_Mode_IPD = 0x28,         //输入下拉
  GPIO_Mode_IPU = 0x48,         //输入上拉
  GPIO_Mode_Out_OD = 0x14,      //开漏输出
  GPIO_Mode_Out_PP = 0x10,      //推挽式输出
  GPIO_Mode_AF_OD = 0x1C,       //开漏复用输出
  GPIO_Mode_AF_PP = 0x18        //推挽式复用输出
}GPIOMode_TypeDef;

#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \
                            ((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \
                            ((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \
                            ((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))

二、设置管脚输出电平函数
1、设置某个IO口为高电平

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

示例,将E组12管脚设置输出高电压

GPIO_SetBits(GPIOE, GPIO_Pin_12);

2、设置某个IO口为低电平

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

3、两个不常用的的设置IO口输出电平

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

三、读取管脚输入输出电平函数
1、读取端口中的某个管脚输入电平

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

示例:读取GPIOB.1的输入电平

GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1);

2、读取某组端口的输入电平

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

示例:读取GPIOB组的输入电平

GPIO_ReadInputData(GPIOB);

3、读取端口中的某个管脚输出电平

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

示例:读取GPIOB.1的输出电平

GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_1);

4、读取某组端口的输出电平

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

示例:读取GPIOB组的输出电平

GPIO_ReadOutputData(GPIOB);

四、反转函数
翻转 IO 口输出电平

void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

例如翻转GPIOB.1的输出电平

HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);

五、外部中断服务函数
外部中断服务函数,有两个功能,一、清除中断标志位,二、2是调用回调函数。在HAL库中,中断运行结束后不会立刻退出,而是会先进入相对应的中断回调函数,处理该函数中的代码之后,才会退出中断,所以在HAL库中我们一般将中断需要处理代码放在中断回调函数中,

HAL_GPIO_EXTI_IRQHandler();

例如:

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);

六、中断回调函数
中断函数具体要响应的动作

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值