STM32单片机学习笔记(6):PWM波形产生

发布时间: 2024-09-02
来源: 电子工程世界

项目简介

利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第六部分针对STM32单片机内置TIM模块的PWM波形产生的学习和理解。


硬件模块

STM32F103R4


示波器

软件工具

CubMX

Proteus

KEIL

电路连接图

图片

工作流程

首先,在CubMX种设置号一些参数,选择TIM1定时器,按下图设置好工作模式。输出PWM的引脚是PB15引脚。

图片

然后再按下图设置好预分频和计数值

图片

最好设置好占空比,占空比=Pulse/Per,比如想要设置占空比为20%,而上面设置了计数值为1000,那么按照这个占空比,就照下图设置好Pulse为200即可。

图片

然后生成工程。

增加输出PWM的代码。

图片

出现问题了,上网查了一下好像是超出了单片机内部的资源。网上推荐的方法是直接换一个型号的32单片机,但是我不想用这种方法,后来我删掉一行有浮点运算的Printf函数就可以了,可能是printf用的太多了,太占内存。可以运行了,但是一开始还是没有PWM波形输出,于是我换了个通道,如下图。

图片

图片

Prescaler:分频值,可以设置为0

Counter Mode:计数模式

Counter Period:自动装载值

Auto-reload preload:使能自动装载功能

图片

Mode:PWM波模式

Pulse:计数比较值

CH Polarity:输出极性

输出的结果如下图,这是20%的

图片

然后改变占空比为50%

图片

输出波形

图片

至此,PWM模块完成。


程序代码

mian.c


int main(void)

{

  /* 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_ADC1_Init();

 // MX_USART1_UART_Init();

  MX_TIM1_Init();

  /* USER CODE BEGIN 2 */



  /* USER CODE END 2 */



  /* Infinite loop */

  /* USER CODE BEGIN WHILE */;

  HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);//开启PWM波形输出

  __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 500); //改变占空比,500/1000=50%



  while(1)

  {

    /* USER CODE END WHILE */




    /* USER CODE BEGIN 3 */

  }

  /* USER CODE END 3 */

}


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。