如何使用hal例程

有错欢迎指正!

一、常识

1、CMSIS:

ARM® Cortex™ 微控制器软件接口标准 (CMSIS) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。CMSIS 可实现与处理器和外设之间的一致且简单的软件接口,从而简化软件的重用,缩短微控制器开发人员新手的学习过程,并缩短新设备的上市时间。

2、BSP:

即板级支持包。通常BSP包是由开发板的公司提供的,它一般包含有一个底层的bootloader,如Das U-Boot,里面实现了少量的设备驱动,如串口,网络等等,用以在加载kernel时用到。它还包括给kernel用的所有的板上设备的驱动程序。有一些供应商BSP甚至还提供了root file system、一个完整的tool chain,用以开发程序、用于系统在运行时的系统配置程序

二、如何熟悉示例工程:

1、肯定要看看文件readme.text。

2、先研究下例程ADC_ContinousConversion_DMA的.c文件的注释

1)common (adj.共有的)
startup py32f00xx.s:进行一些设置和初始化, 再分支到C库中的main, 最终调用main0
system_py32f0xx.c:宏定义外部振荡器的频率值,时钟变量定义,时钟功能配置,初始化微控制器系统,重新定义主函数。

2)Application/User
main.c:主函数。
py32f0xx_hal_msp.c:在此文件编写MCU相关的初始化函数。MSP是指和MCU相关的初始化。
py32f0xx_it.c:中断服务例程,在此添加所用外设的中断处理程序。

3)BSP/py32f003xx_Start_Kit
py32f003xx_Start_Kit.C:包含LED、按钮的GPIO配置,开关操作,状态查询函数,uart串口调试初始化函数。

4)Drivers/PY32F0xx_HAL_Driver
即:驱动程序/普冉公司-32位MCU-普通型(内含003家族)_Hardware Abstraction Layer(抽象印象层)驱动程序。
py32f0xx_hal.c:普冉公司-32位MCU-普通型中各种芯片的可共用HAL API
py32f0xx_hal_rcc.c: 时钟HAL驱动程序。
py32f0xx_hal_rcc_ex.c:扩展时钟HAL驱动程序。
其他类似py32f0xx_hal
??.c的文件都是模/数转换器、比较器、高级控制定时器、实时时钟等模块的HAL驱动程序。

3、先研究下例程ADC_ContinousConversion_DMA的.h文件的注释

我们就不关注之前研究的.c文件所对应的.h文件了,把重点划到其他.h文件上。
cmsis_armcc.h:CMSIS Cortex-M核心函数/指令头文件。
- CMSIS核心寄存器访问函数;
- CMSIS核心指令接口访问专用指令;
- CMSIS SIMD本质访问专用SIMD指令。

core_cm0plus.h:CMSIS Cortex-M0+核心外围访问层头文件。
- CMSIS全局定义;
- CMSIS核心寄存器定义和核心寄存器类型定义;( 核心寄存器包含:核心寄存器;核心NVIC寄存器,核心SCB寄存器,核心SysTick寄存器,核心MPU寄存器。)
- CMSIS核心调试寄存器定义;
- CMSIS核心寄存器位字段宏;
- CMSIS核心基地址定义;
- CMSIS核心NVIC、核心SysTick、核心寄存器访问功能函数。

core_cmFunc.h:CMSIS Cortex-M核心功能访问头文件。
- CMSIS核心寄存器访问函数。(注意:CMSIS函数已在编译器中作为内部函数实现)

core_cmlnstr.h:CMSIS Cortex-M核心指令访问头文件。
- CMSIS核心指令接口访问专用指令。(注意:CMSIS函数已在编译器中作为内部函数实现)

py32f003x8.h:CMSIS Cortex-M0+设备外围访问层头文件。此文件包含PY32F0xx设备的所有外围寄存器定义、位定义和内存映射。
- 外部中断号宏定义;
- CRC、DMA、FLASH等外围设备的结构体定义;

py32f0xx.h:CMSIS PY32F0xx设备外围访问层头文件。

stdint.h:stdint.h是 C99 中引进的一个标准C 库的头文件。

stdio.h:是C语言的标准输入输出函数的头文件。

py32f0xx_ hal_ def. h:包含HAL通用数据类型定义和宏定义

py32f0xx_ hal_conf. h:选择使用hal驱动,就去去掉对应宏的注释

三、移植

知道文件的用途后,我们就知道大概要改和编写些什么了。
就可以使用模板工程,从例程ADC_ContinousConversion_DMA移植所需要的模块。

