• stm32之手动创建keil工程--HAL库


            用CubeMx创建了好多stm32的工程,这里记录下手动创建keil工程的过程。完整工程在最后。

    一、准备工作

    1.1、下载对应的HAL库,

    这里使用的是stm32f103c8t6, 下载地址stm32HAL库

    在页面中输入对应型号点击进行二级页面进行下载


    下载的之后的目录如下,用到的是红色框圈住的。 

    1.2、准备工程

    各文件夹下具体操作如下:

    Doc相关文档
    DriversSTM32CubeF1-master\STM32CubeF1-master\Drivers\STM32F1xx_HAL_Driver、STM32CubeF1-master\STM32CubeF1-master\Drivers\CMSIS下的文件放入到该文件夹下,这里要进行文件删除,具体见下
    IncSTM32CubeF1-master\STM32CubeF1-master\Projects\STM32F103RB-Nucleo\Templates\Inc下的文件放入到该文件夹下
    MDK-ARMSTM32CubeF1-master\STM32CubeF1-master\Projects\STM32F103RB-Nucleo\Templates\MDK-ARM下的startup_stm32f103xb.s复制到该文件夹下
    SrcSTM32CubeF1-master\STM32CubeF1-master\Projects\STM32F103RB-Nucleo\Templates\Src下的文件放入到该文件夹下

    Drivers: 

            CMSIS:

            对于CMSIS,除了Include和Device 其它全部删除,对于Device/ST/STM32F1xx下的文件除了Include和Source其它全部删除,对于Source/Templates下只保留system_stm32f1xx.c

            STM32F1xx_HAL_Driver:

            除了Inc和Src,其它全部删除; Inc下除了usb_ll_,删除文件名带有_ll_的.h文件; Src 下除了usb_ll_, 删除文件名带有_ll_的.c文件,这里也可以提前删除带template名字的相关.c文件,否则编译会报错

    二、创建工程,放在MDK-ARM目录下

    选中对应的型号,这里是stm32f103c8

     选中CMSIS下的CORE(Cortex-M处理器支持)

     工程创建完成之后要对工程进行配置

     添加分组

    这里列出相关名字,可以直接复制

    • Application/MDK-ARM
    • Application/User/Core
    • Drivers/STM32F1xx_HAL_Driver
    • Drivers/CMSIS

    Application/MDK-ARM

        

    Application/User/Core

    Drivers/STM32F1xx_HAL_Driver

    Drivers/CMSIS

    添加头文件

    这里列出相关路径,可以直接复制 

    • ../Inc
    • ../Drivers/STM32F1xx_HAL_Driver/Inc
    • ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy
    • ../Drivers/CMSIS/Device/ST/STM32F1xx/Include
    • ../Drivers/CMSIS/Include

    添加宏

    USE_HAL_DRIVER,STM32F103xB

    USE_HAL_DRIVER是为了可以引入头文件#include "stm32f1xx_hal.h"

    STM32F103xB是为了可以引入头文件#include "stm32f103xb.h" (对于stm32f103来说

    编译报错

    删除#include "stm32f1xx_nucleo.h"

    再次编译,还是报错

    删除template相关文件,在目录中也要删除

     

    第三次编译,不报错,但是一堆警告

    警告是由Keil 中ARM的编译器版本导致 ,默认是version 6, 

    第四次编译,大功告成

    调试器配置

    三、点灯代码验证工程 

    1. int main(void)
    2. {
    3. GPIO_InitTypeDef GPIO_InitStruct = {0};
    4. HAL_Init();
    5. /* Configure the system clock to 64 MHz */
    6. SystemClock_Config();
    7. __HAL_RCC_GPIOB_CLK_ENABLE();
    8. GPIO_InitStruct.Pin=GPIO_PIN_9; //PF9,10
    9. GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
    10. GPIO_InitStruct.Pull=GPIO_PULLUP; //上拉
    11. GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; //高速
    12. HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);
    13. /* Infinite loop */
    14. while (1)
    15. {
    16. }
    17. }

    四、配置好的代码

    • 工程包括所有的外设,如果不需要自行删除
    • 对于不会配置的操作,可以先利用CubeMX生成一个工程,参考生成的工程来配置(包括代码,keil配置等)

    完成代码

  • 相关阅读:
    react源码分析:组件的创建和更新
    深度之眼(十六)——Python:有益的探索
    【JS】常用数组方法
    Qt的常用类及作用
    NTMFS4C05NT1G N-CH 30V 11.9A MOS管,PDF
    实战案例(MDL语句)
    leaflet入门使用教程
    IPWorks 2022 核心网络组件 最新版 Crack
    【通信、算法、旅游、人工智能、图像处理、机械、医疗】EI会议(2023)
    Spring事务失效可能是哪些原因
  • 原文地址:https://blog.csdn.net/TSC1235/article/details/133616678