菜工啊潜 2024-03-25 17:45 采纳率: 0%
浏览 16

HC32F460JETA核心板IO口干扰问题

HC32F460JETA-LQFP48核心板,网上买的。

正常配置好GPIO后,通过华大库函数进行一个翻转。
发现在电平转换的时候,别的IO引脚会有毛刺波动。测了几次发现,不管配没配置,几乎每个引脚都有。
用的是梦源的逻辑分析仪,采样都是足够的。
频率打印出来是160M
SystemCoreClock= 160000000
HRC_VALUE= 16000000
5V供电,共地。
真是令人疑惑。
(如图1、2)

img

毛刺时间很固定,但是并没有配置什么。

img


【GPT回答】:
在处理器执行中断服务程序之前,可能会有一个很短的时间窗口,当其中断触发的时候,处理程序还没有来得及执行,这段时间内,CPU还没有来得及响应中断请求并执行中断服务程序,所以当某个引脚产生中断信号,在处理器还没有及时处理中断的时候,会导致引脚集体出现高电平一瞬间。
为了避免这种情况的发生,可以在需要的引脚上添加消抖电路或者在中断服务程序中尽快处理中断请求。
MD,我没看懂。

【Bing】可能原因?
即使已经共地,其他引脚仍可能在高低电平转换时受到影响,这主要是由于以下几个原因:
电磁干扰:在高低电平转换的过程中,如果有较大的电流瞬时流过,会产生瞬时的磁场,从而产生电磁干扰,影响附近引脚的电压。
地线回路阻抗:即使已经共地,不同引脚到地的回路也存在一定的阻抗,当有较大的瞬时电流流过时,可能会造成一定的电压下降,从而影响其他引脚。
为了减少这种影响,可以考虑以下方法:
增加电容滤波:在每个引脚的输入电路中加入合适的电容,以滤除瞬时的电压变化,提高稳定性。
优化接地:确保接地系统合理,地线回路阻抗尽量降低,避免过大的接地回路阻抗影响正常工作。
使用屏蔽线缆:如果可能的话,对信号线进行屏蔽处理,减少外界干扰的影响。
通过上述方法,可以减少因高低电平转换导致的其他引脚抖动问题,提高系统的稳定性和抗干扰能力。

没遇到过这种情况,现在怀疑板子接地问题,打算另买一块别家的板子试试。
逻辑分析仪应该是没问题的,测了别的没问题。
代码目前没找到问题。记录一下,继续测试,手册没怎么看,看这几天能不能解决,不能就放弃了。

2024年4月1日14:13:10
已经被老板放弃了,电源供电可能会导致不稳定,而且我购买了另一块开发板,仍然会产生同样的问题,那么接下来就是代码配置,或者芯片本身有问题两种可能了。
如果芯片出问题,这个没话说。
如果代码配置,也许是死区不产生导致的端口贯通?

但是不管是那个问题,老板已经放弃了,那么就只能抽时间理会了。完。

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-25 17:45
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    从问题描述中可以看出,在进行GPIO翻转时,会引起其他IO引脚的毛刺波动。经过初步分析,可能是由于电磁干扰和地线回路阻抗问题导致的。 解决这个问题的方法主要有以下几种:
    1. 增加电容滤波:在每个引脚的输入电路中加入合适的电容,以滤除瞬时的电压变化,提高稳定性。具体可以参考芯片手册,查找相应引脚的输入电路设计。
    2. 优化接地:确保接地系统合理,地线回路阻抗尽量降低,避免过大的接地回路阻抗影响正常工作。可采用多层PCB设计,以及合理布局,减少接地回路阻抗。
    3. 使用屏蔽线缆:如果可能的话,对信号线进行屏蔽处理,减少外界干扰的影响。 另外,也可以在中断服务程序中尽快处理中断请求,以避免在中断时产生的高电平瞬间影响其他引脚。 以下是代码示例,以PA0和PA1引脚为例:
    //PA0配置为输出模式,输出低电平
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    GPIO_ResetBits(GPIOA, GPIO_Pin_0);
    //PA1配置为输入模式,添加电容滤波
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    GPIO_SetBits(GPIOA, GPIO_Pin_1);
    GPIOA->BSRR = GPIO_Pin_1 << 16;  //输出低电平
    GPIOA->BSRR = GPIO_Pin_1;  //输出高电平
    

    需要注意的是,具体的电容滤波电路设计需要根据引脚的输入电路特性和具体的应用场景进行优化。

    评论

报告相同问题?

问题事件

  • 修改了问题 4月1日
  • 修改了问题 3月25日
  • 创建了问题 3月25日

悬赏问题

  • ¥20 vx转账功能对方不能领取
  • ¥15 vue2+codemirror 运行后页面光标太大了
  • ¥15 pdfjs库如何在前端实现打印、旋转等功能
  • ¥15 combobox数据绑定问题
  • ¥15 maven打包时,为什么有的依赖打不进去包
  • ¥15 求复现机器学习文章一篇
  • ¥15 爬虫抓取数据|解析视频文本内容(相关搜索:自动化)
  • ¥15 combobox绑定值改变的问题
  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)