STM32使用CubeMX创建HAL库工程文件

news2024/9/21 4:37:20

文章目录

1. STM32CubeMX

2. 界面介绍

3. 使用教程

新建工程

选择芯片界面

​编辑

配置页面

引脚配置页面

引脚配置界面的颜色指示

配置RCC时钟参数

配置SYS参数

配置时钟树

Project Manager项目管理配置

生成工程文件

KEIL代码编写


1. STM32CubeMX

STM32CubeMX是STMicroelectronics(意法半导体)为其STM32系列微控制器提供的图形化配置工具。它旨在简化和加速嵌入式系统的开发过程。通过STM32CubeMX,开发者可以方便地配置微控制器的硬件资源,并生成初始化代码,从而减少手动编写代码的复杂性和可能的错误。

主要功能和特点

1. 图形化硬件配置

  • 引脚配置:用户可以通过图形界面直观地配置微控制器的引脚功能,例如GPIO、USART、I2C、SPI等。
  • 外设配置:配置各种外设,如定时器、ADC、DAC、PWM等。
  • 时钟树配置:设置微控制器的时钟源和时钟树,确保外设和内核工作在适当的频率下。

2. 自动生成代码

  • 代码自动生成:根据用户的配置,STM32CubeMX自动生成初始化代码和驱动代码。这些代码包括引脚初始化、外设初始化和时钟配置。
  • 项目文件生成:支持生成适用于多种IDE的项目文件,如Keil、IAR、Eclipse等。

3. 中间件支持

  • RTOS支持:支持FreeRTOS等实时操作系统的集成,用户可以方便地启用和配置RTOS。
  • USB、TCP/IP栈:集成了USB和TCP/IP等常用的中间件,简化了这些复杂协议的开发过程。

2. 界面介绍

主界面

  • 菜单栏

    • File:文件菜单,提供新建项目、打开项目、保存项目等基本功能。
    • Window:窗口菜单,允许用户管理和配置窗口布局。
    • Help:帮助菜单,提供帮助文档和软件信息。
  • 已经存在的工程

    • Existing Projects:列出了最近打开的项目文件,用户可以快速打开这些已经存在的工程进行修改和查看。
  • 新建工程

    • New Project:新建工程区域,提供了多种方式创建新项目。
      • 从MCU中开发我的项目(Start My Project from MCU):选择具体的STM32 MCU型号进行项目开发。
      • 从开发板中开发我的项目(Start My Project from ST Board):选择具体的ST开发板进行项目开发。
      • 从示例中开发我的项目(Start My Project from Example):从现有的项目示例中创建新项目。
  • 软件包安装管理

    • Manage Software Installations:管理STM32CubeMX和嵌入式软件包的安装和更新。
      • 检查更新(Check for Updates):检查STM32CubeMX和嵌入式软件包的更新。
      • 安装/移除软件包(Install / Remove):安装或移除STM32CubeMX和相关的嵌入式软件包。
  • 辅助工具

    • Assistant Tools:提供了一些辅助工具和功能扩展。如示例项目、教程和与其他工具的集成。
  • 关于STM32

    • About STM32:提供关于STM32产品的更多信息和资源链接。

File 界面

 Windows 界面

 Help 界面

 Manage 软件包管理页面

这里可以安装需要的软件包,绿色的表示已经安装,蓝色表示未安装。

 

Updater Settings 界面

软件包存放位置(Firmware Repository)

  • Repository Folder:这是存放STM32Cube固件包的文件夹路径。在这个位置,最好存到C盘之外的位置。

检查和更新设置(Check and Update Settings)

  • Manual Check(手动检查):如果选择此选项,STM32CubeMX不会自动检查更新,用户需要手动点击更新按钮来检查和下载最新的软件包。

  • Automatic Check(自动检查):如果选择此选项,STM32CubeMX会自动检查更新。用户可以设置两次检查之间的时间间隔(以天为单位)。例如,在“Interval between two Checks (days)”字段中输入“5”,表示每隔五天自动检查一次更新。

