STM32 HAL库手动配置过程

本文介绍了手动配置HAL库的过程,包括新建工程、选择芯片、添加库文件、创建main.c、设置工程组、配置头文件路径、定义宏、启用C99标准,以及修改配置文件等步骤,适用于基于STM32F103xE的开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手动配置HAL库与配置固件库工程类似

1、首先新建四个文件夹

2、打开keil5,新建新工程在Project文件夹中

按开发板选择芯片

3、添加hal相关库到工程目录Libraries下

4、在User下新建main.c

5、在工程配置中新建5个组

6、将对应文件添加到工程中

  • 添加启动文件到STARTUP中

  • 添加system_stm32f1xx.c到CMSIS中

  • 将需要用到的相关外设源文件添加到STM32F1xx_HAL_Driver中

  • 添加main.c到USER中

  • DOC中放用户自己的说明文本readme.txt

7、在工程选项中添加头文件路径

8、在配置选项卡添加宏USE_HAL_DRIVER,STM32F103xE

9、勾选ARM微库和C99

10、将stm32f1xx_hal_conf_template.h头文件复制到USER中,并重命名为stm32f1xx_hal_conf.h

11、添加USER目录到工程头文包含到配置选项卡中

12、构建工程

硬石YS-F1Pro 开发板开发手册(HAL ) STM32 入门系列教程 STM32 Cube 是一个全面的软件平台,包括 ST 产品的每个系列, ( 如 STM32Cube_F1 是针对 STM32F1 系列)。平台包括了 STM32Cube 硬件抽象层(HAL) 和一套中间组件(RTOS,USB,FS,TCP 等等)。 STM32Cube 是由 ST 公司原创倡议,旨在减少开发负担、时间和费用,为开 发者提供轻松的开发体验。 STMCube 覆盖了 STM32 全系列。 其中 STM32CubeMX 是上位机配置软件,可以根据使用者的选择生成底层初始化代码。 硬件抽象层 (HAL), 便是 CubeMX 配套的HAL 屏蔽了复杂的硬件寄存器操作, 统一了 外设的接口函数( 包含 USB/以太网等复杂外设),代码结构强壮, 已通过 CodeSonar 认证。 同时, HAL 还集成了广泛的例程,可以运行在不同意法半导体 的开发板上。 YS-F1Pro 开发板是硬石团队研发的针对 STM32F103 芯片的综合性实验测试 平台,开发板几乎囊括了芯片所有的外设,这对新手入门是非常好的学习平台, 开发板几乎所有芯片采购来着嘉立创平台,芯片质量有保证, 这与同行还是有很 大区别的。 YS-F1Pro 开发板是一款性价比极高的 STM32 开发板, 接口齐全,我们 特意添加了电机控制部分接口,包括舵机、步进电机、有刷电机、无刷电机控制 接口。 本文档的一个最重要目标是让完全小白都可以轻松愉快的入门学习STM32, 最终掌握 STM32 的基本编程方法,学会将 STM32CubeMX 应用到自己 DIY 应用 中去
在Cubemx和Keil IAR集成开发环境中,设计一个支持DMA的两路ADC数据采集程序分为以下几个步骤: 1. **项目创建**: - 在Cubemx中新建一个STM32项目,选择相应的芯片型号和支持的外设配置。 2. **硬件配置**: - 在Pinout视图中,为每一路ADC分配输入引脚,然后配置为ADC模式。 - 如果有内置的DMA资源,配置相应的DMA控制器及其通道,用于数据传输。 3. **软件配置**: - **ADC配置**: - 在Cubemx的HAL Configurator中,添加ADC模块,配置通道、时钟、数据率等参数。 - 为每个通道配置中断,以便在数据准备好时捕获中断。 - **DMA配置**: - 同步添加DMA模块,配置源、目标地址,以及传输的大小和方向。 - 将ADC的数据输出地址映射到内存,为两路ADC配置不同的接收缓冲区。 - **HAL集成**: - 引入`stm32xx_hal_adc.h` 和 `stm32xx_hal_dma.h` 文件,包含必要的函数声明。 - 编写ADC和DMA的初始化函数以及中断处理函数。 4. **数据处理**: - 使用`HAL_ADC_ReadValue`函数读取ADC值,然后在中断处理函数中存储到对应的数组中。 - 更新中断服务函数,处理ADC中断,并在每个通道的采样结束后切换到下一个通道。 5. **主函数中整合**: - 在主循环中,首先初始化ADC和DMA,然后启动ADC的连续转换和DMA的传输。 - 当ADC中断发生时,检查是否来自哪一路ADC,然后更新对应数组的值。 - 在DMA传输完成后,如果已达到预设的样本数或采集时间结束,可以停止ADC。 示例代码片段: ```c void ADC_IRQHandler(void) { if (__HAL_ADC_GET_FLAG(&hadc1, HAL_ADC_FLAG_ADRDY)) { // 检查ADC通道 if (channel == 0) { ADCData[0] = HAL_ADC_GetValue(&hadc1); } else { ADCData[1] = HAL_ADC_GetValue(&hadc1); } channel = (channel + 1) % 2; // 通道轮换 } } void DMAHalfTransferCompletedCallback(DMA_HandleTypeDef *hdma) { HAL_GPIO_ToggleBits(GPIOA, GPIO_PIN_0); // 示例:标志传输完成 if (hdma->Instance == DMA1_Channel2) { // 对应第一路ADC数据的DMA ADC_IRQHandler(); // 触发ADC中断 } else if (hdma->Instance == DMA1_Channel3) { // 对应第二路ADC数据的DMA ADC_IRQHandler(); // 触发ADC中断 } } void SystemClock_Config(void) { // ... ADC_Init(); // ADC初始化 HAL_DMA_Init(DMA_Handle); // DMA初始化 HAL_NVIC_EnableIRQ(ADC_IRQn); // 开启ADC中断 HAL_NVIC_EnableIRQ(DMATx_IRQn); // 开启DMA中断 // ... } int main(void) { // ... ADC_IRQHandler(); // 初始触发一次中断以填充第一个通道的数据 // 启动ADC和DMA HAL_ADC_Start_DMA(&hadc1, ADC_DMA_Buffer, 2 * sizeof(uint16_t)); // ... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹烟淮雨(408考研ing)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值