你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用CubMX和Proteus学习STM32单片机(六)------PWM波形产生

[复制链接]
STMCU小助手 发布时间:2022-12-31 19:23
项目简介
        利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第六部分针对STM32单片机内置TIM模块的PWM波形产生的学习和理解。

硬件模块
        STM32F103R4
        示波器

软件工具
        CubMX
        Proteus
        KEIL

电路连接图
        
(2MCQ7[4~K7O00MT9Q{8OT6.png

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

9R~GDH0(5_3J}KE~C$AN{`O.png

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

$JIALBXFA0Q@3OF6[XFSTHK.png

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

(%SAZ)TG8~{XGK6@N@CJM5U.png

然后生成工程。

增加输出PWM的代码。

JLTKE[Y$FDLMZVQN$~Y8LIV.png

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

NG98W5W9GX)62`H98(X@@NP.png

H_O06W4S$Z}2S_Z(CAF4PLT.png


Prescaler:分频值,可以设置为0
Counter Mode:计数模式
Counter Period:自动装载值
Auto-reload preload:使能自动装载功能

`SMETA[YIZ6W)406(GG1Y0Q.png

Mode:PWM波模式

Pulse:计数比较值

CH Polarity:输出极性

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

1]WZ65]P4)QM@IQ)D}VXFX0.png

然后改变占空比为50%

TTF6484BS@M7LYUG7}M}6_0.png

输出波形

L28XBZG)J$@ZYMXE_@_JV0V.png

至此,PWM模块完成。

程序代码
        mian.c
  1. int main(void)
  2. {
  3.   /* MCU Configuration--------------------------------------------------------*/

  4.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  5.   HAL_Init();

  6.   /* USER CODE BEGIN Init */

  7.   /* USER CODE END Init */

  8.   /* Configure the system clock */
  9.   SystemClock_Config();

  10.   /* USER CODE BEGIN SysInit */

  11.   /* USER CODE END SysInit */

  12.   /* Initialize all configured peripherals */
  13.   MX_GPIO_Init();
  14. //  MX_ADC1_Init();
  15. // MX_USART1_UART_Init();
  16.   MX_TIM1_Init();
  17.   /* USER CODE BEGIN 2 */

  18.   /* USER CODE END 2 */

  19.   /* Infinite loop */
  20.   /* USER CODE BEGIN WHILE */;
  21.         HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);//开启PWM波形输出
  22.         __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 500); //改变占空比,500/1000=50%

  23.   while(1)
  24.   {
  25.     /* USER CODE END WHILE */


  26.     /* USER CODE BEGIN 3 */
  27.   }
  28.   /* USER CODE END 3 */
  29. }
复制代码

作者:jxjajl

收藏 评论0 发布时间:2022-12-31 19:23

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版