移植STM32 HAL库

本文档介绍了如何将STM32Cube_FW_F1_V1.6.0移植到自定义工程中,包括保留中间件和驱动不变以方便升级,删除main.h中不必要的头文件包含,修改main.c中的相关代码,以及设置MDK工程为C99编译和配置仿真与下载参数。

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

0.前言

Template工程模板说明:

User下为可修改的文件

Middlewares,Drivers等后续需要添加目录是 STM32Cube_FW_F1_V1.6.0直接复制过来的无需改动,这样做的好处是版本更新直接替换,更新我们的模板工程。


1.下载 STM32Cube_FW_F1_V1.6.0

1.目录 STM32Cube_FW_F1_V1.6.0\Projects\STM32F103RB-Nucleo 里面有外设模板工程,选一个模板工程打开(建议选GPIO工程) 将模板工程中User下的文件,从外设模板工程中复制过来,如上图所示。
2.添加所需文件如下图

这些文件都是必须添加的。

3.修改源文件

去掉main.h中 #include "stm32f1xx_nucleo.h"的包含,修改main.c中调用 stm32f1xx_nucleo.h的代码部分。

4设置MDK工程设置

-C99编译不然HAL库编译不过

### 移植STM32 HAL到GD32微控制器的关键步骤 将STM32 HAL移植到GD32系列微控制器是一个复杂的过程,因为虽然两者都基于ARM Cortex-M内核并具有一定的硬件兼容性,但在寄存器定义、外设配置以及部分功能实现上仍存在细微差异。以下是详细的说明: #### 1. GPIO引脚定义和映射 由于GD32STM32之间的GPIO引脚定义可能存在不一致的情况,因此需要重新检查所有的GPIO初始化代码,并根据目标芯片的数据手册调整相应的引脚设置[^1]。 #### 2. 寄存器地址空间的适配 GD32STM32之间某些外设的基址可能有所不同,这会影响HAL中的低层驱动逻辑。建议对比两者的参考手册,更新`stm32f1xx_hal_conf.h`件中涉及的具体外设基址声明。例如,在GD32中,USART外设的寄存器布局可能稍有变化,需手动校正这些偏移量[^2]。 #### 3. 中断向量表的重定向 中断处理机制也是需要注意的一环。GD32采用了一套独立于STM32的中断编号体系,这意味着原有的ISR函数名及其对应的IRQn_Type枚举值都需要被替换为适合GD32的形式。可以参照官方提供的SDK档来完成这一转换过程[^1]。 #### 4. 使用HAL时的功能验证 为了确保移植后的HAL能够正常工作,应该针对主要模块逐一测试其基本功能是否满足预期效果。比如串口通信、定时器操作等常用接口都要经过充分调试才能投入实际应用环境当中去。 下面给出一段简单的代码示例用于展示如何修改原有STM32项目的启动件以适应新的平台需求: ```c // 修改SystemInit()函数内的系统时钟配置参数 void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the CPU, AHB and APB buses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; // 假定外部晶振可用 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } ``` 以上片段展示了当切换至GD32后可能需要调整的部分——即PLL倍频系数以及其他与时序相关的设定项。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值