
编译软件:MDK5.38a,调试器使用板载的ST-linkV3, 示波器:RIGOL-DS1022C 前言:在原项目基础在增加PWM输出功能 1:STM32 CUBE的软件配置,参考图纸可以看到,板载在的LED灯是PA5引脚,然后我们看到可以查看到该引脚,可以配置成定时器2 或者是定时器8的PWM输出引脚,这里我们使用定时器2作为该引脚的PWM输出功能。 如下图所示:设置PWM的基本配置信息,并且使能定时器输出功能。 配置定时器2的通道1,为PWM的输出引脚,并且映射到该引脚! 配置定时器2的预分频系数,计数值。。 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); } 视频演示如下: 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); } 演示图片如下: |
STM32H7的TCM,SRAM等五块内存基础知识
STM32H7的TCM,SRAM等五块内存基础知识
简单了解一下STM32H7的BDMA
【STM32N6570-DK评测】2.最简点灯
【实测教程】STM32CubeMX-STM32L4之研究(ADC)
【STM32N6570-DK评测】7.探索STM32 ISP IQTune
【STM32MP257-DK】01开发板开箱、ST MPU 生态资源使用、环境搭建以及镜像更新
【下载问题解决】关于ST官网下载软件问题解决
兔哥的初代M33【002】-H503Nucleo 内部flash操作
【STM32N6570-DK评测】3.CubeMX关于DCMIPP和CSI的BUG整理及摄像头使用