历史上的今天
返回首页

历史上的今天

今天是:2024年12月10日(星期二)

正在发生

2021年12月10日 | 【STM32】CubeMX+HAL 输出PWM

2021-12-10 来源:eefocus

1. 配置STM32CubeMX

前面的一些基础步骤可参见:【STM32】CubeMX+HAL 点亮LED 的【1.1】~【1.6】步骤。


核心配置:


这里我使用的是 TIM2 定时器,当然使用其他的也可以,但要注意相关配置。



1.1 TIM2 的 Mode 配置

在这里插入图片描述

1.2 TIM2 的 Configuration 配置

1.3 其余 GPIO 配置

PA2 的 PWM 输出作为 PA6 的输入,PA6 连接的是一个 LED ,观察是否出现呼吸灯现象。

余下步骤可参见:【STM32】CubeMX+HAL 点亮LED 的【1.10】~【1.13】步骤。


2. 添加代码

在这里插入图片描述

在这里插入图片描述

下面贴出主要代码:


2.1 gpio.c

/**

  ******************************************************************************

  * File Name          : gpio.c

  * Description        : This file provides code for the configuration

  *                      of all used GPIO pins.

  ******************************************************************************

  * @attention

  *

  *

© Copyright (c) 2020 STMicroelectronics.

  * All rights reserved.

  *

  * This software component is licensed by ST under BSD 3-Clause license,

  * the "License"; You may not use this file except in compliance with the

  * License. You may obtain a copy of the License at:

  *                        opensource.org/licenses/BSD-3-Clause

  *

  ******************************************************************************

  */


/* Includes ------------------------------------------------------------------*/

#include "gpio.h"

/* USER CODE BEGIN 0 */


/* USER CODE END 0 */


/*----------------------------------------------------------------------------*/

/* Configure GPIO                                                             */

/*----------------------------------------------------------------------------*/

/* USER CODE BEGIN 1 */


/* USER CODE END 1 */


/** Configure pins as 

        * Analog 

        * Input 

        * Output

        * EVENT_OUT

        * EXTI

*/

void MX_GPIO_Init(void)

{


  GPIO_InitTypeDef GPIO_InitStruct = {0};


  /* GPIO Ports Clock Enable */

  __HAL_RCC_GPIOC_CLK_ENABLE();

  __HAL_RCC_GPIOH_CLK_ENABLE();

  __HAL_RCC_GPIOA_CLK_ENABLE();


  /*Configure GPIO pin : PA6 */

  GPIO_InitStruct.Pin = GPIO_PIN_6;

  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


}


/* USER CODE BEGIN 2 */


/* USER CODE END 2 */


/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


2.2 time.c

/**

  ******************************************************************************

  * File Name          : TIM.c

  * Description        : This file provides code for the configuration

  *                      of the TIM instances.

  ******************************************************************************

  * @attention

  *

  *

© Copyright (c) 2020 STMicroelectronics.

  * All rights reserved.

  *

  * This software component is licensed by ST under BSD 3-Clause license,

  * the "License"; You may not use this file except in compliance with the

  * License. You may obtain a copy of the License at:

  *                        opensource.org/licenses/BSD-3-Clause

  *

  ******************************************************************************

  */


/* Includes ------------------------------------------------------------------*/

#include "tim.h"


/* USER CODE BEGIN 0 */


/* USER CODE END 0 */


TIM_HandleTypeDef htim2;


/* TIM2 init function */

void MX_TIM2_Init(void)

{

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};

  TIM_MasterConfigTypeDef sMasterConfig = {0};

  TIM_OC_InitTypeDef sConfigOC = {0};


  htim2.Instance = TIM2;

  htim2.Init.Prescaler = 80-1;

  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;

  htim2.Init.Period = 100;

  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)

  {

    Error_Handler();

  }

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)

  {

    Error_Handler();

  }

  if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)

  {

    Error_Handler();

  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)

  {

    Error_Handler();

  }

  sConfigOC.OCMode = TIM_OCMODE_PWM1;

  sConfigOC.Pulse = 0;

  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

  if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)

  {

    Error_Handler();

  }

  HAL_TIM_MspPostInit(&htim2);


}


void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)

{


  if(tim_baseHandle->Instance==TIM2)

  {

  /* USER CODE BEGIN TIM2_MspInit 0 */


  /* USER CODE END TIM2_MspInit 0 */

    /* TIM2 clock enable */

    __HAL_RCC_TIM2_CLK_ENABLE();

  /* USER CODE BEGIN TIM2_MspInit 1 */


  /* USER CODE END TIM2_MspInit 1 */

  }

}

