#include "main.h" // 确保包含了所有必要的头文件
TIM_HandleTypeDef htim2;
uint16_t dt; // 定义用于设置占空比的变量
// 初始化TIM2的PWM功能
static void MX_TIM2_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
htim2.Instance = TIM2;
htim2.Init.Prescaler = 16 - 1; // 预分频器设置
htim2.Init.CounterMode = TIM_COUNTERMODE_UP; // 向上计数模式
htim2.Init.Period = 999; // PWM周期
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
{
Error_Handler(); // 初始化失败处理
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
{
Error_Handler(); // 同步配置失败处理
}
sConfigOC.OCMode = TIM_OCMODE_PWM1; // PWM模式1
sConfigOC.Pulse = 500; // 初始占空比
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; // 高电平有效
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
{
Error_Handler(); // PWM通道配置失败处理
}
HAL_TIM_MspPostInit(&htim2); // 调用MspPostInit函数
}
// 主函数
int main(void)
{
HAL_Init(); // 初始化HAL库
SystemClock_Config(); // 配置系统时钟(该函数应在其他地方定义)
MX_GPIO_Init(); // 初始化GPIO(该函数应在其他地方定义)
MX_TIM2_Init(); // 初始化TIM2
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4); // 启动PWM输出
while (1)
{
// 增加占空比
for (dt = 1; dt < 500; dt++)
{
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, dt); // 设置占空比
HAL_Delay(1); // 延时1毫秒(注意:这里使用了HAL_Delay而不是delay_ms)
}
// 减少占空比
for (dt = 499; dt > 0; dt--)
{
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, dt); // 设置占空比
HAL_Delay(1); // 延时1毫秒
}
// 可以在这里添加其他用户代码
MX_APPE_Process(); // 假设这是你的应用处理函数
}
}
// 错误处理函数(应在其他地方定义)
void Error_Handler(void)
{
// 用户可以在这里添加自己的错误处理代码
while (1)
{
// 停止在这里
}
}
// 其他必要的初始化函数(如SystemClock_Config和MX_GPIO_Init)应在其他地方定义新建NUCLEO-WBA55MX工程,并设置好定时器的PWM输出功能:

设置好后,点击生成KEIL工程与版本目录:
![1737265363693629.png 5W)62LKL]~I~H[}$(TSEQ}K.png](http://uphotos.eepw.com.cn/1470407115/pics/1737265363693629.png)
配置PWM2通道4:

GPIO口为PA6:

PA6引脚连接图:

KEIL定时器2通道4使能:

我要赚赏金
