STM32CubeMX使用说明

目录

  • 1 软件安装
    • 1.1 软件&环境下载
      • 1.1.1 STM32CubeMX软件下载
      • 1.1.2 Java环境下载
    • 1.2 安装
      • 1.2.1 Java环境安装
      • 1.2.2 STM32CubeMX软件安装
  • 2 软件启动与安装库文件
    • 2.1 软件界面
    • 2.2 修改默认库文件路径
    • 2.3 在线安装固件库
  • 3 新建第一个工程
    • 3.1 新建工程
    • 3.2 选择MCU型号
    • 3.3 设置Debug
    • 3.4 设置时钟
      • 3.4.1 设置时钟源
      • 3.4.2 设置时钟树
    • 3.5 MCU功能设置
    • 3.6 程序配置
    • 3.7 生成工程
    • 3.8 Listing文件设置
  • 4 通用IO配置
  • 4.1 Output 模式
  • 4.1 Input 模式
  • 5 串口通信配置
    • 5.1 参数&界面
    • 5.2 串口代码
  • 6 STM32中断分组和优先级
  • 7 定时器-定时中断
    • 7.1界面解释说明
    • 7.2 定时器代码
    • 7.3 时钟周期计算
    • 7.4 AutoReloadPreload
    • 7.5 定时器从模式
    • 7.6 关于C文件带雪花问题
  • 8 定时器-PWM模式
    • 8.1 设置界面描述
    • 8.2 需要添加代码
    • 8.2 关于占空比
  • 9 ADC
  • 10 DMA

1 软件安装

1.1 软件&环境下载

1.1.1 STM32CubeMX软件下载

本过程需要进入ST官网下载STM32CubeMX软件安装包,和进入Java官网下载Java运行环境。
ST官网
STM32CubeMX官网下载地址
STM32CubeMX软件ST中文官网下载地址
【 官网下载界面,点击获取软件,跳转到获取步骤。】
STM32CubeMX使用说明_第1张图片
【选择版本,点击获取按钮。】
STM32CubeMX使用说明_第2张图片

1.1.2 Java环境下载

因为 STM32CubeMX 软件是基于 JAVA 环境运行的,所以需要安装 JRE (Java Runtime Environment)才能使用, 建议到官网下载最新版本JRE。
必须安装Jave运行环境1.8。

Java环境官方下载地址

1.2 安装

上一节中两个文件下载完成后,即可开始安装。

1.2.1 Java环境安装

1.2.2 STM32CubeMX软件安装

安装步骤见下图,无图过程自行下一步;
STM32CubeMX使用说明_第3张图片
STM32CubeMX使用说明_第4张图片
STM32CubeMX使用说明_第5张图片

2 软件启动与安装库文件

2.1 软件界面

STM32CubeMX使用说明_第6张图片

2.2 修改默认库文件路径

第一次使用cubeMX软件,建议更改库文件路径,不要默认在C盘的用户文件夹中。
依次点击Help,Updater Setting
STM32CubeMX使用说明_第7张图片
修改Repository Folder下的文件路径。
STM32CubeMX使用说明_第8张图片

2.3 在线安装固件库

  说明:此步骤也非必须当前安装,如果还不知道自己会用什么系列的MCU,可以暂时不安装,等在生成程序工程的时候,软件会自动下载库文件,或者,也可以根据已有库文件在生成工程时候自行导入。

依次点击Help,Manage embedded software packages

STM32CubeMX使用说明_第9张图片
在如下图中,选择自己需要的库文件和版本号,点击Install按钮即可在线安装。
STM32CubeMX使用说明_第10张图片

自此,所有安装准备工作完成,即可开始使用。

3 新建第一个工程

3.1 新建工程

进入选择器时会联网更新数据库,可能需要等待一下。
STM32CubeMX使用说明_第11张图片

3.2 选择MCU型号

通过搜索栏搜索自己想添加的MCU 型号,然后在右下方点击对应封装的器件。最后点击开始工程。
STM32CubeMX使用说明_第12张图片

3.3 设置Debug

根据自己下载方式设置对用的debug选项,如果不设置该项,程序只能运行一遍。如果使用串行下载方式(SWDIO,SWCLK)选择Serial Wire。
STM32CubeMX使用说明_第13张图片

3.4 设置时钟

3.4.1 设置时钟源

时钟分类和时钟源选择详见下表

时钟 中文名 频率来源
HSI 高速内部时钟 RC振荡器,频率为8MHz
HSE 高速外部时钟 可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz
LSI 低速内部时钟 低速内部时钟
LSE 低速外部时钟 接频率为32.768kHz的石英晶体.
时钟源 说明
Disable 不使能,使用内部时钟源
BYPASS Clock Source 旁路时钟源1
Crystal/Ceramic Resonator 外部晶体/陶瓷谐振器

