本过程需要进入ST官网下载STM32CubeMX软件安装包,和进入Java官网下载Java运行环境。
ST官网
STM32CubeMX官网下载地址
STM32CubeMX软件ST中文官网下载地址
【 官网下载界面,点击获取软件,跳转到获取步骤。】
【选择版本,点击获取按钮。】
因为 STM32CubeMX 软件是基于 JAVA 环境运行的,所以需要安装 JRE (Java Runtime Environment)才能使用, 建议到官网下载最新版本JRE。
必须安装Jave运行环境1.8。
Java环境官方下载地址
上一节中两个文件下载完成后,即可开始安装。
略
第一次使用cubeMX软件,建议更改库文件路径,不要默认在C盘的用户文件夹中。
依次点击Help,Updater Setting
修改Repository Folder下的文件路径。
说明:此步骤也非必须当前安装,如果还不知道自己会用什么系列的MCU,可以暂时不安装,等在生成程序工程的时候,软件会自动下载库文件,或者,也可以根据已有库文件在生成工程时候自行导入。
依次点击Help,Manage embedded software packages
在如下图中,选择自己需要的库文件和版本号,点击Install按钮即可在线安装。
自此,所有安装准备工作完成,即可开始使用。
通过搜索栏搜索自己想添加的MCU 型号,然后在右下方点击对应封装的器件。最后点击开始工程。
根据自己下载方式设置对用的debug选项,如果不设置该项,程序只能运行一遍。如果使用串行下载方式(SWDIO,SWCLK)选择Serial Wire。
时钟分类和时钟源选择详见下表
时钟 | 中文名 | 频率来源 |
---|---|---|
HSI | 高速内部时钟 | RC振荡器,频率为8MHz |
HSE | 高速外部时钟 | 可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz |
LSI | 低速内部时钟 | 低速内部时钟 |
LSE | 低速外部时钟 | 接频率为32.768kHz的石英晶体. |
时钟源 | 说明 |
---|---|
Disable | 不使能,使用内部时钟源 |
BYPASS Clock Source | 旁路时钟源1 |
Crystal/Ceramic Resonator | 外部晶体/陶瓷谐振器 |
根据上步选择的时钟源,在时钟树上选择对应的时钟通道【② ③步骤】,然后设置时钟源的频率【①】,最后设置需要的时钟频率【④】,此时各种倍频和分频选择器会自动设置为合适的值。
到当前步骤,可以去设置一些GPIO或一些内部外设的功能,此处不在枚举。
如下图配置,没有注释的可以保持默认。
关于上图一些中英文对照表
英文 | 中文 |
---|---|
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 | 删除以前生成的文件,如果没有重新生成 |
建议工程打开以后,把Listing文件路径修改以下,防止工程文件移动位置后,编译失败。
参数配置
中断配置,使能或失能中断,
为中断分配优先级关于中断优先级的说明可参看本文第六章。
必须写在主程序前的代码
//重要!!!***********************************************************
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)//判断哪个串口触发的中断
{
}
}
优先级分组 | 抢占优先级 | 响应优先级 | 描述 |
---|---|---|---|
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中文用户手册下载方法
需要在程序中加入的代码片段
定时器中断启动代码
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; // 清空中断计数值
关于计算公式,本文不再提供教程,仅提供一个自己做的表格(下载链接在下,不需要积分),用来快速操作设置。【表格如果计算公式输入有误,导致计算结果错误,可评论区指出问题。】
STM32计算器EXCEL版
这个函数对于使用定时中断功能,可以使能也可以不使能,暂时还没有说受影响,要是PWM输出的话,应该是要使能。
使能前,调频过程在ARR的值在当次计数周期内立即生效,这样有可能打断原有的输出比较关系,即ARR和CNT的关系,使得输出比较异常进而导致输出波形异常;AutoReloadPreload使能后,调频过程在ARR的值在下次计数周期才生效,不会打断ARR和CNT预设的输出比较逻辑,引出即使调频不断改变ARR值,互补pwm波形也能正常输出。
可参考文章stm32定时器从模式解析
生成代码以后 ,我们会发现这个time.c文件会带个小雪花的标记。
可做一下以下操作:
通过函数开启通道开始产升PWM信号
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);//启动通道1产生PWM信号
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);//启动通道2产生PWM信号
占空比设置函数
sConfigOC.Pulse = 1000;//占空比设置函数
htim3.Instance->CCR1 = 1500; // 更改通道一PWM高电平周期值
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的值。
无需使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号。犹如芯片内部的驱动组件被旁路了。 ↩︎
本文为CSDN博主「唯心唯力」的原创文章。原文链接:STM32中断设置以及中断优先级设置 ↩︎