完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
对定时器2和5重新赋值后再启动定时器 pwm会在定时器启动后15秒左右才有输出,其余6个定时器的pwm输出正常工程使用CUBEMX创建
/ USER CODE BEGIN Header //**
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_debug void user_debug(void); endif / USER CODE END PFP / / Private user code ---------------------------------------------------------// USER CODE BEGIN 0 / / USER CODE END 0 / /**
/ 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_debug user_debug(); endif TIM15->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 /} /**
/** Initializes the RCC Oscillators according to the specified parameters
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_debug void 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: %dMHzrn", SystemCoreClock / 1000000);printf("UID = %08X %08X %08Xnr", CPU_Sn2, CPU_Sn1, CPU_Sn0);} endif / USER CODE END 4 / /**
/**
|
|
相关推荐
1个回答
|
|
从您提供的信息来看,您在使用STM32G473VET6微控制器的定时器2和5输出PWM信号时遇到了延迟问题。这个问题可能是由以下几个原因导致的:
1. **初始化问题**:确保您在初始化定时器2和5时,所有参数都设置正确。这包括时钟源、预分频器、自动重载寄存器、捕获/比较模式寄存器等。 2. **中断配置**:如果您使用了中断来控制PWM输出,确保中断配置正确,并且中断优先级设置得当。 3. **软件延迟**:检查您的代码中是否有可能导致延迟的部分,例如循环、等待或其他耗时操作。 4. **硬件问题**:虽然不太可能,但硬件问题(如电源不稳定、I/O口问题等)也可能导致延迟。 5. **PWM配置**:检查PWM信号的频率和占空比设置是否正确。错误的设置可能导致输出信号不符合预期。 6. **时钟配置**:确保您的系统时钟和定时器时钟配置正确。错误的时钟配置可能导致定时器工作不正常。 7. **软件滤波器**:如果您的PWM输出连接到了外部设备,确保外部设备的软件滤波器设置正确,以避免不必要的延迟。 8. **软件版本**:确保您使用的STM32CubeMX和HAL库是最新版本,以避免因软件bug导致的延迟。 解决这个问题的步骤可能包括: - **检查初始化代码**:确保定时器2和5的初始化代码与正常工作的其他定时器相同。 - **调试**:使用调试工具逐步执行代码,查看是否有异常行为或延迟发生的地方。 - **简化代码**:尝试简化PWM输出的相关代码,逐步添加功能,以确定问题所在。 - **更新软件**:如果怀疑是软件问题,尝试更新STM32CubeMX和HAL库到最新版本。 - **硬件检查**:检查硬件连接和电源供应,确保没有硬件问题。 如果问题仍然存在,您可能需要提供更详细的代码和配置信息,以便进一步分析问题所在。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1784 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1088 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
729 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
734浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
559浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 21:12 , Processed in 0.656323 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号