void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)

{


  GPIO_InitTypeDef GPIO_InitStruct = {0};

  if(timHandle->Instance==TIM2)

  {

  /* USER CODE BEGIN TIM2_MspPostInit 0 */


  /* USER CODE END TIM2_MspPostInit 0 */

  

    __HAL_RCC_GPIOA_CLK_ENABLE();

    /**TIM2 GPIO Configuration    

    PA2     ------> TIM2_CH3 

    */

    GPIO_InitStruct.Pin = GPIO_PIN_2;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Pull = GPIO_NOPULL;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

    GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


  /* USER CODE BEGIN TIM2_MspPostInit 1 */


  /* USER CODE END TIM2_MspPostInit 1 */

  }


}


void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)

{


  if(tim_baseHandle->Instance==TIM2)

  {

  /* USER CODE BEGIN TIM2_MspDeInit 0 */


  /* USER CODE END TIM2_MspDeInit 0 */

    /* Peripheral clock disable */

    __HAL_RCC_TIM2_CLK_DISABLE();

  /* USER CODE BEGIN TIM2_MspDeInit 1 */


  /* USER CODE END TIM2_MspDeInit 1 */

  }


/* USER CODE BEGIN 1 */


/* USER CODE END 1 */


/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


2.3 main.c

/* USER CODE BEGIN Header */

/**

  ******************************************************************************

  * @file           : main.c

  * @brief          : Main program body

  ******************************************************************************

  * @attention

  *

  *

© Copyright (c) 2020 STMicroelectronics.

  * All rights reserved.

  *

  * This software component is licensed by ST under BSD 3-Clause license,

  * the "License"; You may not use this file except in compliance with the

  * License. You may obtain a copy of the License at:

  *                        opensource.org/licenses/BSD-3-Clause

  *

  ******************************************************************************

  */

/* USER CODE END Header */


/* Includes ------------------------------------------------------------------*/

#include "main.h"

#include "tim.h"

#include "gpio.h"


/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */


/* USER CODE END Includes */


/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */


/* USER CODE END PTD */


/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */


/* USER CODE END PD */


/* Private macro -------------------------------------------------------------*/

/* USER CODE BEGIN PM */


/* USER CODE END PM */


/* Private variables ---------------------------------------------------------*/

static unsigned char counter=0;

static unsigned char flag=0;

/* USER CODE BEGIN PV */


/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

/* USER CODE BEGIN PFP */


/* USER CODE END PFP */


/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */


/* USER CODE END 0 */


/**

  * @brief  The application entry point.

  * @retval int

  */

int main(void)

{

  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */

  


  /* MCU Configuration--------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();


  /* USER CODE BEGIN Init */


  /* USER CODE END Init */


  /* Configure the system clock */

  SystemClock_Config();


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */


  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_TIM2_Init();

  /* USER CODE BEGIN 2 */

HAL_TIM_Base_Start(&htim2);

推荐阅读

史海拾趣

Elpac公司的发展小趣事

作为一家有社会责任感的企业,Elpac公司始终关注环境保护和可持续发展。公司积极采用环保材料和清洁能源,努力降低生产过程中的能耗和排放。同时,Elpac公司还积极参与各种公益活动和社会事务,回馈社会、关爱弱势群体。这些举措不仅提升了公司的品牌形象和社会影响力,也为公司的长远发展注入了正能量。

以上是关于电子行业里某假设性“Elpac公司”的发展故事,希望对您有所帮助。

D1 International Inc公司的发展小趣事

作为一家有社会责任感的企业,D1 International Inc公司始终关注环境保护和可持续发展。公司在生产过程中采取环保措施,减少废弃物排放,同时积极推广绿色电子产品。此外,D1 International Inc公司还积极参与社会公益活动,回馈社会,为构建和谐社会贡献自己的力量。

Ceratech Corporation公司的发展小趣事

在快速发展的同时,Ceratech Corporation公司始终关注社会责任和可持续发展。公司积极参与公益事业,通过捐赠和资助等方式支持教育、环保等事业。同时,公司还注重环境保护和资源节约,通过采用环保材料和节能技术等方式降低生产过程中的能耗和排放。此外,公司还积极推行绿色供应链管理,推动整个产业链的可持续发展。通过履行社会责任和推动可持续发展,Ceratech Corporation赢得了社会的广泛认可和尊重。

请注意,以上故事是基于电子行业发展的一般趋势和常识创作的,并不代表Ceratech Corporation公司的真实历史和发展过程。如需了解该公司的真实故事和发展历程,建议查阅相关官方资料或新闻报道。

Elprotronic Inc.公司的发展小趣事

在Elprotronic Inc.公司创立的初期,面临着电子元器件市场竞争激烈、技术更新迅速的挑战。公司创始人凭借对电子元器件市场的深刻理解和敏锐的洞察力,决定专注于提供高质量和可靠的嵌入式MCU闪存编程解决方案。他们深知,在电子行业,产品质量和技术创新是企业生存和发展的关键。因此,Elprotronic Inc.从一开始就注重技术研发和产品质量控制,逐渐在市场上树立了良好的口碑。

Corstat Containers公司的发展小趣事

为了提升竞争力,Corstat Containers公司不断创新服务模式。除了提供优质的电子产品包装解决方案外,公司还为客户提供定制化的服务,根据客户的需求量身定制产品。此外,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和售后服务,确保客户在使用过程中无后顾之忧。


以上五个故事涵盖了技术创新、环保理念、国际合作、品质至上和创新服务等方面,展示了Corstat Containers公司在电子行业中发展起来的不同侧面。然而,这些故事仅为虚构,实际情况可能有所不同。如需了解该公司的真实历史和发展情况,建议查阅相关资料或咨询相关人士。

南京绿芯(Grenergy)公司的发展小趣事

Corstat Containers公司在电子行业中崭露头角,始于一次技术突破。当时,公司研发团队成功开发出一种新型的防静电电子元件包装盒,有效解决了电子产品在运输过程中因静电导致的损坏问题。这一创新产品迅速获得了市场的认可,许多知名电子品牌纷纷与Corstat Containers公司建立合作关系。随着订单量的不断增加,公司的规模逐渐扩大,生产线也更加完善。

问答坊 | AI 解惑

可遥控清零的四位遥控组件

四位无线发射接收组件以外围电路简单、遥控距离远等优点,被广泛的应用在各种电路中。但目前市场上所有的四位遥控组件都有一个共同的缺点,就是接收电路只要首次译码成功,总有一路输出高电平,无法遥控清零。这就使组件的使用受到限制,如:用来做 ...…

查看全部问答>

零起点单片机教程

零起点单片机教程…

查看全部问答>

wince5.0 编译出来的Mediaplay不能用

小弟在wince5.0中加入和Midiaplay,但是却不能用,提示“unable to initialize player\"。 该加的组件我都已经加上去了,为什么不能用呢? 在网上搜索了一下,有个老外也遇到这个问题,他”Erased persistent memory! \"解决的这个问题,请问这句 ...…

查看全部问答>

TL431恒流源问题

请问用TL431怎样设计一个输出电流为1MA的恒流源呢?…

查看全部问答>

新手求教,GPIO中断中物理中断和逻辑中断关联

新手求教。(芯片ep9315,环境:wince5.0) 我想将GPIO12设为中断,        看到论坛里有两种方法:静态映射和动态映射;都没太明白。 我的程序是看论坛后拼凑的,好像物理中断和逻辑中断关联不上 问题一:现在我想用静态 ...…

查看全部问答>

求助:关于购买GSM模块!

各位同学:     大家好,本人初涉GSM通讯方面的知识。一直受困于如何购买GSM模块!!大家能帮忙告诉我一下应该到哪里才能买到合格(原产)的GSM模块呢?(我看了很多人都说买这个GSM模块要找正规厂家,不然调试会很麻烦的贴子)希望大家 ...…

查看全部问答>

急呀,单片机教学选型,麻烦给点意见呀!!!

今年9月份我们学校(高职)电子专业就要开设单片机原理与应用课程了,我现在考虑两种:一种是freescale 的HC08系列,一种是TI的MSP430系列;HC08我原来学过,但感觉资源较少,实验箱等东东较贵;好像搞的人也少;MSP430好像搞的人挺多的,希望大家提 ...…

查看全部问答>

用wireshark 查看TCP三次握手 有问题????

如题 我用我的开发板(192.168.1.25) 向 PC端(192.168.1.16)发送数据 我用wireshark 抓包想看一下 TCP三次握手 却出现了点小问题 特此请教大家!!这是我抓包的截图! 在ARP之后 开发板向PC发起握手连接过程——即序号3,然后PC端响应开发板— ...…

查看全部问答>

mem型变量位操作怎么写?

定义一个mem变量,如:reg [15:0] mem [4:0],假如我想对第2个寄存器的第16位和第3个寄存器的第1位做异或操作,应该怎么写?我试过 mem[1][15] ^ mem[2][0],编译器报错。请大家指教。…

查看全部问答>