大意!6行代码,“报废”5片单片机!

简介: 大意!6行代码,“报废”5片单片机!

今天又双叒叕是个心痛的日子。

image.png



近日,打样一款新产品PCB,微控制器选用:国产MCU,HC32L130系列,程序移植于之前的项目。


PCB样板焊接好后,第一次可以正常烧录程序,再进行烧录,IAR显示无法连接MCU。


image.png




奇怪了!试了几次不行,换一块板子, 也是这种情况......


此时内心很恐慌,是不是MCU电路设计有问题?但是也不应该啊,该MCU已经应用好几款产品了......


排错离不开试错法,找来最基础的点亮LED程序测试,烧写过程、次数均正常可行。


说明程序有问题!


通过一系列尝试和推测,将问题定位在时钟配置上:之前使用HC32L130均是基于24MHz内部高速时钟(HSI),而本款产品基于24MHz外部高速时钟(HSE)。


配置24MHz内部高速时钟(HSI)程序如下所示:


//将时钟从RCH4MHz切换至RCH24MHz,
void App_Rch4MHzTo24MHz(void)
{    
///<============== 将时钟从RCH4MHz切换至RCH24MHz ==============================    
    ///< RCH时钟不同频率的切换,需要先将时钟切换到RCL,设置好频率后再切回RCH
    Sysctrl_SetRCLTrim(SysctrlRclFreq32768);
    Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
    Sysctrl_SysClkSwitch(SysctrlClkRCL);
    ///< 加载目标频率的RCH的TRIM值
    Sysctrl_SetRCHTrim(SysctrlRchFreq24MHz);
    ///< 时钟切换到RCH
    Sysctrl_SysClkSwitch(SysctrlClkRCH);
    ///< 关闭RCL时钟
    Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);
}

在修改为外部高速时钟程序时,没再查阅芯片手册,直接修改的参数,程序如下所示:


//将时钟从RCH4MHz切换至XTH24MHz,
void App_Rch4MHzTo24MHz(void)
{    
///<============== 将时钟从RCH4MHz切换至XTH24MHz ==============================    
    Sysctrl_SetRCLTrim(SysctrlRclFreq32768);
    Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
    Sysctrl_SysClkSwitch(SysctrlClkRCL);
    ///< 加载目标频率的XTH值
    Sysctrl_SetXTHFreq(SysctrlRchFreq24MHz);
    ///< 时钟切换到XTH
    Sysctrl_SysClkSwitch(SysctrlClkXTH);
    ///< 关闭RCL时钟
    Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);
}

通过查阅手册,配置过程果然存在问题。


image.png


最后修改代码如下:


//将时钟从RCH4MHz切换至XTH24MHz
void App_Rch4MHzToXth24MHz (void)
{    
///<======================== 将时钟从RCH4MHz切换至XTH24MHz ==============================    
    ///< 切换时钟前(根据外部高速晶振)设置XTH频率范围,配置晶振参数,使能目标时钟,此处为24MHz
    Sysctrl_SetXTHFreq(SysctrlXthFreq20_32MHz);
    Sysctrl_XTHDriverCfg(SysctrlXtalDriver3);
    Sysctrl_SetXTHStableTime(SysctrlXthStableCycle16384);
    Sysctrl_ClkSourceEnable(SysctrlClkXTH, TRUE);
    ///< 时钟切换
    Sysctrl_SysClkSwitch(SysctrlClkXTH);
    ///< 根据需要选择是否关闭原时钟(此处关闭)
    Sysctrl_ClkSourceEnable(SysctrlClkRCH, FALSE);
}

最后运行调测,果然顺利~


相关文章
|
JSON 安全 Linux
安全工具-curl学习
安全工具-curl学习
263 0
|
监控 Cloud Native 安全
浅谈云原生可观测性
【1月更文挑战第23天】
|
机器学习/深度学习 人工智能 数据管理
文生图的基石CLIP模型的发展综述
CLIP(Contrastive Language-Image Pre-training)是OpenAI在2021年发布的多模态模型,用于学习文本-图像对的匹配。模型由文本和图像编码器组成,通过对比学习使匹配的输入对在向量空间中靠近,非匹配对远离。预训练后,CLIP被广泛应用于各种任务,如零样本分类和语义搜索。后续研究包括ALIGN、K-LITE、OpenCLIP、MetaCLIP和DFN,它们分别在数据规模、知识增强、性能缩放和数据过滤等方面进行了改进和扩展,促进了多模态AI的发展。
2437 0
|
Python Windows
【错误记录】Mac 中 Python 报错 ( ERROR: Could not build wheels for numpy which use PEP 517 | 问题未解决 | 问题记录 )(一)
【错误记录】Mac 中 Python 报错 ( ERROR: Could not build wheels for numpy which use PEP 517 | 问题未解决 | 问题记录 )(一)
2324 0
【错误记录】Mac 中 Python 报错 ( ERROR: Could not build wheels for numpy which use PEP 517 | 问题未解决 | 问题记录 )(一)
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
存储 缓存 Unix
【进程IO】详细讲解文件描述符fd
【进程IO】详细讲解文件描述符fd
|
Linux 数据处理 开发者
Linux命令od的深入探索
**Linux的od命令详解** od是Linux中用于以多种格式显示文件内容的工具,尤其适合二进制文件分析。它支持八进制、十进制、十六进制、ASCII及浮点格式。常用参数如`-a`显示可打印字符,`-b`以八进制,`-x`以十六进制,`-j`跳过字节,`-N`限制输出字节数。通过od,用户能查看非打印字符和理解文件结构。在处理大文件或特定编码的文本文件时需谨慎。最佳实践是结合具体需求选用参数,提高工作效率。
|
安全 C# 开发者
C# 一分钟浅谈:文件操作与文件流详解
【9月更文挑战第4天】在日常开发中,文件的读写是基本而重要的任务。C# 通过 `System.IO` 命名空间提供了多种工具,如 `FileStream`、`StreamReader` 和 `StreamWriter` 等,用于处理文件和流。本文从基础概念入手,详细介绍了这些类的使用方法,并讨论了常见错误及其避免策略,包括文件不存在、权限问题和文件被占用等。通过示例代码,展示了如何创建、读取文件以及进行二进制数据操作,并强调了异常处理和性能优化的重要性。掌握这些技巧对于提升编程能力至关重要。
457 3
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
存储 Kubernetes Docker
在K8S中,与K8S相关基础概念有哪些?
在K8S中,与K8S相关基础概念有哪些?