完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在 iMX.RT 上使用 PWM2 来控制工作正常的 RGB LED,除了当我使用以下调用关闭 LED 时,输出随机高或低取决于关闭时的 PWM 值。
PWM_Stoptimer(PWM2, kPWM_Control_Module_0 | kPWM_Control_Module_1);我在论坛上看过,最接近的相关问题是这个。 我有一种感觉,这与 XBAR 有关,但我不确定并且很困惑为什么无论如何在使用 PWM 时都应该涉及 XBAR。iMX.RT1052 的 PWM SDK 示例对于我希望非常简单的东西来说非常冗长。 这是我用来设置 PWM 三个通道的代码。我有一个单独的定时器,用于 RGB LED 的闪烁/闪烁,我在那里相应地调用 PWM_StartTimer 或 PWM_StopTimer。 我基本上想确保当 PWM 停止时所有输出都是低电平。 pwm_signal_param_t pwmSignal[3]; pwm_config_t pwmConfig; pwm_fault_param_t faultConfig; uint32_t pwmSourceClockInHz; uint32_t pwmFrequencyInHz = LED_PWM_FREQUENCY_IN_HZ; // set the PWM Fault inputs to a low value #if 1 XBARA_Init(XBARA1); XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm2Fault0); XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm2Fault1); XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm1234Fault2); XBARA_SetSignalsConnection(XBARA1, kXBARA1_InputLogicHigh, kXBARA1_OutputFlexpwm1234Fault3); #endif PWM_GetDefaultConfig(&pwmConfig); pwmConfig.reloadLogic = kPWM_ReloadPwmFullCycle; // use full cycle reload pwmConfig.enableDebugMode = true; // turn on debug mode pwmConfig.pairOperation = kPWM_Independent; // we don't want complementary pair pwmConfig.prescale = kPWM_Prescale_Divide_8; // divide input clock by 8 /* initialise both of the sub modules that we are going to be using */ if (PWM_Init(PWM2, kPWM_Module_0, &pwmConfig) == kStatus_Fail) { LOG_WARN("PWM initialization failed for submodule 0."); } if (PWM_Init(PWM2, kPWM_Module_1, &pwmConfig) == kStatus_Fail) { LOG_WARN("PWM initialization failed for submodule 1."); } #if 0 PWM2->SM[kPWM_Module_0].DISMAP[0] = 0; PWM2->SM[kPWM_Module_0].DISMAP[1] = 0; PWM2->SM[kPWM_Module_1].DISMAP[0] = 0; PWM2->SM[kPWM_Module_1].DISMAP[1] = 0; #endif PWM_FaultDefaultConfig(&faultConfig); #if 0 faultConfig.faultLevel = true; faultConfig.enableCombinationalPath = false; #endif /* Sets up the PWM fault protection */ PWM_SetupFaults(PWM2, kPWM_Fault_0, &faultConfig); PWM_SetupFaults(PWM2, kPWM_Fault_1, &faultConfig); PWM_SetupFaults(PWM2, kPWM_Fault_2, &faultConfig); PWM_SetupFaults(PWM2, kPWM_Fault_3, &faultConfig); #if 1 /* Set PWM fault disable mapping for channels and submodules we're using */ PWM_SetupFaultDisableMap(PWM2, kPWM_Module_0, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM2, kPWM_Module_0, kPWM_PwmB, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); PWM_SetupFaultDisableMap(PWM2, kPWM_Module_1, kPWM_PwmA, kPWM_faultchannel_0, kPWM_FaultDisable_0 | kPWM_FaultDisable_1 | kPWM_FaultDisable_2 | kPWM_FaultDisable_3); #endif pwmSourceClockInHz = PWM_SRC_CLK_FREQ; // configuration for RED component pwmSignal[0].level = kPWM_HighTrue; pwmSignal[0].deadtimeValue = 0; pwmSignal[0].faultState = kPWM_PwmFaultState0; pwmSignal[0].pwmChannel = kPWM_PwmA; pwmSignal[0].dutyCyclePercent = 0; // configuration for GREEN component pwmSignal[1].level = kPWM_HighTrue; pwmSignal[1].deadtimeValue = 0; pwmSignal[1].faultState = kPWM_PwmFaultState0; pwmSignal[1].pwmChannel = kPWM_PwmB; pwmSignal[1].dutyCyclePercent = 0; if (PWM_SetupPwm(PWM2, kPWM_Module_0, pwmSignal, 2, kPWM_CenterAligned, pwmFrequencyInHz, pwmSourceClockInHz) == kStatus_Fail) { LOG_WARN("PWM setup failed."); } // configuration for BLUE component pwmSignal[2].level = kPWM_HighTrue; pwmSignal[2].deadtimeValue = 0; pwmSignal[2].faultState = kPWM_PwmFaultState0; pwmSignal[2].pwmChannel = kPWM_PwmA; pwmSignal[2].dutyCyclePercent = 0; if (PWM_SetupPwm(PWM2, kPWM_Module_1, &pwmSignal[2], 1, kPWM_CenterAligned, pwmFrequencyInHz, pwmSourceClockInHz) == kStatus_Fail) { LOG_WARN("PWM setup failed."); } /* Set the load okay bit for both submodules to load registers from their buffer */ PWM_SetPwmLdok(PWM2, kPWM_Control_Module_0 | kPWM_Control_Module_1, true); /* Start the PWM generation from Submodules 0 and 1 */ PWM_StartTimer(PWM2, kPWM_Control_Module_0 | kPWM_Control_Module_1); |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
1884个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36261 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4343 浏览 0 评论
5998 浏览 1 评论
6721 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4170 浏览 0 评论
585浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
580浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
569浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
655浏览 2评论
729浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-20 15:50 , Processed in 1.023009 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号