数据自动刷新(Data Auto-Refresh)

  • No Auto-Refresh at Application start(程序启动时不刷新数据):如果选择此选项, STM32CubeMX在启动时不会自动刷新数据,用户需要手动刷新。

  • Auto-Refresh Data-only at Application start(程序启动时只刷新数据):如果选择此选项, STM32CubeMX在启动时会自动刷新数据,但不会刷新文档。这个选项默认选中,保证了应用程序启动时数据是最新的。

  • Auto-Refresh Data and Docs at Application start(程序启动时刷新数据和文档):如果选择此选项, STM32CubeMX在启动时会同时刷新数据和文档,确保所有信息都是最新的。

  • Interval between two data-refreshes (days)(两次数据刷新的时间间隔):用户可以设置两次数据刷新的时间间隔(以天为单位)。例如,在此字段中输入“3”,表示每隔三天自动刷新一次数据。

3. 使用教程

新建工程

这里选择使用第一种新建工程的方式

 

选择芯片界面

先输入想要使用的芯片型号,然后双击选择详细的芯片类型即可。

配置页面

主界面区域划分

1. MCU外设选择界面(Categories)

  • 位置:界面左侧
  • 功能:在这个区域,可以选择使用的MCU外设资源。
    • System Core:包含系统核心外设,如GPIO(通用输入输出)、NVIC(嵌套向量中断控制器)、RCC(复位和时钟控制)等。
    • Analog:包含模拟外设,如ADC(模数转换器)、DAC(数模转换器)、OPAMP(运算放大器)等。
    • Timers:包含定时器外设,如基本定时器、通用定时器、PWM定时器等。
    • Connectivity:包含通信外设,如USART、SPI、I2C、CAN等。
    • Middleware:包含中间件,如USB、TCP/IP栈、文件系统等。

2. 详细参数配置界面(Parameter Settings)

  • 位置:界面中部
  • 功能:在此区域,可以对所选择的外设进行详细配置。
    • 配置选项:不同外设的具体参数配置选项显示在此区域中,用户可以设置这些参数以满足具体需求。
    • Parameter Settings(参数设置):配置外设的具体参数。
    • User Constants(用户常量):定义和使用用户常量。
    • NVIC Settings(NVIC设置):配置中断优先级和使能。

 3. 芯片引脚预览界面(Pinout View)

  • 位置:界面右侧
  • 功能:此区域显示STM32芯片的引脚分布和配置预览。
    • 引脚视图:直观展示每个引脚的位置及其当前配置。
    • 引脚功能配置:可以在引脚视图中直接点击某个引脚,选择并配置该引脚的功能。

引脚配置页面

引脚配置可以通过两种方式完成:

  1. 通过外设选择界面配置

    • 在MCU外设选择界面中选择具体的外设模块(如GPIO、USART等),然后配置相关的引脚功能。
  2. 通过引脚预览界面配置

    • 在芯片引脚预览界面中直接点击相应的引脚,选择并配置该引脚的功能。

引脚配置示例:PC13引脚

  1. 点击需要配置的引脚

    • 点击PC13引脚。在引脚预览界面中点击PC13引脚,会弹出一个功能选择菜单。
  2. 选择引脚功能

    • GPIO_EXTI13:外部中断
    • EVENTOUT:事件输出
    • GPIO_Analog:模拟输入输出
    • GPIO_Output:通用输出
    • GPIO_Input:通用输入
    • RTC_TAMPER:实时钟防篡改
    • RTC_OUT:实时钟输出
    • Reset_State:复位状态

引脚配置界面的颜色指示

不可配置引脚(淡黄色)

  • 电源专用引脚:在引脚预览界面中,电源专用引脚(如VDD、VSS等)以淡黄色显示。这些引脚是固定功能的,不可进行其他用途配置。
  • 示例VDDVSS:这些引脚用于供电和接地,不能配置为其他功能。

已配置但未初始化的引脚(黄色)

  • I/O功能但未初始化:引脚显示为黄色,表示该引脚已经配置了一个I/O功能,但在详细配置界面中没有进行初始化操作。
  • No mode状态:这种状态下,引脚已经进行资源分配,但没有具体的外设功能初始化。

