打印
[STM32H5]

【STM32 Nucleo-64 测评】基于通用定时器产生PWM

[复制链接]
437|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yinxiangxv 于 2024-8-13 18:53 编辑

首先还是按照一般的 流程,用cube mx进行代码的生成:
选择相关芯片,进行相关时钟的配置,然后在定时器的通道,并使能相关的引脚,使其产生pwm信号。
具体操作过程和代码如下:

可以根据自己的需要开启调试接口

关于系统时钟,可以采用默认的,也可以自行设置一下,hclk设置为250也可以.

在tim.c文件中实现相关的函数:
/* 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);
                }

               
               
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);
}
/* USER CODE END 1 */
并在头文件中进行声明
最后在main.c中进行调用


tim2_pwm.rar

6.53 MB

使用特权

评论回复
沙发
而服务器人| | 2024-8-14 15:10 | 只看该作者
确保TIM2的时钟源正确配置,Prescaler、Period、Pulse等设置是否符合预期。HCLK设置为250可能需要确保系统时钟配置匹配。

使用特权

评论回复
板凳
狄克爱老虎油| | 2024-8-17 23:41 | 只看该作者
不开调试是不是下载一次就不能用了

使用特权

评论回复
地板
yinxiangxv|  楼主 | 2024-8-26 16:49 | 只看该作者
嗯 我的好好看看手册,但是 有没有群,技术群啊 ,方便交流

使用特权

评论回复
5
yinxiangxv|  楼主 | 2024-8-26 16:49 | 只看该作者
而服务器人 发表于 2024-8-14 15:10
确保TIM2的时钟源正确配置,Prescaler、Period、Pulse等设置是否符合预期。HCLK设置为250可能需要确保系统 ...

嗯 我的好好看看手册,但是 有没有群,技术群啊 ,方便交流

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

296

帖子

0

粉丝