HAL(Hardware Abstraction Layer,硬件抽象层)库是STM32等微控制器中常用的库,它为开发者提供了访问和控制硬件设备的接口。以下是一些常用的HAL库函数及其调用示例:
一、GPIO(通用输入输出)相关函数
- GPIO初始化
c复制代码GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.Pin = GPIO_PIN_4; // 指定要配置的GPIO引脚GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 选择所选引脚的工作模式,这里为推挽输出GPIO_InitStruct.Pull = GPIO_NOPULL; // 指定所选引脚的上拉或下拉激活,这里为无上下拉GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 指定所选引脚的速度,这里为低速HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); // 初始化GPIOC的第4引脚
- 读取引脚电平状态
c复制代码GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4); // 读取GPIOC的第4引脚电平状态
- 配置引脚输出电平
c复制代码HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET); // 将GPIOC的第4引脚电平设置为高HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_RESET); // 将GPIOC的第4引脚电平设置为低
- 翻转引脚电平状态
c复制代码HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4); // 翻转GPIOC的第4引脚电平状态
- 外部中断服务函数及回调
c复制代码// 在中断服务函数中调用void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_4) { // 处理GPIOC的第4引脚外部中断 } // 调用回调函数 HAL_GPIO_EXTI_Callback(GPIO_Pin);}// 自定义的中断回调函数void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_4) { // 在这里添加中断处理代码 }}
二、UART(通用异步收发传输器)相关函数
- UART初始化
c复制代码UART_HandleTypeDef huart1;huart1.Instance = USART1; // 指定USART实例huart1.Init.BaudRate = 9600; // 波特率huart1.Init.WordLength = UART_WORDLENGTH_8B; // 字长huart1.Init.StopBits = UART_STOPBITS_1; // 停止位huart1.Init.Parity = UART_PARITY_NONE; // 校验位huart1.Init.Mode = UART_MODE_TX_RX; // 模式:发送和接收huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 硬件流控制huart1.Init.OverSampling = UART_OVERSAMPLING_16; // 过采样HAL_UART_Init(&huart1); // 初始化UART
- 发送数据
c复制代码uint8_t dataToSend[] = "Hello, UART!";HAL_UART_Transmit(&huart1, dataToSend, sizeof(dataToSend) - 1, HAL_MAX_DELAY); // 发送数据
- 中断方式接收数据
c复制代码uint8_t receivedData;HAL_UART_Receive_IT(&huart1, &receivedData, 1); // 以中断方式接收一个字节数据
- UART中断处理及回调
c复制代码// 在中断处理函数中调用void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) { if (huart- >Instance == USART1) { // 处理USART1的中断 HAL_UART_IRQHandler(huart); // 调用HAL库的中断处理函数 }}// 自定义的接收中断回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart- >Instance == USART1) { // 在这里添加接收中断处理代码 }}
三、定时器(Timer)相关函数
- 定时器初始化
c复制代码TIM_HandleTypeDef htim2;htim2.Instance = TIM2; // 指定定时器实例htim2.Init.Prescaler = 8399; // 预分频器值htim2.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数器模式:向上计数htim2.Init.Period = 9999; // 自动重装载值htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; // 时钟分频htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; // 自动重装载预装载使能HAL_TIM_Base_Init(&htim2); // 初始化定时器
- 在中断模式下启动定时器
c复制代码HAL_TIM_Base_Start_IT(&htim2); // 在中断模式下启动定时器
- 定时器中断回调函数
c复制代码// 自定义的定时器中断回调函数void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim- >Instance == TIM2) { // 在这里添加定时器中断处理代码 }}
以上是HAL库中GPIO、UART和定时器相关函数的一些调用示例。在实际开发中,可能还需要根据具体需求进行更多的配置和调用。同时,请注意在使用HAL库函数时,需要确保已经正确配置了微控制器的时钟、引脚等外设资源。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
微控制器
+关注
关注
48文章
7503浏览量
151132 -
硬件
+关注
关注
11文章
3273浏览量
66144 -
函数
+关注
关注
3文章
4314浏览量
62477 -
HAL库
+关注
关注
1文章
121浏览量
6189
发布评论请先 登录
相关推荐
STM32G HAL库中HAL_init()代码中,为什么SysTick_Config函数不调用?
STM32G HAL库中HAL_init()代码中,为什么SysTick_Config函数不调用?
发表于 03-12 07:46
HAL库主函数调用flash .c 中的HAL_FLASH_Program_HalfWord函数编译出错
HAL库主函数 调用flash .c 中的HAL_FLASH_Program_HalfWord函数
发表于 09-06 18:51
HAL库SPI DMA循环调用问题
使用HAL库的SPI DMA方式读取一个器件的数据,然后在回调函数中开启下一个器件的SPI DMA方式来读取数据,依此方式依次读取几个器件,比如器件1、2、3。。。。。。,用SPI DMA函数
发表于 12-17 08:58
STM32标准库改为HAL库的程序实现
标准库占绝大多数,自己买的板子跟的资料也一般是标准库,HAL库很少,不过要是使用STM32CubeMx配置,那么就是使用的HAL
发表于 11-22 11:23
•3.5w次阅读
如何在函数库中调用指令?
函数是一段可复用的代码。我们通常把重复的代码放进函数中并且在不同的地方去调用它。库是函数的集合。我们可以在库中定义经常使用的
HAL库中断处理以及相关的回调函数
驱动的开发时间,把重心放在应用代码上。 但是,STM32CubeMX只是生成了底层驱动的初始化代码。所以,我们还需要掌握:应用层代码如何调用HAL库函数(API接口),以及HAL
【STM32】标准库与HAL库对照学习教程三--使用库函数配置GPIO点亮LED灯
【STM32】标准库与HAL库对照学习教程三--使用库函数配置GPIO点亮LED灯一、前言二、准备工作三、LED硬件电路四、使用标准库工程点
发表于 12-05 14:06
•15次下载
STM32 HAL库与标准库的区别_浅谈句柄、MSP函数、Callback函数
最近笔者开始学习STM32的HAL库,由于以前一直用标准库进行开发,于是发现了HAL库几点好玩的地方,在此分享。1.句柄在STM32的标准
发表于 12-16 16:57
•30次下载
STM32 HAL 库延时函数 HAL_Delay 解析
HAL 库有提供延时函数,只不过它只能实现简单的毫秒级别延时,没有实现 us 级别延时。下面我们列出HAL 库实现延时相关的
发表于 01-17 09:48
•8次下载
HAL库无法实现UART的DMA传输真是这样吗?
使用STM32CubeMx进行图形化配置,并生成基于HAL库的初始代码,要实现UART收发功能的DMA传输的话,除了安排好的收发缓冲内存外,再就只需调用下面两个HAL
HAL库常用函数汇总
1,系统函数HAL_Delay原型:voidHAL_Delay(uint32_tDelay);作用:利用滴答定时器生成的系统延迟函数参数:Delay:延迟时间,单位是ms返回值:无示例
如何快速入门HAL库编程 HAL库与裸机编程的比较
如何快速入门HAL库编程 要快速入门HAL库编程,可以遵循以下步骤: 了解基础知识 : 掌握C语言编程基础,包括变量、数据类型、函数、指针等
评论