综合技术交流
直播中

李华瑞

7年用户 899经验值
私信 关注
[问答]

求助,关于GPIO PWM功能的问题求解

我有一个关于 GPIO  PWM 功能的问题。
通常情况下,我使用 PWM,但在某些条件下,我想用 GPIO 高/低电平来控制它。
Cy_GPIO_Write(P0_3_PORT, P0_3_NUM, 0); 即使我使用了该函数,它也不起作用。
如果在设备配置器中禁用 PWM 功能,它将正常工作。
但是,如果在设备配置器中启用 PWM 并解除 Cy_TCPWM_PWM_DeInit(禁用 PWM),GPIO 控制将不起作用。
此时,GPIO 的状态根据 .outVal 固定。 = 1(0) 中的配置。
也许我漏掉了什么? 还有什么需要进一步审查的吗?

回帖(2)

董达勇

2024-5-31 16:52:16
按下所示进行了修改即可


#if0 // 为 GPIO 低电平
Cy_TCPWM_TriggerStopOrKill(TCPWM0,CNT1_MASK);
Cy_SysLib_Delay(100);
Cy_TCPWM_PWM_DeInit(TCPWM0, CNT1, PWM_config);
Cy_SysLib_Delay(100);
Cy_GPIO_Write(P0_3_PORT, P0_3_NUM, 0);
#else //对于 GPIO 高电平
Cy_TCPWM_PWM_DeInit(TCPWM0, CNT1, PWM_config);
Cy_SysLib_Delay(100);
Cy_GPIO_Write(P0_3_PORT, P0_3_NUM, 1);
#endif
举报

李斌

2024-5-31 17:34:58
以下是一些建议和可能的解决方案:

1. 确保您正确初始化了 PWM 和 GPIO。在开始使用 PWM 功能之前,请确保您已经正确初始化了 Cy_TCPWM_PWM_Init() 函数,并且在需要使用 GPIO 控制时,也正确初始化了 GPIO。

2. 在切换 PWM 和 GPIO 控制之间时,确保您正确地禁用了 PWM。在您的代码中,您提到了 Cy_TCPWM_PWM_DeInit() 函数。请确保在切换到 GPIO 控制之前,您已经正确地调用了此函数来禁用 PWM。

3. 在禁用 PWM 后,确保您正确地设置了 GPIO 的状态。在调用 Cy_TCPWM_PWM_DeInit() 函数后,您需要使用 Cy_GPIO_Write() 函数来设置 GPIO 的状态。请确保您已经正确地设置了 P0_3_PORT 和 P0_3_NUM 参数。

4. 检查您的设备配置器设置。确保在设备配置器中,PWM 和 GPIO 的配置是正确的。如果您在设备配置器中启用了 PWM 功能,但希望使用 GPIO 控制,请确保您已经正确地配置了相关的设置。

5. 考虑使用回调函数。在某些情况下,使用回调函数来处理 PWM 和 GPIO 之间的切换可能会更有帮助。您可以在 PWM 回调函数中设置 GPIO 的状态,或者在 GPIO 回调函数中设置 PWM 的状态。

6. 检查您的代码逻辑。请确保您的代码逻辑正确地处理了 PWM 和 GPIO 之间的切换。在切换到 GPIO 控制之前,请确保您已经正确地禁用了 PWM,并在切换回 PWM 控制之前,重新初始化 PWM。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分