调试心得——航顺HK32F103RBT6单片机运行慢的问题

航顺HK32F103RBT6单片机运行慢的问题

问题描述:

用惯了ST公司的M3系列单片机,而又要支持国产,所以找到了国产航顺M3系列,说它完全和STM32单片机兼容,硬件电路和程序都可以直接使用,为了以后的项目方便使用,做了这么一个验证实验:

1.将以前一个使用STM32F103RET6做的一个项目的PCB板子拿来,将板子上STM32芯片使用风枪吹下来,直接替换成HK32F103RBT6芯片;
2.使用STLink结合MDK5.24来调试:打开之前的MDK工程副本,将以前MDK项目Device里的STM32F103RET6改成ST32F103RBT6,再将Debug设置中的FlashDownload改为128K;
3.重新编译;
4.点击下载;

下载后,程序能够跑起来,引脚控制、串口输出、flash读写等等都没有问题,唯一的问题是:感觉所有动作都慢半拍,运行得很慢!举例:一个500ms的延时,结果表现出来5秒的样子;

找原因:

1.首先怀疑是因为外部晶振没有起振,导致芯片自动使用了内部低速时钟:用示波器看晶振波形,结论是:晶振工作正常;
2.怀疑程序中其他程序模块的影响:主函数中,将其他程序全部注释掉,只剩下延时和LED,结论是:并不是这样的;
3.一阵瞎折腾:省略折腾过程,

最终结论:航顺芯片内部启动外部高速时钟HSE耗时比STM32长一点,以至于在执行如下库函数代码时超时跳出,没能正常启动外部高速时钟HSE:

/* Wait till HSE is ready and if Time out is reached exit */
do
{
HSEStatus = RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

解决办法:

1.打开stm32f10x.h,找到如下一行:

#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*!< Time out for HSE start up */

2.将超时时间HSE_STARTUP_TIMEOUT改长一些,这里我将0x0500改为0xF500

3.重新编译下载;

问题解决!

欢迎批评吐槽与讨论!

  • 20
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值