设置如下图所示
STM32CubeMX使用说明_第14张图片

3.4.2 设置时钟树

根据上步选择的时钟源,在时钟树上选择对应的时钟通道【② ③步骤】,然后设置时钟源的频率【①】,最后设置需要的时钟频率【④】,此时各种倍频和分频选择器会自动设置为合适的值。
STM32CubeMX使用说明_第15张图片

3.5 MCU功能设置

到当前步骤,可以去设置一些GPIO或一些内部外设的功能,此处不在枚举。

3.6 程序配置

如下图配置,没有注释的可以保持默认。
STM32CubeMX使用说明_第16张图片
STM32CubeMX使用说明_第17张图片
关于上图一些中英文对照表

英文 中文
Copy all used libraries into the project folder 将所有使用的库复制到项目文件夹中
Copy only the necessary library files 只复制必要的库文件
Add necessary library files as reference in the toolchain project configuration file 在工具链项目配置文件中添加必要的库文件作为引用
----------------------------------------------------- -----------------------------------------------------
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.7 生成工程

STM32CubeMX使用说明_第18张图片

3.8 Listing文件设置

建议工程打开以后,把Listing文件路径修改以下,防止工程文件移动位置后,编译失败。

STM32CubeMX使用说明_第19张图片
STM32CubeMX使用说明_第20张图片

4 通用IO配置

4.1 Output 模式

下表为设置内容的解释和说明
STM32CubeMX使用说明_第21张图片

4.1 Input 模式

下表为设置内容的解释和说明
STM32CubeMX使用说明_第22张图片

5 串口通信配置

5.1 参数&界面

参数配置
STM32CubeMX使用说明_第23张图片
中断配置,使能或失能中断,
STM32CubeMX使用说明_第24张图片
为中断分配优先级关于中断优先级的说明可参看本文第六章。
STM32CubeMX使用说明_第25张图片

5.2 串口代码

必须写在主程序前的代码

	//重要!!!***********************************************************
	HAL_UART_Receive_IT(&huart1,UART1_SendBUFF,1);//重新触发串口1中断使能**
	HAL_UART_Receive_IT(&huart2,UART2_SendBUFF,1);//重新触发串口2中断使能**
	//重要!!!***********************************************************
		

回调函数

/**
  * @brief  串口回调函数
  * @retval None
  */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance==USART1)//判断哪个串口触发的中断
	{	
	}
	else if(huart->Instance==USART2)//判断哪个串口触发的中断
	{
	}
}

6 STM32中断分组和优先级

优先级分组 抢占优先级 响应优先级 描述
NVIC_PriorityGroup_0 0 0~15取值 高4位全部是响应优先级,无抢占优先级
NVIC_PriorityGroup_1 0~1取值 0~7取值 高4位全部是响应优先级,无抢占优先级
NVIC_PriorityGroup_2 0~3取值 0~3取值 抢占优先级为2位,响应优先级为2位
NVIC_PriorityGroup_3 0~7取值 0~1取值 抢占优先级为2位,响应优先级为2位
NVIC_PriorityGroup_4 0~15取值 0 抢占优先级为2位,响应优先级为2位

一些说明 2

  • 抢占优先级不同,会涉及到中断嵌套,抢占优先级高的会优先抢占优先级低的,优先得到执行。(注:优先级数字越小,优先级越高)
  • 抢占优先级相同,不涉及到中断嵌套,响应优先级不同,响应优先级高的先响应。(例如:两个中断同时响应,这里就会先执行响应优先级高的那个中断)(注:优先级数字越小,优先级越高)
  • 抢占优先级和响应优先级都相同,则比较它们的硬件中断编号,中断编号越小,优先级越高。(硬件中断编号从中断向量表当中查看)

本文多方参考各种博客此处不依依列举。关于STM32CubeMX软件的更多详细应用可去官网查看官方文档。参考博客STM32CubeMX中文用户手册下载方法

7 定时器-定时中断

7.1界面解释说明

可按下图进行配置
STM32CubeMX使用说明_第26张图片
打开中断
STM32CubeMX使用说明_第27张图片

7.2 定时器代码

需要在程序中加入的代码片段
定时器中断启动代码

HAL_TIM_Base_Start_IT(&htim2);//启动定时器中断

定时器回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM2)
	{		
		LED_All_Toggle;//LED 翻转
	}
}

启动停止函数
这些函数不需要可以不用

HAL_TIM_Base_Stop(&htim2);  // 停止计数
HAL_TIM_Base_Start(&htim2); // 启动定时器
htim2.Instance->CNT = 0;    // 清空中断计数值

