我使用的是 S32K389 芯片。
我正在尝试使用 ICU 读取 PWM 输入数据,但没有成功。
如下图所示,PTF17 引脚被设置为 emios_1_ch_1_h 输入引脚。
然后,如下图所示,添加了一个元器件。
在 ICU 元器件中,ICUChannels、icuemiOS 和 ICUHWInterruptConfigList 设置为下图所示的值。
Mcl 元器件中的 emiosCommon 设置值的设置如下图所示。
IntCtrl 元器件的中断控制器设置值的设置如下图所示。
最后,对 Siul2_Port 元器件的 PortConfigSet 设置值进行了设置,如下图所示。
当我使用主函数中的 Emios_Icu_Ip_GetDutyCycleValues 函数读取 PWM 数据时,它不起作用。
下面的代码是经过测试的源代码。
====================================================================
#define INSTANCE_1(uint8)1U
#defineCHANNEL_0 (uint8)0U
eMios_Icu_Ip_DutyCycleTypeic_result_temp;
int main(void)
{
/* 初始化时钟 */
Clock_Ip_Init(&Clock_Ip_aClockConfig[0]);
/* 使用 驱动程序驱动程序初始化所有引脚 */
Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS_PortContainer_0_VS_0, g_pin_mux_InitConfigArr_PortContainer_0_VS_0);
/* 安装 EmiosISR */
IntCtrl_Ip_Init(&IntCtrlConfig_0);
/*Emios Mcl 启动*/
Emios_Mcl_Ip_Init(INSTANCE_1,&Emios_Mcl_Ip_Sa_1_Config_VS_0);
/* 初始化 Icu驱动程序 */
Emios_Icu_Ip_Init(INSTANCE_1,&eMios_Icu_Ip_1_Config_PB_VS_0);
/* 启动 eMIOS 通道的信号测量*/
Emios_Icu_Ip_StartSignalMeasurement(INSTANCE_1, CHANNEL_0);
同时(1)
{
Emios_Icu_Ip_GetDutyCycleValues(INSTANCE_1,CHANNEL_0,&ic_result_temp);
//如果被捕获
如果(ic_result_temp.PeriodTime)
{
/停止测量
Emios_Icu_Ip_StopSignalMeasurement(INSTANCE_1, CHANNEL_0);
打破;
}
delay();
}
Exit_Example(TRUE);
返回(0U);
}
====================================================================
Emios_Icu_Ip_GetDutyCycleValues 函数中的 EMIOS_ICU_DUTY_CYCLE 检查部分总是 EMIOS_ICU_NO_MEASUREMENT(eMios_Icu_Ip_axChState[eMios_Icu_Ip_u8IndexInChState[instance][hwChannel]].测量)。
谢谢!
我也遇到了类似的问题,如果您解决了测量频率的问题,能否分享一下配置或代码?