对定时器2和5重新赋值后再启动定时器 pwm会在定时器启动后15秒左右才有输出,其余6个定时器的pwm输出正常工程使用CUBEMX创建 / USER CODE BEGIN Header / /**
/ / USER CODE END Header / / Includes ------------------------------------------------------------------*/ include "main.h"include "tim.h"include "usart.h"include "gpio.h"include "stdio.h"/ Private includes ----------------------------------------------------------/ / USER CODE BEGIN Includes / / USER CODE END Includes / / Private typedef -----------------------------------------------------------/ / USER CODE BEGIN PTD / / USER CODE END PTD / / Private define ------------------------------------------------------------/ / USER CODE BEGIN PD / / USER CODE END PD / / Private macro -------------------------------------------------------------/ / USER CODE BEGIN PM / / USER CODE END PM / / Private variables ---------------------------------------------------------/ / USER CODE BEGIN PV / / USER CODE END PV / / Private function prototypes -----------------------------------------------/ void SystemClock_Config(void); / USER CODE BEGIN PFP / if _user_debugvoid user_debug(void); endif/ USER CODE END PFP / / Private user code ---------------------------------------------------------/ / USER CODE BEGIN 0 / / USER CODE END 0 / /**
/ 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 / __disable_irq(); / USER CODE END SysInit / / Initialize all configured peripherals / MX_GPIO_Init(); MX_TIM15_Init(); MX_TIM16_Init(); MX_TIM17_Init(); MX_TIM1_Init(); MX_TIM2_Init(); MX_TIM3_Init(); MX_TIM5_Init(); MX_TIM20_Init(); MX_USART1_UART_Init(); / USER CODE BEGIN 2 / // HAL_Delay(1000); if _user_debuguser_debug(); endifTIM15->PSC = 1 - 1; TIM15->ARR = 42500 - 1; TIM15->CCR1 = 42500 / 2; TIM3->PSC = 1 - 1; TIM3->ARR = 42500 - 1; TIM3->CCR2 = 42500 / 2; TIM16->PSC = 1 - 1; TIM16->ARR = 42500 - 1; TIM16->CCR1 = 42500 / 2; TIM17->PSC = 1 - 1; TIM17->ARR = 42500 - 1; TIM17->CCR1 = 42500 / 2; TIM20->PSC = 1 - 1; TIM20->ARR = 42500 - 1; TIM20->CCR1 = 42500 / 2; TIM5->PSC = 1 - 1; TIM5->ARR = 42500 - 1; TIM5->CCR3 = 42500 / 2; TIM1->PSC = 1 - 1; TIM1->ARR = 42500 - 1; TIM1->CCR2 = 42500 / 2; TIM2->PSC = 1 - 1; TIM2->ARR = 42500 - 1; TIM2->CCR3 = 42500 / 2; HAL_TIM_PWM_Start(&htim15, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim16, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim20, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_3); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3); HAL_GPIO_WritePin(Relay_1_GPIO_Port, Relay_1_Pin, GPIO_PIN_SET); user_debug(); // HAL_Delay(1000); HAL_TIM_PWM_Stop(&htim15, TIM_CHANNEL_1); HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2); HAL_TIM_PWM_Stop(&htim16, TIM_CHANNEL_1); HAL_TIM_PWM_Stop(&htim17, TIM_CHANNEL_1); HAL_TIM_PWM_Stop(&htim20, TIM_CHANNEL_1); HAL_TIM_PWM_Stop(&htim5, TIM_CHANNEL_3); HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2); HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_3); HAL_GPIO_WritePin(Relay_1_GPIO_Port, Relay_1_Pin, GPIO_PIN_RESET); // HAL_Delay(1000); user_debug(); / USER CODE END 2 / / Infinite loop / / USER CODE BEGIN WHILE / HAL_GPIO_WritePin(Relay_1_GPIO_Port, Relay_1_Pin, GPIO_PIN_SET); TIM5->PSC = 1 - 1; TIM5->ARR = 11333 - 1; TIM5->CCR3 = 11333 / 2; TIM2->PSC = 1 - 1; TIM2->ARR = 11333 - 1; TIM2->CCR3 = 11333 / 2; /TIM2和TIM5重新赋值后 启动8路PWM输出 TIM2和TIM5大约会延时15s后再输出 其他6路正常/ HAL_TIM_PWM_Start(&htim15, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim16, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim20, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_3); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3); while (1) { if 0/**/ HAL_GPIO_WritePin(Relay_1_GPIO_Port, Relay_1_Pin, GPIO_PIN_RESET); endif/ USER CODE END WHILE / / USER CODE BEGIN 3 / } / USER CODE END 3 / } /**
/* Configure the main internal regulator output voltage / HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST); /** Initializes the RCC Oscillators according to the specified parameters
/* Initializes the CPU, AHB and APB buses clocks / RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) { Error_Handler(); } } / USER CODE BEGIN 4 / void HAL_IncTick(void) { uwTick += uwTickFreq; } int fputc(int ch, FILE f) { HAL_UART_Transmit(&huart1, (uint8_t )&ch, 1, 1000); return (ch); } if _user_debugvoid user_debug(void) { uint32_t CPU_Sn0, CPU_Sn1, CPU_Sn2; CPU_Sn0 = (__IO uint32_t )(0x1FFF7590); CPU_Sn1 = (__IO uint32_t )(0x1FFF7590 + 4); CPU_Sn2 = (__IO uint32_t )(0x1FFF7590 + 8); printf("CPU : STM32G473VET6, LQFP100, Fre: %dMHz\r\n", SystemCoreClock / 1000000); printf("UID = %08X %08X %08X\n\r", CPU_Sn2, CPU_Sn1, CPU_Sn0); } endif/ USER CODE END 4 / /**
ifdef USE_FULL_ASSERT/**
|
STM32 SPI从机用DMA方式实现全双工,数据传输过程中出错。
STM32G4 CAN无法检测到bus-off状态?
求助:PMSM电机编码器线数(分辨率)为80000线,超过MCSDK5.4.8软件所能设置的最大线数65535,请问如何解决
电能变换
MotorContrl Workbench 6.3.1 无法调用cubemx
数字电源-G474(三项维也纳):MCU两处外部时钟源设置为 经过运放检测三项电流信号的A B C相的疑问。
使用STM32F103控制两步进电机同时进行不同的运动(软件指令驱动),与控制一个电机的不同之处在于哪里?
stm32f030定时器输入捕获异常
与HAL_ADC_Start_DMA相关的一个十分怪异的问题
stm32g474 板卡偶发flash的某块代码区被擦除
[md]另外,每次赋值后都把计数器清零,从头开始计数,即 TIMx->CNT=0。
TIM15->SC = 1 - 1;
正常来讲,应该是写成TIM15->PSC。
另外,你每次做完时基参数的修改赋值后,
紧跟着来一句下面代码:
TIMx->EGR = TIM_EGR_UG;
其中x根据你使用的TIMER编号来定。
你好
1.我这边就是TIM15->PSC,可能是上传文本格式乱了
2.我这边没有开影子寄存器,应该是不需要触发更新事件的;并且我这边配置了8个定时器(配置都一样),其余6个可以正常输出PWM,就是TIM2&TIM5重新赋值后使能会延时大约15s后输出pwm(在mdk debug查看寄存器可以看到CEN位置1了,计数器正常计数),(其余6个定时器重新赋值使能后也能马上输出pwm)
和 OCnPE@TIMx->CCMR,确保他们都被清零了。
这边也会找G4的板验证下。
确实是没有重新清零CNT,并且TIM2&TIM5刚好是32位定时器,按照170MHZ计数,约25s溢出,应该就是这个问题,晚一点试一下,感谢