当前位置: 首页 > news >正文

华大MCU HC32F005端口GPIO控制失效问题

1. 问题来源:RS485通信时,且数据量大、持续运行一段时间后,发现RS485使能引脚没有得到释放,导致总线锁死,无法通信,影响到整个总线的设备。

2. 问题分析:1)经过测试和跟踪,使能脚的释放指令已经执行,但是引脚实际并没有生效。2)网上找到的资料说是端口竞争冒险问题,在发生中断后可能发生无法有效控制的情况,与本次现象很相似。

3. 解决办法:

修改前使用的GPIO控制函数为:

en_result_t Gpio_WriteOutputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin, boolean_t bVal)

修改后使用的GPIO控制函数为:

en_result_t Gpio_ClrIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
{
    SetBit(((uint32_t)&M0P_GPIO->PABCLR + enPort), enPin, TRUE);

    return Ok;
}
en_result_t Gpio_SetIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
{
    SetBit(((uint32_t)&M0P_GPIO->PABSET + enPort), enPin, TRUE);

    return Ok;
}

以上适用于HC32F1XX系列,有置位和复位寄存器的MCU,且官方代码提供对应的函数。

但是HC32F005的DLL库里并没有上述的函数,且MCU也没有对应置位、清除寄存器,所以不适用上述的函数。

手动添加函数为:

en_result_t Gpio_SetIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
{
    SetBit(((uint32_t)&M0P_GPIO->P0OUT + enPort), enPin, TRUE);

    return Ok;
}
en_result_t Gpio_ClrIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)
{
    SetBit(((uint32_t)&M0P_GPIO->P0OUT + enPort), enPin, FALSE);

    retu

4. 总结,对于HC32F003、HC32F005等低端MCU,应避免频繁中断导致参数传递异常,从而解决问题。

5. 实际测试:运行两天后,问题再次复现!!!崩溃!

相关文章:

  • 在原有基础上的Python正则表达式终极指南,新增高级用法、复杂案例和底层原理分析
  • DApp 开发入门指南
  • 车载诊断数据库 --- 通用性诊断数据库ODX
  • ubuntu22.04桥接模式开代理
  • 改BUG:Mock测试的时候,when失效
  • 面试题之箭头函数和普通函数有什么区别?
  • 【AI】GitHub Copilot
  • 从【人工智能】到【计算机视觉】,【深度学习】引领的未来科技创新与变革
  • VScode 使用Deepseek又方便又好用的另一款插件
  • 掌握.NET Core后端发布流程,如何部署后端应用?
  • 【LeetCode】力扣刷题攻略路线推荐!适合新手小白入门~(含各类题目序号)
  • 2025年2月深度实测!DeepSeek、OpenAI o1、Gemini打造爆款应用及对比
  • 【Java场景题】MySQL死锁排查
  • 解决双系统开机显示gnu grub version 2.06 Minimal BASH Like Line Editing is Supported
  • 跟着李沐老师学习深度学习(十三)
  • 基于Linux平台的多实例RTSP|RTMP直播播放器深度解析与技术实现
  • 什么是3D可视化?有哪些优势和应用领域?
  • Linux 进程地址空间第二讲动态库地址
  • 黑客利用 Telegram API 传播新的 Golang 后门
  • PHP图书借阅小程序源码
  • 绵阳的网站建设/seo是什么意思 seo是什么职位
  • 如何设置个人网站/郑州seo询搜点网络效果佳
  • 凡科建站如何制作论坛/怎么把产品推广到各大平台
  • 手机上怎么制作网站/如何让新网站被收录
  • .net网站 还原数据库备份/推广运营是做什么的
  • 捕鱼游戏在哪做网站/百度开店怎么收费