备案号放网站下面居中,怎么样制作网站,搜狗短链接生成,网站建设_制作_设计HAL STM32 定时器PWM DMA输出方式 #x1f9e8;遗留问题#xff1a;当配置RCR重复计数器#xff0c;配置为2时#xff0c;在定义了3组PWM参数情况下#xff0c;只能输出第二组参数的PWM波形。#xff08;HAL_TIM_PWM_Start_DMA(htim1, TIM_CHANNEL_1, aCCValue_Buff… HAL STM32 定时器PWM DMA输出方式 遗留问题当配置RCR重复计数器配置为2时在定义了3组PWM参数情况下只能输出第二组参数的PWM波形。HAL_TIM_PWM_Start_DMA(htim1, TIM_CHANNEL_1, aCCValue_Buffer, 3)设置其它计数值则没有问题。如果RCR重复计数器为2DMA配置2组PWM参数也没有问题。HAL_TIM_PWM_Start_DMA(htim1, TIM_CHANNEL_1, aCCValue_Buffer, 2)。
void MX_TIM1_Init(void)
{/* USER CODE BEGIN TIM1_Init 0 *//* USER CODE END TIM1_Init 0 */TIM_ClockConfigTypeDef sClockSourceConfig {0};TIM_MasterConfigTypeDef sMasterConfig {0};TIM_OC_InitTypeDef sConfigOC {0};TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig {0};/* USER CODE BEGIN TIM1_Init 1 *//* USER CODE END TIM1_Init 1 */htim1.Instance TIM1;htim1.Init.Prescaler 84-1;htim1.Init.CounterMode TIM_COUNTERMODE_UP;htim1.Init.Period 10000;htim1.Init.ClockDivision TIM_CLOCKDIVISION_DIV1;htim1.Init.RepetitionCounter 3;//配置2则只能输出一组pwm波形htim1.Init.AutoReloadPreload TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(htim1) ! HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(htim1, sClockSourceConfig) ! HAL_OK){Error_Handler();}if (HAL_TIM_PWM_Init(htim1) ! HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(htim1, sMasterConfig) ! HAL_OK){Error_Handler();}sConfigOC.OCMode TIM_OCMODE_PWM1;sConfigOC.Pulse 5000;sConfigOC.OCPolarity TIM_OCPOLARITY_HIGH;sConfigOC.OCNPolarity TIM_OCNPOLARITY_HIGH;sConfigOC.OCFastMode TIM_OCFAST_DISABLE;sConfigOC.OCIdleState TIM_OCIDLESTATE_RESET;sConfigOC.OCNIdleState TIM_OCNIDLESTATE_RESET;if (HAL_TIM_PWM_ConfigChannel(htim1, sConfigOC, TIM_CHANNEL_1) ! HAL_OK){Error_Handler();}sBreakDeadTimeConfig.OffStateRunMode TIM_OSSR_DISABLE;sBreakDeadTimeConfig.OffStateIDLEMode TIM_OSSI_DISABLE;sBreakDeadTimeConfig.LockLevel TIM_LOCKLEVEL_OFF;sBreakDeadTimeConfig.DeadTime 0;sBreakDeadTimeConfig.BreakState TIM_BREAK_DISABLE;sBreakDeadTimeConfig.BreakPolarity TIM_BREAKPOLARITY_HIGH;sBreakDeadTimeConfig.AutomaticOutput TIM_AUTOMATICOUTPUT_DISABLE;if (HAL_TIMEx_ConfigBreakDeadTime(htim1, sBreakDeadTimeConfig) ! HAL_OK){Error_Handler();}/* USER CODE BEGIN TIM1_Init 2 *//* USER CODE END TIM1_Init 2 */HAL_TIM_MspPostInit(htim1);}
重复计数设置为3输出的3组pwm参数波形 重复计数设置为1输出的3组pwm参数波形 重复计数设置为0输出的3组pwm参数波形 RCR寄存器中的值会随着定时器更新事件递减一直到0在允许更新事件UEV发生的情况下则TIM的更新事件UEV就会产生如果设置RCR的值为N那么PWM模式下更新事件将会在弟N1个周期发生 STM32CubeMX配置
选择定时TIM1时钟源选择内部时钟源PWM通道选择 PWM参数配置Output compare preload默认使能开启 DMA配置stm32F4 - stm32f103
业务代表
main函数
int main(void)
{/* USER CODE BEGIN 1 */uint32_t aCCValue_Buffer[3] {0, 0, 0};/* Compute CCR1 value to generate a duty cycle at 80% */aCCValue_Buffer[2] (uint32_t)(((uint32_t) 80 * (10000 - 1)) / 100); //84000 000/* Compute CCR1 value to generate a duty cycle at 50% */aCCValue_Buffer[1] (uint32_t)(((uint32_t) 50 * (10000 - 1)) / 100);/* Compute CCR1 value to generate a duty cycle at 25% */aCCValue_Buffer[0] (uint32_t)(((uint32_t) 25 * (10000 - 1)) / 100);/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_TIM1_Init();/* USER CODE BEGIN 2 *//*## Start PWM signal generation in DMA mode ############################*/if (HAL_TIM_PWM_Start_DMA(htim1, TIM_CHANNEL_1, aCCValue_Buffer, 3) ! HAL_OK){/* Starting Error */Error_Handler();}/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}参数工程
stm32f103
链接https://pan.baidu.com/s/1bKWQSkmbv4WoJgH07g9Y6g?pwdihj3
提取码ihj3stm32f401
链接https://pan.baidu.com/s/1KtpPRzCX_xS4ZaDI-uty6w?pwdw0qj
提取码w0qj