已配置并初始化的引脚(绿色)

  • 配置成功的引脚:引脚显示为绿色,表示该引脚已经成功配置并完成初始化,配置有效且已生效。

配置RCC时钟参数

高速外部时钟(HSE):用于设置微控制器的高速外部时钟源,通常用于系统时钟或外设时钟。

低速外部时钟(LSE):用于设置微控制器的低速外部时钟源,通常用于RTC(实时时钟)或低功耗模式下的时钟。

  1. Disable(禁用):禁用高速外部时钟。
  2. BYPASS Clock Source(旁路时钟源):使用外部时钟信号,通过旁路模式将时钟信号直接输入到微控制器中。
  3. Crystal/Ceramic Resonator(外部晶振):使用外部晶振或陶瓷谐振器作为时钟源。

如果不配置RCC时钟,则是默认使用内部高速时钟(HSI),推荐将RCC时钟配置高速外部时钟和外部晶振。

配置SYS参数

1. Debug(调试接口)

默认情况下,调试功能是关闭的(No Debug)。用户可以根据需要选择使用的调试协议,主要有SW(Serial Wire)和JTAG两种调试接口。

调试协议选项

  • No Debug:不使用调试器关闭调试功能。
  • Serial Wire:使用SWD(Serial Wire Debug)协议进行下载和调试,推荐使用此选项,因其只需要2个引脚(SWCLK和SWDIO)。
  • JTAG (4 pins):使用JTAG协议的4引脚模式进行下载和调试。
  • JTAG (5 pins):使用JTAG协议的5引脚模式进行下载和调试,比4引脚模式多了一个复位引脚(nTRST)。
  • Trace Asynchronous Sw:使用SWD协议的追踪功能,有时也可以解决使用ST-Link烧录后无法再次烧录和调试的问题。

推荐设置

  • Serial Wire:SWD协议占用引脚少,调试速度快,推荐配置成Serial Wire模式。
  • 配置一致性:在STM32CubeMX中选择SW协议时,MDK等开发环境中也必须选择SW协议。同样,选择JTAG协议时也需要保持配置一致,避免下载和调试失败。

2. System Wake-Up(系统唤醒)

  • PA0引脚:设置低功耗模式下通过PA0引脚实现自动唤醒功能。

3. Timebase Source(时基源)

  • HAL的时基源:指HAL库中的uwTick,用于实现HAL_Delay()函数及各种超时功能的时钟基准。
  • Sys Tick(嘀嗒定时器):通常选择默认的Sys Tick作为系统时基源,维护SYS Timebase Source。这个选择将时基更新放在SysTick_Handler()中断服务函数中,具体实现为HAL_IncTick()函数。

实际应用中的配置

  1. 选择Serial Wire模式

    • 在实际项目中,推荐选择Serial Wire模式(SWD协议),因其调试速度快,占用引脚少。
    • 在STM32CubeMX中选择Serial Wire,并在MDK等开发环境中保持一致配置,确保下载和调试成功。
  2. 使用ST-Link或J-Link调试器

    • ST-Link调试器:选择Serial Wire模式。
    • J-Link调试器:如果使用JTAG协议,根据实际要求选择JTAG (4 pins) 或 JTAG (5 pins)。如果采用SWD协议,也可以选择Trace Asynchronous Sw模式。

配置时钟树

因为在前面RCC时钟配置中,选择使用外部晶振,在这里需要切换使用外部高速时钟模式(HSE),如果没有配置RCC时钟,则使用默认的内部高速时钟(HSI);
然后配置PLLCLK锁相环,之后倍频更改系统主时钟;
推荐使用最大时钟频率(72M), 可以直接修改后面HCLK(MHZ)系统时钟,直接改成72M,然后按下回车就可以, 前面会自动将PLL设置为8,PLMul设置为X9。

Project Manager项目管理配置

Project(工程设置)

项目路径和项目名称要使用英文