当然移植需要了解芯片了解例程,如下文件有不同的侧重点,除此之外还有很多芯片公司给出的注意事项:
《PY32F003 datasheet 105℃ Rev.1.0》
《PY32F003 datasheet Rev.1.8》
《PY32F003 Reference manual v1.1》
《PY32F003_HAL样例说明》
实际上,开发包里面的所有文件都要仔细看一边,有的文件甚至要反复熟悉。

四、经验方法

1)特定寄存器的英文缩写

如何看懂手册中平凡出现的关于一些特定寄存器的英文缩写。在目录中找到寄存器描述一项:
在这里插入图片描述
整理一下出现的英文缩写和它对应的含义:
巧了就是寄存器描述一级目录的下一级目录:
16.4.1.TIM1控制寄存器1(TIM1_CR1)
16.4.2.TIM1控制寄存器2(TIM1_CR2)
16.4.3.TIM1从模式控制寄存器(TIM1_SMCR)
16.4.4.TIM1 DMA/中断使能寄存器(TIM1_DIER)
16.4.5.TIM1状态寄存器(TIM1_SR)
16.4.6.TIM1事件产生寄存器(TIM1_EGR)
16.4.7.TIM1捕获/比较模式寄存器1(TIM1_CCMR1)
16.4.8.TIM1捕获/比较模式寄存器
16.4.9.TIM1捕获/比较使能寄存器(TIM1_CCER)
16.4.10.TIM1计算器(TIM1_CNT)
16.4.11.TIM1预分频器(TIM1_PSC)
16.4.12.TIM1自动重新加载寄存器(TIM1_ARR)
16.4.13.TIM1重复计数器寄存器(TIM1_RCR)
16.4.14.TIM1捕获/比较寄存器1(TIM1_CCR1)
16.4.15.TIM1捕捉/比较寄存器2(TIM1_CCR2)
16.4.16.TIM1捕获/比较寄存器3(TIM1_CCR3)
16.4.17.TIM1捕捉/比较寄存器4(TIM1_CCR4)
16.4.18.TIM1刹车和死区寄存器(TIM1_BDTR)
16.4.19.TIM1 DMA控制寄存器(TIM1_DCR)
16.4.20.TIM1连续模式的DMA地址(TIM1_DMAR)
16.4.21.TIM1寄存器映像

2)没有很好移植的例程

可以找到对应的.h文件,在此文件的最下面有.c文件定义好的所以函数的声明。可以知道有些什么可以调用的函数。去对应的.c文件看看每个函数的用法,函数声明一般是一类一类的,只用差用得到的那些类函数,有时候一类里官方还给分了组,总之最后需要查询的函数没有几个,前提是你找到时候一定要有一个准确的目标,这就需要熟悉数据手册。
另外,注意宏定义函数也是有用的,不要忽略了这类函数,不然可能你找不到合适的函数调用。
只要对数据手册熟悉,再将一个功能最为相近的例程的几个常修改的文件看懂,就肯定会移植了。

一般找不到合适的例程移植,是因为例程包含了你想要的功能,你要去拆解。例如删除或添加某个功能。

3)中断

在这里插入图片描述

  • 首先进入中断函数 void TIM3_IRQHandler(void)
  • 之后进入定时器中断处理函数HAL_TIM_IRQHandler(&htim2);
    定时器中断处理函数:
    我们只设置句柄里面的各个参数,然后就等着HAL库把它安排好的代码送到我们手中。
    可以根据各种XX_HandleTypeDef结构体的成员,猜测HAL库会帮我们准备些什么代码。
  • void HAL_TIM_PeriodElapsedCallback(&htim2); 进入相对应中断回调函数

更多内容点链接

4)普然的py32f030的手册中的option

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
手册告诉我们只能读,怎么办?用ISP

5)涉及到编写驱动

尽量先看懂至少一个任意芯片的成功的案例,在根据自己使用的主控芯片进行移植,这样会跳过许多坑。知道的方法越多,选择其中最合适的,也会提高代码的质量。

6)工程架构上的错

