0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HAL库的函数调用示例

科技绿洲 来源:网络整理 作者:网络整理 2024-12-02 14:01 次阅读

HAL(Hardware Abstraction Layer,硬件抽象层)库是STM32微控制器中常用的库,它为开发者提供了访问和控制硬件设备的接口。以下是一些常用的HAL库函数及其调用示例:

一、GPIO(通用输入输出)相关函数

  1. 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引脚
  1. 读取引脚电平状态
c复制代码GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4); // 读取GPIOC的第4引脚电平状态
  1. 配置引脚输出电平
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引脚电平设置为低
  1. 翻转引脚电平状态
c复制代码HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4); // 翻转GPIOC的第4引脚电平状态
  1. 外部中断服务函数及回调
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(通用异步收发传输器)相关函数

  1. 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
  1. 发送数据
c复制代码uint8_t dataToSend[] = "Hello, UART!";HAL_UART_Transmit(&huart1, dataToSend, sizeof(dataToSend) - 1, HAL_MAX_DELAY); // 发送数据
  1. 中断方式接收数据
c复制代码uint8_t receivedData;HAL_UART_Receive_IT(&huart1, &receivedData, 1); // 以中断方式接收一个字节数据
  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)相关函数

  1. 定时器初始化
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); // 初始化定时器
  1. 在中断模式下启动定时器
c复制代码HAL_TIM_Base_Start_IT(&htim2); // 在中断模式下启动定时器
  1. 定时器中断回调函数
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 HALHAL_init()代码中,为什么SysTick_Config函数调用

    STM32G HALHAL_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

    HALSPI DMA循环调用问题

    使用HAL的SPI DMA方式读取一个器件的数据,然后在回调函数中开启下一个器件的SPI DMA方式来读取数据,依此方式依次读取几个器件,比如器件1、2、3。。。。。。,用SPI DMA函数
    发表于 12-17 08:58

    HAL实现延时相关的函数

    HAL 有提供延时函数,只不过它只能实现简单的毫秒级别延时,没有实现 us 级别延时。下面我们列出HAL 实现延时相关的
    发表于 08-24 07:45

    STM32标准改为HAL的程序实现

    标准占绝大多数,自己买的板子跟的资料也一般是标准HAL很少,不过要是使用STM32CubeMx配置,那么就是使用的HAL
    发表于 11-22 11:23 3.5w次阅读

    如何在函数库调用指令?

    函数是一段可复用的代码。我们通常把重复的代码放进函数中并且在不同的地方去调用它。函数的集合。我们可以在库中定义经常使用的
    的头像 发表于 08-31 15:51 3788次阅读

    HAL中断处理以及相关的回调函数

    驱动的开发时间,把重心放在应用代码上。   但是,STM32CubeMX只是生成了底层驱动的初始化代码。所以,我们还需要掌握:应用层代码如何调用HAL函数(API接口),以及HAL
    的头像 发表于 01-07 11:46 9399次阅读
    <b class='flag-5'>HAL</b><b class='flag-5'>库</b>中断处理以及相关的回调<b class='flag-5'>函数</b>

    【STM32】标准HAL对照学习教程三--使用库函数配置GPIO点亮LED灯

    【STM32】标准HAL对照学习教程三--使用库函数配置GPIO点亮LED灯一、前言二、准备工作三、LED硬件电路四、使用标准工程点
    发表于 12-05 14:06 15次下载
    【STM32】标准<b class='flag-5'>库</b>与<b class='flag-5'>HAL</b><b class='flag-5'>库</b>对照学习教程三--使用库<b class='flag-5'>函数</b>配置GPIO点亮LED灯

    STM32 HAL与标准的区别_浅谈句柄、MSP函数、Callback函数

    最近笔者开始学习STM32的HAL,由于以前一直用标准进行开发,于是发现了HAL几点好玩的地方,在此分享。1.句柄在STM32的标准
    发表于 12-16 16:57 30次下载
    STM32 <b class='flag-5'>HAL</b><b class='flag-5'>库</b>与标准<b class='flag-5'>库</b>的区别_浅谈句柄、MSP<b class='flag-5'>函数</b>、Callback<b class='flag-5'>函数</b>

    STM32 HAL 延时函数 HAL_Delay 解析

    HAL 有提供延时函数,只不过它只能实现简单的毫秒级别延时,没有实现 us 级别延时。下面我们列出HAL 实现延时相关的
    发表于 01-17 09:48 8次下载
    STM32 <b class='flag-5'>HAL</b> <b class='flag-5'>库</b>延时<b class='flag-5'>函数</b> <b class='flag-5'>HAL</b>_Delay 解析

    HAL中用定时器实现自定义延时函数delay_us()

    STM32程序从标准移植到HAL的时候,会发现HAL中只有一个毫秒级延时函数
    的头像 发表于 09-21 10:33 1.1w次阅读

    HAL无法实现UART的DMA传输真是这样吗?

    使用STM32CubeMx进行图形化配置,并生成基于HAL的初始代码,要实现UART收发功能的DMA传输的话,除了安排好的收发缓冲内存外,再就只需调用下面两个HAL
    的头像 发表于 01-08 11:16 2670次阅读

    SCL中调用函数示例

    在此,可插入函数 (FC) 调用函数块 (FB) 调用函数块可作为单实例、多重实例或参数实例进行调用
    的头像 发表于 06-06 10:18 2106次阅读

    HAL常用函数汇总

    1,系统函数HAL_Delay原型:voidHAL_Delay(uint32_tDelay);作用:利用滴答定时器生成的系统延迟函数参数:Delay:延迟时间,单位是ms返回值:无示例
    的头像 发表于 11-29 08:00 3206次阅读
    <b class='flag-5'>HAL</b><b class='flag-5'>库</b>常用<b class='flag-5'>函数</b>汇总

    如何快速入门HAL编程 HAL与裸机编程的比较

    如何快速入门HAL编程 要快速入门HAL编程,可以遵循以下步骤: 了解基础知识 : 掌握C语言编程基础,包括变量、数据类型、函数、指针等
    的头像 发表于 12-02 11:39 109次阅读