STM32CubeMX
【编者按】B-U585I-IOT02A开发板是基于 STM32U585AI 微控制器的功能强大的开发平台,内置 Arm® Cortex®-M33 内核、具备Arm® TrustZone® 安全架构,以及多种智能外设资源。该套件包括 Wi-Fi® 和蓝牙® 模块,麦克风、温度和湿度、磁力计、加速度计和陀螺仪、压力、飞行时间和手势检测等丰富的传感器。B-U585I-IOT02A 套件可基于图形化软件配置工具STM32CubeMX进行配置,简单易用,能够生成包含EWARM、 MDK-ARM、 TrueSTUDIO、 SW4STM32 等初始化代码工程。通过项目管理界面进行初始化配置并生成代码。自动生成的工程就是一个可以正常编译的完整工程,使用的时候只需要添加上用户代码即可。
本文为5篇 B-U585I-IOT02A 开发板网友评测文章的第三篇,与大家分享该板的CubeMX环境搭建。
-
第三篇:基于STM32U5的CubeMX环境搭建
-
第四篇:B-U585I-IOT02A的蓝牙和WiFi的体验
-
第五篇:STM32U585AI探索套件压力传感器LPS22HH驱动与海拔换算
首先感谢申请到ST的最新最潮的开发板,本次把玩的开发板是B-U585I-IOT02A,这款开发板的特色之处就是低功耗与M33内核,低功耗参数如下:
M33内核是基于M4内核基础上进行的功能拓展,主要具有TrustZone安全优势,针对物联网产品的一颗MCU。而且B-U585I-IOT02A的主频高达160MHz,闪存的2兆字节和SRAM的786千字节的大小,完全可以装下应用代码。
接下来介绍一下B-U585I-IOT02A的硬件部分。
包装还算是中规中矩,使用静电袋防止硬件受损,还是很不错的。
开发板的正面。正面可以看到外设很多,有WiFi,蓝牙,存储也有,而且一般接口都引出了,十分方便,用户到手即用。
开发板背面,有一颗F723,这颗料是ST-LINK V3,速度比V2可好太多,而且价格还不贵,嘿嘿。
B-U585I-IOT02A的蓝牙模块特写,有时间一定要玩玩这部分。
接下来讲讲如何使用CubeMX进行对B-U585I-IOT02A进行硬件配置,CubeMX我之前安装过,但是没用过,知道这个软件很奈斯,可以可视化配置ST的MCU,然后还可以生成代码,但是之前都是使用STM32的标准库习惯了,突然使用HAL还有些不适应。这次就打破这个隔阂,学习一下新东西。
首先说一下,我电脑创建用户的时候,用了中文名字,而且安装CubeMX的时候选择了默认,所以在使用CubeMX的时候出现了一些问题,所以,如果你的电脑用户也是中文名称的时候,建议把CubeMX改一下位置,如下图所示。
首先,选择Updater Settings,然后选择Repository Folder 储存库文件夹,如下图所示,选择一个非中文路径即可。
通过以上操作,就可以解决中文路径下固件包安装不上的问题了。
接下来就可以愉快的使用CubeMX了,CubeMX开发之前需要下载固件包也就是从Manage embedded software packages中进行选择我们要开发的主控芯片型号。
由于本次是开发B-U585I-IOT02A,所以选择STM32U5。(Ps:我之前安装过,所以会是绿色方块,如果没安装过应该是白色方块)
安装完成之后选择新建工程,选择好芯片,就可以进行管脚配置了,如下图所示。
管脚配置要知道外设都接了哪个IO,本次先点个灯,发现开发板的LED是PH6和PH7,设置好这俩IO为输出模式即可,也可以设置其名称,这个名称会在程序中体现出来。时钟方面先默认即可,接下来配置代码输出部分,设置一下工程名字,工程存储路径还有工具链,本次我使用的是MDK开发,所以工具链这块选择MDK-ARM。
都配置好之后,选择generate code,创建代码即可。
创建好的代码,找到其路径,就可以看到有MDK的工程,直接打开。
值得注意的是,自己写的用户代码,需要加载到/* USER CODE BEGIN 3 */这种注释下面,否则当更新CubeMX之后,自己写的应用代码可能被优化没了。
最后,点灯成功,也算是把CubeMX用了起来,奈斯!!!下面是点灯的照片,每500ms闪烁一次。
最后附上工程,有兴趣的可以玩一玩。点击下载:https://doc.weixin.qq.com/txdoc/word?docid=w2_AKcAPgZcANg8qr68HFRSkORsleAfC&scode=AOgA3QdlAAcdlmZjl0AKcAPgZcANg&type=0
来源:STM32论坛网友yangjiaxu 版权归原作者所有
直接转载来源:STM32
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。
针对STM8同样也有一款工具STM8CubeMX,看到一个技术交流群问了这一个问题:STM8CubeMX 和 STM32CubeMX 功能一样吗?
前几年没有出现“缺芯”的时候,STM8的出货(需求)量其实很大,在2017年的时候,ST官方针对STM8推出STM8CubeMX。
STM8CubeMX介绍
先看一下STM8CubeMX界面:
STM8CubeMX是在2017年推出来,方便STM8开发者使用的一套图形化工具,看到以上STM8CubeMX界面,相信关注我的朋友中,学习STM32的朋友都非常熟悉。
简单来说:STM8CubeMX是一个图形工具,它可以非常容易地配置STM8微控制器并生成相应的配置报告,方便软件、硬件工程师查阅配置信息。
比如:简单的配置STM8S103
生成一份相应的报告,比如:引脚配置报告:
还有芯片信息,时钟树配置、功耗计算等,如果你还在使用STM8,又没了解过,不妨下载来体验一番。
更多关于STM8CubeMX的描述,请参考官网:
https://www.st.com/en/development-tools/stm8cubemx.html
STM8CubeMX 和 STM32CubeMX异同
STM8CubeMX 相比 STM32CubeMX 功能要弱很多,可以理解为STM8CubeMX 是 STM32CubeMX 的简化版。
相同点:
-
支持MCU选型
-
引脚、时钟树等配置
不同点:
-
STM8CubeMX不支持代码自动生成
STM8因为资源,特别是Flash和RAM相对不多,所以很难支持类似STM32中的HAL库(代码量相对较大),因而不支持代码自动生成。
那你肯定会问:STM8CubeMX的功能是什么?
主要功能是:图形化引脚配置,方便开发人员知道引脚配置信息,以及软件和硬件对接。
你如果开发过相对大一点的项目,特别是使用引脚比较多的时候,很容易搞混引脚是否被使用、引脚功能是否被重定义等。
有了这个图形化工具(且能生成引脚报告),就能一目了然引脚资源使用情况。
下载安装
STM8CubeMX 和 STM32CubeMX下载安装方法类似,需要提前JRE环境的支持。
STM8CubeMX地址:
https://www.st.com/en/development-tools/stm8cubemx.html
JRE地址:
https://www.java.com/zh-CN/download/
来源:嵌入式专栏
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。
一、配置定时器为PWM产生
二、配置时钟树
三、定时器配置
四、配置完生成程序后,主程序里还要进行启动PWM就可以了
MX_TIM3_Init(); HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);//启动。置1 CCER的输出使能位bit4 HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);//CCER的bit0
然后可以改变占空比了。
**特别注意:**占空比不能大于自动重载寄存器ARR的值,不然输出的都是高电平。这个问题整了一天。
五、程序分析
/* TIM3 init function */
static void MX_TIM3_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig; TIM_OC_InitTypeDef sConfigOC; //------------------实际是调用TIM_Base_SetConfig配置定时器,上一篇分析过-- htim3.Instance = TIM3; htim3.Init.Prescaler = 71; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 99; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } //---------------------这个是默认的,不管------------------------------- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } //----------------配置输出比较部分-- 上图5部分------------------------------- sConfigOC.OCMode = TIM_OCMODE_PWM1;//输出模式PWM1 sConfigOC.Pulse = 80;//占空比 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;//高电平极性 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } //---------------------------------------------------------------------------------- sConfigOC.Pulse = 50; if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } HAL_TIM_MspPostInit(&htim3);//初始化引脚IO }
初始化PWM通道HAL_TIM_PWM_ConfigChannel------>调用
case TIM_CHANNEL_1: { assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); /* Configure the Channel 1 in PWM mode */ TIM_OC1_SetConfig(htim->Instance, sConfig); /* Set the Preload enable bit for channel1 */ htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;//比较模式寄存器CCMR1的bit3位OC1PE置1,写入到CCR1的值在事件更新时,才会传到影子寄存器。清0则写入CCR1的值会马上起作用 /* Configure the Output Fast mode */ htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE;//配置CCMR1的bit2位,输出比较快速使能 htim->Instance->CCMR1 |= sConfig->OCFastMode; } break; //-------------------------------------------------------------------------------- void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) { uint32_t tmpccmrx = 0U; uint32_t tmpccer = 0U; uint32_t tmpcr2 = 0U; /* Disable the Channel 1: Reset the CC1E Bit */ TIMx->CCER &= ~TIM_CCER_CC1E;//关通道 CCER bit0清0 /* 读出三个寄存器的值 */ tmpccer = TIMx->CCER; tmpcr2 = TIMx->CR2; tmpccmrx = TIMx->CCMR1; /* Reset the Output Compare Mode Bits */ tmpccmrx &= ~TIM_CCMR1_OC1M;//复位CCMR1的bit6:4 tmpccmrx &= ~TIM_CCMR1_CC1S;//复制CCMR1的bit1:0 /* Select the Output Compare Mode */ tmpccmrx |= OC_Config->OCMode;//配置OC1M为 110 PWM1模式 /* Reset the Output Polarity level */ tmpccer &= ~TIM_CCER_CC1P;//配置输出极性 CCER的 CC1P位 tmpccer |= OC_Config->OCPolarity; if(IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1))//如果是定时器1的123通道,还要设置互补输出 { assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); /* Reset the Output N Polarity level */ tmpccer &= ~TIM_CCER_CC1NP; /* Set the Output N Polarity */ tmpccer |= OC_Config->OCNPolarity; /* Reset the Output N State */ tmpccer &= ~TIM_CCER_CC1NE; } if(IS_TIM_BREAK_INSTANCE(TIMx))//如果是定时器1,还要设置CR2的bit8 bit9 死区控制 { /* Check parameters */ assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); /* Reset the Output Compare and Output Compare N IDLE State */ tmpcr2 &= ~TIM_CR2_OIS1; tmpcr2 &= ~TIM_CR2_OIS1N; /* Set the Output Idle state */ tmpcr2 |= OC_Config->OCIdleState; /* Set the Output N Idle state */ tmpcr2 |= OC_Config->OCNIdleState; } /* 把设置好的值写入这4个寄存器 */ TIMx->CR2 = tmpcr2; TIMx->CCMR1 = tmpccmrx; TIMx->CCR1 = OC_Config->Pulse;//占空比 TIMx->CCER = tmpccer; }
流程图如下:
需要改变占空比的,直接调用
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,dutycycle);
改变寄存器CCR1,改变的值是立即生效还是下一个周期生效取决于CCMR1的OC1PE位
while (1) { while(dutycycle<100) { dutycycle+=10; __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,dutycycle); HAL_Delay(1); } while(dutycycle) { dutycycle-=10; __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,dutycycle); HAL_Delay(1); } }
版权声明:本文为CSDN博主 - D.luffy 的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/liangbin414/article/details/88707340
使用意法半导体最新版的STM32CubeMX配置工具创建STM32 微控制器(MCU)项目,将会更直观,更高效。STM32CubeMX v.5.0的最新设计的多面板GUI界面在不改变屏幕视图的情况下,能够让用户查看更多参数,完成更多任务,从而让优化MCU配置参数变得更加轻松自如,得心应手。
STM32CubeMX帮助用户从800多款STM32产品中选择最适合的产品,配置基本硬件功能,自动生成MCU初始化代码,开启嵌入式项目开发之旅。
用户可以利用功能强大的器件配置实用工具配置微控制器参数,包括可解决冲突的引脚选择器和时钟树设置的辅助,以及能够在早期准确评估能耗需求和节能机会的功耗计算器,还有用于配置外围设备和中间件堆栈的工具,例如,TCP / IP或USB协议栈,并支持参数约束动态验证。
配置完成后,STM32CubeMX会自动生成初始化代码,支持许多常用开发环境,包括适用于IAR-EWARM、Keil MDK-ARM、AC6-SystemWorkbench STM32系列或独立的GCC(GNU编译器集合)工具链项目。
STM32CubeMX是既可在主要PC操作系统上运行,也可通过Eclipse插件运行的独立软件。用户可以从 www.st.com/stm32cubemx 页面免费下载,还可以一起下载STM32Cube其它软件,包括专用硬件抽象层(HAL)中间件和代码示例。
在16年ST就推出了STM32F769I-DISCO开发板,功能搭配可算得上眼前为之一亮,无论是POE、SPDIF输入输出、MEMS麦克风、音频编解码器、还是TFT电容触摸LCD显示屏,各种器件与STM32F769NI这块芯片恰到好处搭配。这块开发板的厚重底蕴难以形容,搭配恰如其分,相得益彰,完美地与STM32F769NI这可主控芯片融合。
本章介绍STM32CubeMX的相关配置,实现使用STM32CubeMX建立基于STM32F769I-DISCO的工程。
1)选择Graphic Choice:
2)选择Graphic Choice对应参数
显示分辨率:800x480;
显示接口:DSI Command;
帧缓冲格式:24bpp-RGB888;
GFX RAM:External SDRAM32-Bit
GFX FLASH: External QuadSPI DDR FCPU/3
3)选择产品系列、产品线、封装
系列:SIM32F7
产品线:STM32F7x9
封装:TFBGA216
4)在MCU List中选择STM32F769NI
选择芯片后,点击上方的"Start Project"开始工程,在等待系统初始化后进入后边的步骤
5)在Pinout\SYS中配置Debug方式:
Debug:配置Serial Wire,分别接PA13、PA14
6)在Pinout\RTC中配置时钟源:激活RTC时钟源
7)在Pinout\RCC中配置HSE、LSE:
参考原理图,HSE:配置外部晶振;LSE:配置外部晶振。
8)在Clock Configuration配置系统时钟
时钟树上分别选择HSE、LSE,在HCLK处输入216MHz(最大频率)
9)配置LCD-TFT控制器、DSI主机及对应时钟树
LTDC显示模式配置最高的RTB888–DSI模式。根据原理图所示DSIHOST模式选择带TEPin的适配器模式:
并设置DSI_RESET所占用的PJ15
DSI的时钟树频率:TFT的最大频率值为62.5MHz。
LCD=TFT时钟树频率:计算方式 DSI通道速率*通道数/位每像素,
500Mbs*2/24=41.6666,约等于41.7MHz。
10)配置GUI所需的扩展内存(FMC方式,STemWin需要)
根据SDRAM选型和原图引脚配置,配置FMC的相关参数为如下:
SDCKE0+SDNE0(SDCKE1+SDNE1被其他功能占用,这里只能选KE0、NE0);
4M = 12bit 地址线;
BA0、BA1 均连接到SDRAM上,共4 *BANKS
32bits 数据位宽寻址;
启用32位访问方式。
11)配置GRAPHICS
第三方插件STemWin要用到CRC,先使能CRC;
使能STemWin,并选择显示接口方式LTDC-DSIHOST
12)工程小结及项目预览
完成以上配置后,一个基本图形环境搭建完成,TFBGA216引脚占用图如下,还是有很大的功能扩展空间;
功能参数配置,只选用了最基础的LTDC、DSI-Host、FMC、GPIO、NVIC功能,配置界面如下图:
经过简单的配置后,几乎不修改代码即可生成STemWin开发环境,以下为Hello World验证图,要到下图的效果还需要在STM32CubeMX上配置一些TFT屏幕控制器、DIS、内存、STemWin等设备相关参数。
原文作者是STM32中文社区用户:wolfgang2015
转自:STM32单片机