Code Generator(代码生成器) 

  • Copy all used libraries into the project folder

    • 功能:将HAL库的所有.c.h文件复制到所建工程中。
    • 优点:如果后续需要新增其他外设而不再用STM32CubeMX时,会很方便。
    • 缺点:项目体积大,编译时间相比其他选项更长。
  • Copy only the necessary library files

    • 功能:只复制所需的.c.h文件到工程中。
    • 优点:项目体积相对较小,编译时间短,工程易于复制和迁移。
    • 缺点:新增外设时需要重新用STM32CubeMX导入。
  • Add necessary library files as reference in the toolchain project configuration file

    • 功能:不复制文件,直接从软件包存放位置引用.c.h文件。
    • 优点:项目体积最小,节约硬盘空间。
    • 缺点:项目复制到其他电脑上或者软件包位置改变时,需要修改相应路径。

2. Generated Files

这部分配置了代码生成的具体方式和文件管理。

  • Generate peripheral initialization as a pair of .c/.h files per peripheral

    • 功能:为每个外设生成单独的.c.h文件。
    • 优点:代码组织清晰,便于管理和维护。
  • Backup previously generated files when re-generating

    • 功能:重新生成代码时备份之前生成的文件。
    • 优点:确保旧代码不会丢失,便于回滚和比较。
  • Keep User Code when re-generating

    • 功能:重新生成代码时保留用户代码。
    • 优点:防止用户手写的代码被覆盖。
  • Delete previously generated files when not re-generated

    • 功能:重新生成代码时删除之前生成的文件。
    • 优点:保持项目整洁,避免冗余文件。

3. HAL Settings

这部分配置了HAL库的特定设置。

  • Set all free pins as analog (to optimize the power consumption)

    • 功能:将所有未使用的引脚设置为模拟输入,以优化功耗。
    • 优点:减少未使用引脚的功耗,提高系统能效。
  • Enable Full Assert

    • 功能:启用完整的断言检查。
    • 优点:在开发过程中提供更严格的错误检查,有助于调试。

4. Template Settings

这部分允许用户选择自定义代码生成模板。

  • Settings...:配置自定义代码生成模板的选项。

 

生成工程文件

KEIL代码编写

生成项目文件后,使用keil打开,之后要注意,所有后期添加的代码都要在固定的位置。

比如添加新的头文件:

添加新的变量:

添加新的主函数代码:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1926714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

得物六宫格验证码分析

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi a…

【自学网络安全】二、防火墙NAT智能选路综合实验

任务要求: (衔接上一个实验所以从第七点开始,但与上一个实验关系不大) 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 8,分公司设备可以通过总…

LeetCode 算法:电话号码的字母组合 c++

原题链接🔗:电话号码的字母组合 难度:中等⭐️⭐️ 题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 …

线程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

线程 线程概念 简介 线程定义:线程是操作系统进行调度的最小单位,包含在进程内,是进程中的实际执行单元 线程特性:一个线程代表进程中的一个单一顺序控制流,即执行路径 多线程应用:一个进程可以包含多个…

LabVIEW红外热波图像缺陷检

开发使用LabVIEW开发的红外热波图像缺陷检测系统。该系统结合红外热像仪、工业相机和高效的数据采集硬件,实现对工件表面缺陷的自动检测和分析。通过LabVIEW的强大功能,系统能够实时采集、处理和显示红外热波图像,有效提高了检测的精度和效率…

时域分析----移动平均滤波器介绍及其在金融应用示例

介绍 移动平均滤波器(Moving Average Filter)是一种基本但功能强大的信号处理技术,广泛应用于各种数据平滑和去噪任务中。其主要目的是通过对数据进行平均处理,减少随机波动和噪声,从而突出数据中的趋势和规律。移动平…

Win11任务栏当中对 STM32CubeMX 的堆叠问题

当打开多个 CubeMX 程序的时候,Win11 自动将其进行了堆叠,这时候就无法进行预览与打开。 问题分析:大部分ST的工具都是基于 JDK 来进行开发的,Win11 将其识别成了同一个 Binary 但是实际上他们并不是同一个,通过配置…

