当前位置:   article > 正文

STM32CubeMX使用说明_stm32cubemx汉化

stm32cubemx汉化

1 软件安装

1.1 软件&环境下载

1.1.1 STM32CubeMX软件下载

本过程需要进入ST官网下载STM32CubeMX软件安装包,和进入Java官网下载Java运行环境。
ST官网
STM32CubeMX官网下载地址
STM32CubeMX软件ST中文官网下载地址
【 官网下载界面,点击获取软件,跳转到获取步骤。】
下载页面
【选择版本,点击获取按钮。】
在这里插入图片描述

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软件安装

安装步骤见下图,无图过程自行下一步;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 软件启动与安装库文件

2.1 软件界面

在这里插入图片描述

2.2 修改默认库文件路径

第一次使用cubeMX软件,建议更改库文件路径,不要默认在C盘的用户文件夹中。
依次点击HelpUpdater Setting
在这里插入图片描述
修改Repository Folder下的文件路径。
在这里插入图片描述

2.3 在线安装固件库

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

依次点击HelpManage embedded software packages

在这里插入图片描述
在如下图中,选择自己需要的库文件和版本号,点击Install按钮即可在线安装。
在这里插入图片描述

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

3 新建第一个工程

3.1 新建工程

进入选择器时会联网更新数据库,可能需要等待一下。
在这里插入图片描述

3.2 选择MCU型号

通过搜索栏搜索自己想添加的MCU 型号,然后在右下方点击对应封装的器件。最后点击开始工程。
在这里插入图片描述

3.3 设置Debug

根据自己下载方式设置对用的debug选项,如果不设置该项,程序只能运行一遍。如果使用串行下载方式(SWDIO,SWCLK)选择Serial Wire。
在这里插入图片描述

3.4 设置时钟

3.4.1 设置时钟源

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

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

设置如下图所示
在这里插入图片描述

3.4.2 设置时钟树

根据上步选择的时钟源,在时钟树上选择对应的时钟通道【② ③步骤】,然后设置时钟源的频率【①】,最后设置需要的时钟频率【④】,此时各种倍频和分频选择器会自动设置为合适的值。
在这里插入图片描述

3.5 MCU功能设置

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

3.6 程序配置

如下图配置,没有注释的可以保持默认。
在这里插入图片描述
在这里插入图片描述
关于上图一些中英文对照表

英文中文
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 生成工程

在这里插入图片描述

3.8 Listing文件设置

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

在这里插入图片描述
在这里插入图片描述

4 通用IO配置

4.1 Output 模式

下表为设置内容的解释和说明
在这里插入图片描述

4.1 Input 模式

下表为设置内容的解释和说明
在这里插入图片描述

5 串口通信配置

5.1 参数&界面

参数配置
在这里插入图片描述
中断配置,使能或失能中断,
在这里插入图片描述
为中断分配优先级关于中断优先级的说明可参看本文第六章。
在这里插入图片描述

5.2 串口代码

必须写在主程序前的代码

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

回调函数

/**
  * @brief  串口回调函数
  * @retval None
  */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance==USART1)//判断哪个串口触发的中断
	{	
	}
	else if(huart->Instance==USART2)//判断哪个串口触发的中断
	{
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

6 STM32中断分组和优先级

优先级分组抢占优先级响应优先级描述
NVIC_PriorityGroup_000~15取值高4位全部是响应优先级,无抢占优先级
NVIC_PriorityGroup_10~1取值0~7取值高4位全部是响应优先级,无抢占优先级
NVIC_PriorityGroup_20~3取值0~3取值抢占优先级为2位,响应优先级为2位
NVIC_PriorityGroup_30~7取值0~1取值抢占优先级为2位,响应优先级为2位
NVIC_PriorityGroup_40~15取值0抢占优先级为2位,响应优先级为2位

一些说明 2

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

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

7 定时器-定时中断

7.1界面解释说明

可按下图进行配置
在这里插入图片描述
打开中断
在这里插入图片描述

7.2 定时器代码

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

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

定时器回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM2)
	{		
		LED_All_Toggle;//LED 翻转
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

7.3 时钟周期计算

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

7.4 AutoReloadPreload

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

7.5 定时器从模式

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

7.6 关于C文件带雪花问题

生成代码以后 ,我们会发现这个time.c文件会带个小雪花的标记。
在这里插入图片描述
可做一下以下操作:

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

在这里插入图片描述

图 7.6.1

在这里插入图片描述

图 7.6.2

图 7.6.1

图 7.6.3

8 定时器-PWM模式

8.1 设置界面描述

时钟/模式
在这里插入图片描述
定时器设置
在这里插入图片描述
触发模式选择
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

8.2 需要添加代码

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

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

8.2 关于占空比

占空比设置函数

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

占空比计算
在这里插入图片描述
占空比更改

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

9 ADC

ADC单通道配置
在这里插入图片描述

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并开始常规通道的转换。
  • 1
HAL_ADC_PollForConversion(&hadc1, 100);//等待ADC转换完成
  • 1
adc_val = HAL_ADC_GetValue(&hadc1);	//从常规通道的数据寄存器获取转换后ADC的值。
  • 1

10 DMA

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/457558
推荐阅读
相关标签
  

闽ICP备14008679号