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

【NUCLEO-H533RE评测】+05 调试PWM

[复制链接]
〃聪聪哥哥 发布时间:2024-8-5 14:09

编译软件:MDK5.38a,调试器使用板载的ST-linkV3,

示波器:RIGOL-DS1022C

前言:在原项目基础在增加PWM输出功能

1:STM32 CUBE的软件配置,参考图纸可以看到,板载在的LED灯是PA5引脚,然后我们看到可以查看到该引脚,可以配置成定时器2 或者是定时器8的PWM输出引脚,这里我们使用定时器2作为该引脚的PWM输出功能。

如下图所示:设置PWM的基本配置信息,并且使能定时器输出功能。

图片1.png

配置定时器2的通道1,为PWM的输出引脚,并且映射到该引脚!

图片2.png

配置定时器2的预分频系数,计数值。。

图片3.png

2:软件编写步骤如下:

l 使能定时器2和相关IO口时钟。

l 使能定时器2时钟:__HAL_RCC_TIM2_CLK_ENABLE();

l 使能GPIOA时钟:__HAL_RCC_GPIOA_CLK_ENABLE();

l 初始化IO口为复用功能输出。

n HAL_TIM_MspPostInit

n GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

  这里我们是要把PA5用作定时器的PWM输出引脚,所以要重映射配置,

l 所以需要开启AFIO时钟。同时设置重映射。

l 初始化定时器:Prescaler,Period等:MX_TIM2_Init();

l 使能定时器,设置PWM开始输出功能 

调用函数如下:

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); l 不断改变比较值CCRx,达到不同的占空比效果

这里我再编写的函数做了两种不同的定时器输出PWM输出的应用

1:输出可变的频率,用来控制伺服电机或者步进电机,函数如下:

/ USER CODE BEGIN 1 /

void UpdataFreData(int value)

{

TIM_MasterConfigTypeDef sMasterConfig = {0};

TIM_OC_InitTypeDef sConfigOC = {0};

htim2.Instance = TIM2;

htim2.Init.Prescaler = 24;

htim2.Init.CounterMode = TIM_COUNTERMODE_UP;

htim2.Init.Period = value;

htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

if (HAL_TIM_OC_Init(&htim2) != HAL_OK)

{

Error_Handler(); }

sConfigOC.OCMode = TIM_OCMODE_PWM1;

sConfigOC.Pulse = htim2.Init.Period/2;

sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)

{

Error_Handler(); }

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); }

视频演示如下:

图片4.png

2:调节占空比输出不同的占空比:

void UpdataDutyData(int value)

{

TIM_MasterConfigTypeDef sMasterConfig = {0};

TIM_OC_InitTypeDef sConfigOC = {0};

htim2.Instance = TIM2;

htim2.Init.Prescaler = 24;

htim2.Init.CounterMode = TIM_COUNTERMODE_UP;

htim2.Init.Period = 1999;

htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

if (HAL_TIM_OC_Init(&htim2) != HAL_OK)

{

Error_Handler(); }

sConfigOC.OCMode = TIM_OCMODE_PWM1;

sConfigOC.Pulse = 1999 * value/100 ;

sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)

{

Error_Handler(); }

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); }

演示图片如下:

图片5.png

图片6.png

收藏 评论0 发布时间:2024-8-5 14:09

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版