数据治理项目中,数据运营团队如何搭建能提升数据应用效果?

引言:在数据治理项目中,数据运营团队的搭建对于提升数据应用效果具有关键作用。以下是一些具体的步骤和策略,用于构建高效的数据运营团队以优化数据应用效果: 一、明确团队目标和职责 确定数据应用目标:首先&#xf…

【接口自动化_06课_Pytest+Excel+Allure完整框架集成】

一、logging在接口自动化里的应用 1、设置日志的配置,并收集日志文件 日志的设置需要在pytest.ini文件里设置。这个里面尽量不要有中文 2、debug日志的打印 pytest.ini文件的开关一定得是true才能在控制台打印日志 import allure import pytest from P06_PytestFr…

JavaScript(9) ----this指向问题,bind,call,apply等方法

目录 this指向问题 全局函数调用: 对象方法调用: 构造函数调用: 事件处理: 箭头函数: setTimeout和setInterval 7.使用call、apply或bind call 方法 apply 方法 bind 方法 总结 this指向问题 全局函数调用…

基于conda包的环境创建、激活、管理与删除

Anaconda是一个免费、易于安装的包管理器、环境管理器和 Python 发行版,支持平台包括Windows、macOS 和 Linux。下载安装地址:Download Anaconda Distribution | Anaconda 很多不同的项目可能需要使用不同的环境。例如某个项目需要使用pytorch1.6&#x…

STM32MP135裸机编程:支持内存非对齐访问

0 前言 使用stm32官方可视化初始化代码生成工具STM32CubeMX生成的工程GCC编译选项默认不支持非对齐访问,在我们进行非对齐的访问时就会进入数据异常中断DAbt中。为了解决这一问题,我们需要在GCC编译选项中加上一处配置。 1 操作方法 右键STM32CubeIDE…

ArkTS基础快速入门

初识ArkTS语言 ArkTS:是一门用于开发鸿蒙应用的编程语言。 ArkTS提供了声明式UI范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发应用。 同时,它在保持TypeScript(简称TS)基本语法风格的基础…

启动yarn后,其他节点没有NodeManager

写在前面: 这个问题虽然折磨了我两天,但是原因特别蠢,可能与各位不一定一样,我是因为ResourceManager的节点的"/etc/hadoop/workers"文件没有配置好(没有配hadoop102和hadoop104),但排…

FPGA学习笔记(一) FPGA最小系统

文章目录 前言一、FPGA最小系统总结 前言 今天学习下FPGA的最小系统一、FPGA最小系统 FPGA最小系统与STM32最小系统类似,由供电电源,时钟电路晶振,复位和调试接口JTAG以及FLASH配置芯片组成,其与STM32最大的不同之处就是必须要有…

QQ频道导航退出

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140413538 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

three.js添加多个画布

多个场景的渲染需要多个画布,但是这样会导致加载模型纹理次数变多,基本方法是用一张canvas在整个背景中填充视口,利用其它元素作为每个虚拟画布,只在canvas中加载一个渲染器renderer,并为每个虚拟画布创建一个场景&…

实训第一天笔记

#初始化一个新的NPM项目(根据提示操作) npm init #安装TSC、TSLint和NodeJS的类型声明 npm install -s typescript tslint types/node 在根目录中新建一个名为tsconfig.json的文件,然后在代码编辑器中打开,写入下述内容: {"compilerO…

Chromium CI/CD 之Jenkins实用指南2024-如何创建新节点(三)

1. 前言 在前一篇《Jenkins实用指南2024-系统基本配置(二)》中,我们详细介绍了如何对Jenkins进行基本配置,包括系统设置、安全配置、插件管理以及创建第一个Job。通过这些配置,您的Jenkins环境已经具备了基本的功能和…

Qt文件下载工具

在Qt中实现文件下载功能,通常可以通过多种方式来完成,包括使用 QNetworkAccessManager 和 QNetworkReply 类,或者使用更高级别的 QHttpMultiPart 类。以下是两种常见的实现方法: 方法1:使用 QNetworkAccessManager 和…