ICU PORT程序不进中断
-
WR 在 ICU PORT程序不进中断 中说:
chenchao 把你yct发出来看一下
-

AI提供的解决方案,仅供参考!!!!
核心问题分析1️⃣ 【最可能】CAN1_RX引脚功能模式冲突
️您的Port配置中,PTC_6的
PortPinMode = "CAN1_RX"(CAN1接收的复用功能),但ICU使用的是IcuIp = "PORT"模式。问题本质:
- 当引脚处于 CAN1_RX 复用功能时,PORT模块的数字输入中断检测电路可能无法有效捕获信号变化
- ICU的PORT模式依赖的是PORT模块的 GPIO数字输入路径 上的边沿检测
- CAN1_RX模式下,CAN控制器直接接管了该引脚,PORT模块的PIFR(Pin Interrupt Flag Register)不会因为CAN总线信号的变化而置位
解决方案: 在休眠切换到ICU检测时,需要先将PTC_6的引脚功能切换为 GPIO输入模式,再使能ICU中断。唤醒后再切回CAN1_RX。
2️⃣ 边沿触发配置不匹配 —
ICU_RISING_EDGE"IcuDefaultStartEdge": "ICU_RISING_EDGE"CAN总线物理层特性:
电平 含义 HIGH 隐性(Recessive,空闲态) LOW 显性(Dominant,激活态) 一个CAN帧的第一个动作是 SOF(Start of Frame)= 显性位 = 下降沿。如果您只配置了
ICU_RISING_EDGE,CAN帧起始的下降沿无法被捕获!虽然后续数据位中会有上升沿,但如果CAN控制器已经休眠,整个总线上可能只有一个下降沿就结束了。解决方案: 改为
ICU_BOTH_EDGES(双边沿检测):"IcuDefaultStartEdge": "ICU_BOTH_EDGES"
3️⃣
IcuWakeupCapability = false"IcuWakeupCapability": false您在休眠场景下需要使用ICU检测总线唤醒,但该通道的Wakeup能力是 关闭的。
需要改为:
true同时确认
IcuWakeup子容器已正确关联到EcuM唤醒源:"IcuWakeup": { "IcuChannelWakeupInfo": "EcuM/EcuMConfiguration/EcuMCommonConfiguration/EcuMWakeupSource/EcuMWakeupSource_0" }
4️⃣ 无内部上拉/下拉电阻
"PortPinPS": "PORT_PIN_NO_PULL"当CAN进入休眠模式、CAN控制器停止驱动RX引脚时,引脚如果没有外部上拉,引脚电平会浮动/不确定。PIFR检测需要清晰的数字边沿,浮动电平可能根本产生不了有效边沿。
解决方案:
- 硬件上确保CAN RX有外部上拉到VCC(通常CAN收发器会处理)
- 或软件配置弱上拉:
PORT_PIN_PULLUP
5️⃣ 休眠期间PORT模块时钟可能被关闭
您有
IcuEnableSchmSupport: true和IcuEnableUserModeSupport: true。如果进入休眠模式(如STOP模式)时PORT模块的时钟被门控关闭,则PIFR永远无法置位。请检查:
- Mcu的
McuModeSettingConf中休眠模式下的时钟门控配置 - 确保PORT模块在休眠模式下时钟保持开启
建议修改方案汇总参数路径 当前值 建议值 Icu/IcuConfigSet/IcuChannel/IcuChannel_0/IcuDefaultStartEdgeICU_RISING_EDGEICU_BOTH_EDGESIcu/IcuConfigSet/IcuChannel/IcuChannel_0/IcuWakeupCapabilityfalsetruePort/PortConfigSet/PortContainer/CAN1/CAN1_RX_PTC6/PortPinPSPORT_PIN_NO_PULLPORT_PIN_PULLUP应用代码中休眠前 未处理 需要切PTC_6为GPIO输入
最关键的一点 — 应用代码流程
休眠前的正确流程应是:
1. CAN_DeInit() / CAN_SetMode(SLEEP) // 关闭CAN控制器 2. Port_SetPinMode(PTC_6, PORT_GPIO_MODE) // 切PTC_6为GPIO输入 3. Icu_Init() // 初始化ICU(PORT中断模式) 4. Icu_EnableWakeup() // 使能唤醒 5. 进入休眠唤醒后的流程:
1. Icu_DisableWakeup() 2. Port_SetPinMode(PTC_6, CAN1_RX) // 恢复CAN功能 3. Can_Init()如果不做第2步的引脚功能切换,直接使用CAN1_RX模式下的PORT中断检测,PIFR大概率不会置位,这就是您碰到的问题。
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...