7.3 时钟周期计算

关于计算公式,本文不再提供教程,仅提供一个自己做的表格(下载链接在下,不需要积分),用来快速操作设置。【表格如果计算公式输入有误,导致计算结果错误,可评论区指出问题。】
STM32CubeMX使用说明_第28张图片
STM32计算器EXCEL版

7.4 AutoReloadPreload

这个函数对于使用定时中断功能,可以使能也可以不使能,暂时还没有说受影响,要是PWM输出的话,应该是要使能。
使能前,调频过程在ARR的值在当次计数周期内立即生效,这样有可能打断原有的输出比较关系,即ARR和CNT的关系,使得输出比较异常进而导致输出波形异常;AutoReloadPreload使能后,调频过程在ARR的值在下次计数周期才生效,不会打断ARR和CNT预设的输出比较逻辑,引出即使调频不断改变ARR值,互补pwm波形也能正常输出。

7.5 定时器从模式

可参考文章stm32定时器从模式解析

7.6 关于C文件带雪花问题

生成代码以后 ,我们会发现这个time.c文件会带个小雪花的标记。
STM32CubeMX使用说明_第29张图片
可做一下以下操作:

  1. 右击带雪花的文件,选择第一项Options for …;
  2. 点击下方Defaults按钮,再点击OK 按钮;
  3. 还原后的效果如下图所示;

STM32CubeMX使用说明_第30张图片

图 7.6.1

STM32CubeMX使用说明_第31张图片

图 7.6.2

STM32CubeMX使用说明_第32张图片

图 7.6.3

8 定时器-PWM模式

8.1 设置界面描述

时钟/模式
STM32CubeMX使用说明_第33张图片
定时器设置
STM32CubeMX使用说明_第34张图片
触发模式选择
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

STM32CubeMX使用说明_第35张图片

8.2 需要添加代码

通过函数开启通道开始产升PWM信号

  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);//启动通道1产生PWM信号
  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);//启动通道2产生PWM信号

8.2 关于占空比

占空比设置函数

sConfigOC.Pulse = 1000;//占空比设置函数

占空比计算
STM32CubeMX使用说明_第36张图片
占空比更改

htim3.Instance->CCR1 = 1500; // 更改通道一PWM高电平周期值

9 ADC

ADC单通道配置
STM32CubeMX使用说明_第37张图片

mode 模式
lndependent mode 独立模式(只开一个ADC,就只有此一个模式,开启多个ADC会有更多选择)

Clock Prescaler 时钟分频

ADC时钟频率,根据手册查看ADC的合适频率,根据APB2时钟频率进行分频,选择合适频率。

Resolution 分辨率
不同分辨率对应不同的转换周期

Data Alignment 对齐模式,默认选择右对齐即可。

Scan Conversion Mode 扫描模式,当只有个ADC时候,不开启或开启都可。当多个ADC通道时,需要开启,判断哪个先转换,那个后转换。

Continuous Conversion Mode 连续转换模式,需要开启。否则采样一次后就不在采样。

Discontinuous Conversion Mode 不连续转换模式,只有不使能选择项, 默认即可。

DMA Continuous Requests DMA连续转换请求,根据使用方式自行选择使能。

End Of Conversion Selection 连续转换结束触发选择。可以选择只有一个通道转换完成触发,也可选择多个通道转换完成触发。

Number Of Conversion 转换通道数量
External Trigger Conversion Source 外部转换触发源,默认选择软件触发Regular Conversion launched by software软件启动的定期转换

External Trigger Conversion Edge外部触发器转换边

Sampling Time 取样时间

ADC_Injected_ConversionMode ADC注入转换模式
Number Of Conversions 注入通道数 默认选择为零

WatchDog 看门狗
Enable Analog WatchDog Mode 启用模拟看门狗模式 ,可以不启用

控制代码

HAL_ADC_Start(&hadc1); //启用ADC并开始常规通道的转换。
HAL_ADC_PollForConversion(&hadc1, 100);//等待ADC转换完成
adc_val = HAL_ADC_GetValue(&hadc1);	//从常规通道的数据寄存器获取转换后ADC的值。

10 DMA

STM32CubeMX使用说明_第38张图片
STM32CubeMX使用说明_第39张图片
STM32CubeMX使用说明_第40张图片


  1. 无需使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号。犹如芯片内部的驱动组件被旁路了。 ↩︎

  2. 本文为CSDN博主「唯心唯力」的原创文章。原文链接:STM32中断设置以及中断优先级设置 ↩︎

你可能感兴趣的:(单片机&C语言,stm32,单片机,嵌入式硬件)