出现在例程里编写的驱动可以使用,在自己创建的工程里同样的代码不行,就直接用例程的工程,放弃自己的工程。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32L151是STMicroelectronics推出的一款32位ARM Cortex-M3微控制器,专门为低功耗和高性能应用而设计。HAL库(Hardware Abstraction Layer)是STMicroelectronics为STM32系列微控制器提供的一个软件层,用于简化硬件底层操作的开发过程。 STM32L151 HAL例程是一些示例代码,演示了如何使用HAL库来实现一些常见的功能。这些例程可以帮助开发人员更容易地理解和使用HAL库,加快应用程序的开发速度。 例如,一个常见的例程是GPIO(通用输入输出)的例程。通过HAL库,我们可以简化配置和控制GPIO引脚的过程。可以通过设置引脚的模式(输入或输出)、速度(低、中等或高速)、上拉电阻(开启或关闭)等来配置GPIO引脚。我们可以使用类似的函数来读取或写入GPIO引脚的状态。 另一个例程是定时器的例程HAL库提供了一套函数,用于配置和控制STM32L151的内置定时器。我们可以通过设置定时器的时钟源、预分频器、计数器时钟周期、计数模式和中断等来实现定时器的功能。 除了GPIO和定时器,HAL库还提供了其他功能模块的例程,如串口通信、SPI通信、I2C通信、ADC转换等。这些例程可以帮助开发人员更方便地实现这些功能并加速开发过程。 总之,STM32L151 HAL例程是一些使用HAL库实现常见功能的示例代码。通过阅读和学习这些例程开发人员可以更好地理解STM32L151的底层硬件操作,并在自己的应用程序中更高效地使用HAL库。 ### 回答2: STM32L151 HAL是针对STM32L151微控制器系列的HAL库,用于简化开发过程和提供底层硬件抽象层函数。HAL库是STM32Cube软件包的一部分,可以在官方网站上获得。 STM32L系列微控制器是低功耗和低电压操作的MCU,适用于电池供电设备、无线传感器网络、医疗设备等应用。HAL库则提供了一系列函数,用于配置和控制STM32L151的外设,如GPIO、UART、SPI、I2C、定时器等。 使用STM32L151 HAL库编写代码可以大大简化开发过程。首先需要在工程中包含对应的HAL库头文件。然后可以使用HAL库提供的函数来初始化和配置外设。例如,可以使用"HAL_GPIO_Init()"函数来配置GPIO管脚的工作模式、输入输出类型、上下拉电阻等。对于其他外设,也有类似的初始化和配置函数。 在外设配置完成后,可以使用HAL库提供的函数来控制和操作外设。例如,可以使用"HAL_UART_Transmit()"函数发送数据到UART外设,使用"HAL_I2C_Master_Transmit()"函数在I2C总线上发送数据等。对于其他外设的操作也是类似的。 除了外设初始化和操作函数,HAL库还提供了中断处理函数和回调函数,用于处理外设产生的中断和事件。可以根据具体外设的要求,在应用代码中编写相应的中断处理函数,并在HAL库中注册对应的回调函数。这样,当外设产生中断时,HAL库会自动调用相应的中断处理函数。 总之,STM32L151 HAL例程提供了一种简化和快速入门的开发方式。使用HAL库开发者可以方便地配置和控制STM32L151的外设,从而快速开发出符合需求的应用程序。 ### 回答3: STM32L151是意法半导体(STMicroelectronics)推出的一款低功耗微控制器,采用Cortex-M3内核,具有丰富的外设和功能。HAL库(Hardware Abstraction Layer)是STMicroelectronics提供的一种软件库,用于简化STM32系列微控制器的编程和驱动开发使用STM32L151 HAL例程可以快速开始开发STM32L151微控制器的项目。HAL例程提供了一系列示例代码和应用程序,帮助开发者理解和使用HAL库中的函数和功能。通过研究和修改这些例程代码,开发者可以实现各种功能,如GPIO控制、定时器使用、中断编程、UART通信等。 例如,在HAL例程中,可以找到GPIO控制的示例代码。通过这些代码,可以了解如何初始化和配置GPIO引脚,并实现输入/输出控制。可以学习如何读取输入引脚的状态,以及如何设置输出引脚的状态。通过修改这些代码,可以根据具体需求控制不同的GPIO引脚。 另外,HAL例程还提供了其他外设的使用示例,如定时器、中断和UART等。这些示例代码可以帮助开发者学习如何配置和使用这些外设,实现各种功能和应用,如定时器计数、中断处理、串口通信等。 总结来说,STM32L151 HAL例程是一种快速入门STM32L151微控制器编程的方法。通过研究和修改这些例程,可以快速理解和掌握HAL库中的函数和功能,实现各种外设的驱动和应用。这对于初学者和需要快速开发STM32L151项目的开发者来说是非常有用的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值