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

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

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

硬件模块
        STM32F103R4

        示波器

软件工具
        CubMX

        Proteus

        KEIL

电路连接图

NSOTM3M7822I~G]FX`V0KZ7.png


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

TA@H9{PW]Z_VRXH6B]J{R.png

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

}AE0]XHC_OLLRLB79}]RXO1.png

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

LBE145KB5}E`AD0274MSCDH.png

然后生成工程。

增加输出PWM的代码。

K6AC~`MS7KRW5LRI8A6T3`P.png

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

}E%EI8~)KGTDCWX9(RJG)0R.png

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

Counter Mode:计数模式

Counter Period:自动装载值

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

)$H34L1B}B_`0OBN4ZT4UF0.png

Mode:PWM波模式

Pulse:计数比较值

CH Polarity:输出极性

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

O{GGM9MQUPJH4W`DHCCB5YB.png

然后改变占空比为50%

_0U@PO3G{4`HXF5~A8T12$Q.png

输出波形

S)KN%]6}UYI7]6SK]W7[W[Y.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  bilibili

收藏 评论0 发布时间:2022-11-16 15:04

举报

0个回答

所属标签

相似分享

官网相关资源

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