OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4791|回复: 6

STM32F103RC突然无法启动,重烧程序后正常

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2011-11-18
在线时间
0 小时
发表于 2013-3-19 14:45:05 | 显示全部楼层 |阅读模式
STM32的主控板一直都能正常工作,但一次做振动测试之后上电无法启动,测8M晶振能波形正常,反复开关机都无法启动,但重新烧写程序后就能工作了,请问哪位高手帮忙分析下什么原因导致的?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-19 15:22:14 | 显示全部楼层
晶振起振,说明程序已经运行了.
你下载一个最简单的代码测试下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2011-11-18
在线时间
0 小时
 楼主| 发表于 2013-3-19 19:19:01 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
晶振起振是在STM32F10x.s的启动代码里面配置之后就生效的吗?还是在main函数里初始化时钟控制寄存器之后才起振的,我看时钟控制寄存器RCC_CR的位18和位16是和外部晶振是否起振配置有关的,这两个位哪个决定外部晶振是否起振?“程序已经运行”是启动程序已经运行完了,还是已经转到main函数里面运行了?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-19 21:27:40 | 显示全部楼层
晶振起振,必须是程序开启了外部晶振,之后才起振的.所以可以判断你的程序是运行了的,只是看运行到哪里的问题.
stm32f10x.s是不会配置晶振的,一般是main函数里面,自己调用函数实现的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2011-11-18
在线时间
0 小时
 楼主| 发表于 2013-3-20 10:57:17 | 显示全部楼层
记错了,翻看原来的记录发现那次上电无法启动时,晶振是没有起振的,后来还做了把程序擦除和烧写的实验,发现只有烧写好程序时晶振才起振,是不是可以推断flash里面的程序已经出错了?还是启动程序出问题了?但启动程序是写死到芯片里面的吧
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-20 12:26:00 | 显示全部楼层
回复【5楼】miki_014:
---------------------------------
有待观察
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-1-2
在线时间
11 小时
发表于 2016-4-11 16:29:21 | 显示全部楼层
使用内部8M的时候才会出现。
将   while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);//等待HSI就绪   屏蔽
然后写入以下程序
while(1)
        {
        __nop();
        if(loop_a++ > 10000)
                {
                break;
                }
        }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-11 04:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表