STM32CubeMX

使用STM32处理器的用户,可以通过STM32Cube工具生成基础工程,免费评估功能安全操作系统Flexible Safety RTOS二进制库了。

STM32Cube生态系统包含软件工具和嵌入式软件库,提供了一套完整的PC软件工具,解决完整项目开发周期的所有需求;包含在STM32微控制器和微处理器上运行的嵌入式软件块,如Flexible Safety RTOS。

1.png

图1

通过在STM32CubeMX工具添加STM32Cube扩展包集成嵌入式软件块,简化创建软件包工程的过程。

软件版本

在Flexible SafetyRTOS集成和应用的开发过程中,我们使用的开发环境版本信息如下:

STM32Cube MX v6.11.1

STM32Cube IDE v1.15.1

旧的软件版本可能无法正常工作,为了避免这种情况,我们建议更新本地STM32Cube环境到最新版本。

安装扩展包

在STM32CubeMX用户手册(https://www.st.com/resource/en/user_manual/um1718-stm32cubemx-for-stm32-configuration-and-initialization-c-code-generation-stmicroelectronics.pdf )中详细解释了STM32Cube扩展包的安装。本节介绍如何激活中间件软件Flexibe Safety RTOS(FS-RTOS)。

1 通过https://www.embedded-office.net/download/public/pack/st/EmbeddedOffice.I-CUBE-FS-RTOS.1.0.1.pack  链接,下载软件包。

2 在STM32CubeMX中,选择Help->Manage embedded software packages,点击From Local…,阅读并接受License Agreement评估许可协议,开始安装,并在安装完成后关闭Embedded Software Package Manager。

2.png

图2

FS-RTOS软件包使用

基于MCU或评估板创建STM32CubeMX工程后,通过单击“Software Packs”选项卡并选择“Select Components”,如图3所示

3.png

图3

在打开的“Software Packs Component Selector”窗口,找到安装的“EmbeddedOffice.I-CUBE-FS-RTOS”组件。打开组件下拉菜单,设置FS-RTOS为“Eval”,然后选择一个应用程序,例如“Blinky”,单击Ok按钮。

4.png

图4

硬件设置

为了使项目正常工作,需检查下列设置:

1 在System Core->RCC->High Speed Clock中,使用外部晶振。

2 确保在Clock Configuration选项卡中将系统时钟设置为合理的值(例如HCLK设置为max)。

3 在生成的应用程序中,使用SysTick作为RTOS时基,因此,HAL库需使用另外的时钟源。可以通过System Core->SYS->Timebase Source,修改HAL时基为其它定时器(如Tim1)或禁止HAL时基(选择None)。

注:如果禁用HAL时基,用户需要在RTOS时钟节拍处理回调函数App_TimeTickHook()中调用HAL_IncTick()函数,回调函数位于文件Blinky/App/app_blinky_callback.c中。

4 至少需要选择和配置一个GPIO输出引脚,该GPIO输出引脚用于应用参数设置。

在生成的演示应用前,我们可能还需到System Core->NVIC中配置中断的优先级,以确保系统正常工作。

配置Flexible Safety RTOS

在“Pinout&Configuration”选项卡中,在“Middleware and Software Packs”类别中找到I-CUBE-FS_RTOS组件,配置项目:

1 选择Flexible Safety RTOS组件:I-CUBE-FS_RTOS。

2 将Flexible Safety RTOS集成到您的项目中(无需额外的参数设置)。

3 生成选定的演示应用程序(例如Blinky)。

4 指定与应用程序相关的外设,以生成所需的BSP函数。在图5中,必须为LED选择配置好的GPIO输出引脚。

5.png

图5

代码生成

最后,我们在Project Manager选项卡中为代码生成执行一些基本配置:

Project name:项目名称。

Project Location:工作空间目录,保存项目。

Application Structure:Advanced(不勾选Do not generate the main())。

Toolchain/IDE:选择工具链STM32CubeIDE(或EWARM…),选中Generate Under Root。

6.png

图6

其它设置保持不变。

项目结构

使用GENERATE CODE按钮,开始生成项目。STM32CubeMX生成的项目结构如下:

7.png

图7

您可以在ST定义的目录树中找到Flexible Safety RTOS评估包,位于Middleware和Blinky目录。

RTOS集成

当使用STM32Cube扩展包生成项目后,Flexible Safety RTOS集成已经完成。如果你想要手动集成Flexible Safety RTOS到现有项目中,需要在生成的回调函数文件Blinky/App/app_blinky_callback.c中添加RTOS系统滴答处理:

8.png

图8

默认配置中OS_TICKS_PER_SEC为1000,因此内部SysTick计时器每秒会产生1000个系统滴答中断。

诊断

内存异常处理

如果更改例程并进行实验,可能会遇到内存异常的问题。在这种情况下,我们建议在生成的项目中添加一个访问错误诊断处理程序。

在生成的中断处理程序文件Core/Src/_it.c中,在函数MemManage_Handler()中增加访问违规信息收集:

9.png

图9

访问位于Blinky/App/app_blinky_callback.c中的故障回调函数,获取下列信息:

info->CurPrio:哪个任务执行导致内存冲突。

info->IAddress:发生异常的指令地址。

info->DAddress:写保护的数据地址

10.png

图10

通过以上操作,我们完成了RTOS集成工作。接下来,可以深入Flexible SafetyRTOS组件的文件结构(https://www.embedded-office.net/eval/manual/latest/os/file.html#file-str...),开始构建应用。

Flexible Safety RTOS是基于μC/OS-II扩展的功能安全预认证操作系统,麦克泰技术是Flexible Safety RTOS在中国的代理商,具有超过20年嵌入式实时操作系统和功能安全软件服务的市场、服务和培训经验。

来源:麦克泰技术

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 26

感谢STM32CubeMX团队的支持,RT-Thread Nano现已成功上线STM32CubeMX。本文将详细介绍如何快速上手RT-Thread Nano,并指导大家在STM32CubeMX上进行项目配置和开发。一起来看看吧!

01、准备工作

软件准备:

硬件准备:

  • STM32 开发板(Cortex-M系列,这里我们以STM32F411RCT6 芯片作为演示)

02、安装 RT-Thread Nano v4.1.1 软件包

首先打开 STM32CubeMX 软件,进入主页面后找到右侧的嵌入式软件包选项(Install or remove embedded software packages),点击 [ INSALL / REMOVE ] :

1.png

在弹出的 Embedded Software Packages Manager 界面的上方导航栏中找到 RT-Thread 厂商 —> [ RealThread ] ,展开 X-CUBE-RT-Thread_Nano ,勾选中 RT-Thread Software Components (Size: 5.50 MB) ,并且点击 Install :

2.png

同意条款并点击 Finish :

3.png

注:此处如果没有找到 RealThread 厂商选项,可点击下方 Refresh 按钮更新资源包索引后开始下载,下载成功后 RT-Thread Software Components 4.1.1 呈深绿色方形显示,关闭窗口后开始工程创建。

03、创建 STM32CubeMX 项目工程

创建工程可以选择基于 MCU 或 Board,这里我们以创建 MCU 作为教学演示,点击 ACCESS TO MCU SELECTOR ,在左上角的 Commercial Part Number 中输入芯片型号,这里我的芯片型号为 STM32F411RCT6 ,选中对应MCU后点击右上角 Start Project 。

4.png

04、芯片配置

首先勾选 RT-Thread Nano v4.1.1 软件包,依次点击 Software Packs-> Select Components,并找到 RealThread.X-CUBE-RT-Thread_Nano 4.1.1 一栏,根据开发需求勾选配置项,其中 kernel 和 libcpu 为必选项,这里我们选择 kernel、shell 和 ibcpu 三个配置项后点击 OK:

5.png

在左侧导航栏中找到 RT-Thread Nano 软件包,同时在 Mode 一栏中使能 RTOS RT-Thread,接着我们在 Parameter Settings 中进行内核配置,这一步我们保持默认即可,同时往下翻找到 Finsh Configuration,使能 Finsh组件:

6.png

为了给 Finsh 组件提供串口设备,需要我们勾选一个串口,点击左侧功能栏 Connectivity —> USART1,设置串口模式为异步:

7.png

选择 System Core —>SYS,将 Debug 选项配置为 Serial Wire:

8.png

在 RT-Thread 中重新定义了`HardFault_Handler`, `PendSV_Handler`, `SysTick_Handler`中断函数。为避免重复定义,在生成项目之前,请取消选择中断配置中的三个中断函数(对应注释了的选项`Hard fault interrupt`、`Pendable request`、`Time base: System tick timer`)

9.png

点击 Project Manager,填写项目名称,并修改 Toolchain / IDE 为 MDK-ARM,最后生成工程文件(在点击生成工程后会提示 RTOS 时基源的修改警告,点击 Yes 即可)

10.png

05、工程配置

1.概述

打开 MDK 工程后,工程目录下会生成几个 Middlewares Group,如下所示:

11.png

2.Finsh组件配置

打开 Middlewares/RT-Thread/RTOS/kernel 目录下的 board.c 文件,修改 uart_init() 函数中串口号,该串口号默认为 USART1,需要根据实际在 CubeMX 中配置的串口进行修改。

12.png

3.主函数配置

在 main.c 中包含头文件 `#include`,同时在 main 函数的 while(1) 中定义延时,以便 Finsh 和其他线程得到系统调度:

13.png

14.png

4.观察现象

在 MDK 中烧录程序后打开串口助手,复位开发板查看终端运行情况:

15.png

到这里,RT-Thread Nano v4.1.1 就成功运行起来了。

06、内存堆初始化

系统内存堆的初始化是通过 board.c 中的 rt_hw_board_init() 函数实现的,如果需要启用内存堆可通过宏定义 RT_USING_HEAP 实现,RT-Thread Nano 默认不开启内存堆功能。一旦 RT_USING_HEAP 被启用,系统会默认使用一个数组作为堆,堆的起始地址和结束地址作为参数传递给堆初始化函数 rt_system_heap_init(),该函数在 rt_hw_board_init() 中调用。

如果不希望使用数组作为动态内存堆,可以使用 RAM 的 ZI 段的末尾作为 HEAP 的起始地址(需要确保它与链接脚本对应上),并使用RAM的结束地址作为 HEAP 的结束地址,代码实现如下所示:

16.png

17.png

07、其它说明

RT-Thread 的线程创建、信号量、互斥锁的使用需要配置内存管理机制,RT-Thread Nano 允许配置使用小内存管理算法,如需在 Cubemx 中进行相关配置,请打开工程的 CubeMX 执行文件,使能如下选项:

18.png

> 注意:在使用RT-Thread Nano v4.1.1 CubeMX软件包时请阅读各个配置项的参数说明,部分配置项存在依赖关系,需根据说明进行配置。

具体的RT-Thread nano v4.1.1配置使用教程可点击此处链接参考视频。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 126

本文档介绍如何使用STM32CubeMX创建LoRa节点的应用。

详阅请点击下载《STM32WL使用STM32CubeMX创建LoRa节点应用》

相关阅读:
【资料下载】STM32G4市场和特性篇
【资料下载】STM32WL硬件简介
【资料下载】STM32WL软件简介
【资料下载】LoRa与LoRaWAN介绍
【资料下载】STM32WL LoRa例程介绍

来源:意法半导体STM
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 49

【编者按】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环境搭建。

首先感谢申请到ST的最新最潮的开发板,本次把玩的开发板是B-U585I-IOT02A,这款开发板的特色之处就是低功耗与M33内核,低功耗参数如下:

“基于STM32U5

M33内核是基于M4内核基础上进行的功能拓展,主要具有TrustZone安全优势,针对物联网产品的一颗MCU。而且B-U585I-IOT02A的主频高达160MHz,闪存的2兆字节和SRAM的786千字节的大小,完全可以装下应用代码。

接下来介绍一下B-U585I-IOT02A的硬件部分。

“基于STM32U5

包装还算是中规中矩,使用静电袋防止硬件受损,还是很不错的。

“基于STM32U5

开发板的正面。正面可以看到外设很多,有WiFi,蓝牙,存储也有,而且一般接口都引出了,十分方便,用户到手即用。

“基于STM32U5

开发板背面,有一颗F723,这颗料是ST-LINK V3,速度比V2可好太多,而且价格还不贵,嘿嘿。

“基于STM32U5

B-U585I-IOT02A的蓝牙模块特写,有时间一定要玩玩这部分。

接下来讲讲如何使用CubeMX进行对B-U585I-IOT02A进行硬件配置,CubeMX我之前安装过,但是没用过,知道这个软件很奈斯,可以可视化配置ST的MCU,然后还可以生成代码,但是之前都是使用STM32的标准库习惯了,突然使用HAL还有些不适应。这次就打破这个隔阂,学习一下新东西。

首先说一下,我电脑创建用户的时候,用了中文名字,而且安装CubeMX的时候选择了默认,所以在使用CubeMX的时候出现了一些问题,所以,如果你的电脑用户也是中文名称的时候,建议把CubeMX改一下位置,如下图所示。

“基于STM32U5

首先,选择Updater Settings,然后选择Repository Folder 储存库文件夹,如下图所示,选择一个非中文路径即可。

“基于STM32U5

通过以上操作,就可以解决中文路径下固件包安装不上的问题了。

接下来就可以愉快的使用CubeMX了,CubeMX开发之前需要下载固件包也就是从Manage embedded software packages中进行选择我们要开发的主控芯片型号。

“基于STM32U5

由于本次是开发B-U585I-IOT02A,所以选择STM32U5。(Ps:我之前安装过,所以会是绿色方块,如果没安装过应该是白色方块)

“基于STM32U5

安装完成之后选择新建工程,选择好芯片,就可以进行管脚配置了,如下图所示。

“基于STM32U5

管脚配置要知道外设都接了哪个IO,本次先点个灯,发现开发板的LED是PH6和PH7,设置好这俩IO为输出模式即可,也可以设置其名称,这个名称会在程序中体现出来。时钟方面先默认即可,接下来配置代码输出部分,设置一下工程名字,工程存储路径还有工具链,本次我使用的是MDK开发,所以工具链这块选择MDK-ARM。

“基于STM32U5

都配置好之后,选择generate code,创建代码即可。

“基于STM32U5

创建好的代码,找到其路径,就可以看到有MDK的工程,直接打开。

“基于STM32U5

值得注意的是,自己写的用户代码,需要加载到/* USER CODE BEGIN 3 */这种注释下面,否则当更新CubeMX之后,自己写的应用代码可能被优化没了。

最后,点灯成功,也算是把CubeMX用了起来,奈斯!!!下面是点灯的照片,每500ms闪烁一次。

“基于STM32U5

“基于STM32U5

最后附上工程,有兴趣的可以玩一玩。点击下载:https://doc.weixin.qq.com/txdoc/word?docid=w2_AKcAPgZcANg8qr68HFRSkORsleAfC&scode=AOgA3QdlAAcdlmZjl0AKcAPgZcANg&type=0

来源:STM32论坛网友yangjiaxu 版权归原作者所有
直接转载来源:STM32
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 195

针对STM8同样也有一款工具STM8CubeMX,看到一个技术交流群问了这一个问题:STM8CubeMX 和 STM32CubeMX 功能一样吗?

前几年没有出现“缺芯”的时候,STM8的出货(需求)量其实很大,在2017年的时候,ST官方针对STM8推出STM8CubeMX。

STM8CubeMX介绍

先看一下STM8CubeMX界面:

“STM8CubeMX和STM32CubeMX功能一样吗?"

STM8CubeMX是在2017年推出来,方便STM8开发者使用的一套图形化工具,看到以上STM8CubeMX界面,相信关注我的朋友中,学习STM32的朋友都非常熟悉。

简单来说:STM8CubeMX是一个图形工具,它可以非常容易地配置STM8微控制器并生成相应的配置报告,方便软件、硬件工程师查阅配置信息。

比如:简单的配置STM8S103

“STM8CubeMX和STM32CubeMX功能一样吗?"

生成一份相应的报告,比如:引脚配置报告:

“STM8CubeMX和STM32CubeMX功能一样吗?"

还有芯片信息,时钟树配置、功耗计算等,如果你还在使用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功能一样吗?"

你如果开发过相对大一点的项目,特别是使用引脚比较多的时候,很容易搞混引脚是否被使用、引脚功能是否被重定义等。

有了这个图形化工具(且能生成引脚报告),就能一目了然引脚资源使用情况。

下载安装

STM8CubeMX 和 STM32CubeMX下载安装方法类似,需要提前JRE环境的支持。

STM8CubeMX地址:
https://www.st.com/en/development-tools/stm8cubemx.html

JRE地址:
https://www.java.com/zh-CN/download/

来源:嵌入式专栏
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 143

一、配置定时器为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

围观 584

使用意法半导体最新版的STM32CubeMX配置工具创建STM32 微控制器(MCU)项目,将会更直观,更高效。STM32CubeMX v.5.0的最新设计的多面板GUI界面在不改变屏幕视图的情况下,能够让用户查看更多参数,完成更多任务,从而让优化MCU配置参数变得更加轻松自如,得心应手。

STM32CubeMX帮助用户从800多款STM32产品中选择最适合的产品,配置基本硬件功能,自动生成MCU初始化代码,开启嵌入式项目开发之旅。

用户可以利用功能强大的器件配置实用工具配置微控制器参数,包括可解决冲突的引脚选择器和时钟树设置的辅助,以及能够在早期准确评估能耗需求和节能机会的功耗计算器,还有用于配置外围设备和中间件堆栈的工具,例如,TCP / IP或USB协议栈,并支持参数约束动态验证。

配置完成后,STM32CubeMX会自动生成初始化代码,支持许多常用开发环境,包括适用于IAR-EWARMKeil MDK-ARMAC6-SystemWorkbench STM32系列或独立的GCC(GNU编译器集合)工具链项目。

STM32CubeMX是既可在主要PC操作系统上运行,也可通过Eclipse插件运行的独立软件。用户可以从 www.st.com/stm32cubemx 页面免费下载,还可以一起下载STM32Cube其它软件,包括专用硬件抽象层(HAL)中间件和代码示例。

围观 379

页面

订阅 RSS - STM32CubeMX