你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F100C8T6B的时钟问题

[复制链接]
ligongxiaobie 提问时间:2015-9-19 18:15 /
本帖最后由 ligongxiaobie 于 2015-9-19 21:18 编辑

问题如下:
我自己焊的两块板子一个外部晶振16MHZ,一个外部晶振24MHZ。
如果不更改时钟初始化函数,则板子不能启动,改变时钟函数后,发现貌似是用了内部额8MHZ的晶振,这个是通过我自己用SYSTICK和TIM3验证的,比如我现在的程序在我16MHZ和24MHZ板子上运行是同样的现象,所以我认为是使用了内部8MHZ晶振。
串口发送与接收数据时正确的。
我启动文件是startup_stm32f10x_md_vl.s,在Options define 里的宏为STM32F10X_MD_VL.USE_STDPERIPH_DRIVER
设置时钟函数如下(代码中注释的中文字会出现乱码,这里删掉了,同时附上图片和代码附件):
  1. void SystemInit (void)
  2. {
  3.                 RCC_DeInit();
  4.                 RCC_HSEConfig(RCC_HSE_ON);
  5.                 if(RCC_WaitForHSEStartUp() == SUCCESS)
  6.                 {
  7.                                 RCC_HCLKConfig(RCC_SYSCLK_Div1);
  8.                                 RCC_PCLK2Config(RCC_SYSCLK_Div1);
  9.                                 RCC_PCLK1Config(RCC_SYSCLK_Div1);
  10.                                 
  11.                                 FLASH_SetLatency(FLASH_Latency_2);
  12.                                 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  13.                                 
  14.                                 RCC_PLLConfig(RCC_PREDIV1_Div2, RCC_PLLMul_6);
  15.                                 RCC_PLLCmd(ENABLE);


  16.                 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ;
  17.                 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK );
  18.                 while(RCC_GetSYSCLKSource() != 0x08);
  19. //                        RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);                        
  20.                         ;;;;;

  21.          }
复制代码
现在通过RCC_PLLConfig(RCC_PREDIV1_Div2, RCC_PLLMul_6);这段代码,使我的主频为24MHZ,但很明显,我想用外部晶振使主频达到24MHZ...
请问各位前辈,如何能切换为外部HSE时钟呢?


QQ截图20150919181341.png

24MHZ.zip

下载

6.77 MB, 下载次数: 96, 下载积分: ST金币 -1

STM32F100完全手册.pdf

下载

6.27 MB, 下载次数: 83, 下载积分: ST金币 -1

<
收藏 评论21 发布时间:2015-9-19 18:15

举报

21个回答
ligongxiaobie 回答时间:2015-9-19 18:19:15
不知大家遇没遇到过类似的问题呢,我明明打开的是HSE,但是貌似用的是HSI啊!!
chifen 回答时间:2015-9-19 18:56:44
STM32  有 倍频功能   ,比如 你用的 16M晶振   采用6倍频的算那就是 96M ,这个芯片最大是72M,超了,
你好我好大家好! 回答时间:2015-9-19 19:32:25
楼上说的有理
ligongxiaobie 回答时间:2015-9-19 21:20:24
ligongxiaobie 发表于 2015-9-19 18:19
不知大家遇没遇到过类似的问题呢,我明明打开的是HSE,但是貌似用的是HSI啊!! ...

谢谢前辈的回答。
但是我用的是STM32F100系列芯片,主频最大就是24MHZ, 如果超频的话,串口应该就不好使了吧,但是我的串口一直都是好使的。。。。应该不是超频了。。。
不知前辈是否遇到过类似问题呢?
ligongxiaobie 回答时间:2015-9-19 21:21:17

前辈你好。
但是我用的是STM32F100系列芯片,主频最大就是24MHZ, 如果超频的话,串口应该就不好使了吧,但是我的串口一直都是好使的。。。。应该不是超频了。。。
不知前辈是否遇到过类似问题呢?
chifen 回答时间:2015-9-20 07:07:56
当外频工作不正常时,比如超频过高或晶振没有起振 会自动切换到内部晶振,保证系统运行正常
ligongxiaobie 回答时间:2015-9-20 09:22:02
本帖最后由 ligongxiaobie 于 2015-9-20 09:23 编辑
chifen 发表于 2015-9-20 07:07
当外频工作不正常时,比如超频过高或晶振没有起振 会自动切换到内部晶振,保证系统运行正常 ...

谢谢前辈您的回复,我用示波器测试我的晶振引脚,是正常的频率,比如24MHZ的板子晶振就是24MHZ,
应该算是外部晶振正常起振吧!
但是按照上面的倍频代码,现在的主频用TIM3测试过,就是24MHZ。可是要注意,我的代码是HSE两分频,然后PLL六倍频,如果这时主频是24MHZ,那么就应该是8MHZ的时钟输入。
开始我个人认为如果是24MHZ的外部输入,那么我用两分频,然后两倍频,那么输出24MHZ,但实际上用TIM3测试是8MHZ的主频。以上现象同样出现在外部晶振是16MHZ的板子上。
一切的前提是我的串口接收和发送数据是正常的,可以证明我的时钟系统没出现混乱!
不知前辈是否遇到这样的问题呢??
chifen 回答时间:2015-9-20 09:37:43
你看一下这个图应该就明白了
24M.png
ligongxiaobie 回答时间:2015-9-20 10:08:24
chifen 发表于 2015-9-20 09:37
你看一下这个图应该就明白了

我看了一下前辈您发的图,这样说吧,最开始的倍频是这样做的RCC_PLLConfig(RCC_PREDIV1_Div2, RCC_PLLMul_2);
我自己自以为是24MHZ两分频,然后两倍频还是24MHZ。
实际上输出的是8MHZ,
而改为RCC_PLLConfig(RCC_PREDIV1_Div2, RCC_PLLMul_6);,主频变为24MHZ了,而F100系列主频最大是24MHZ,再倍频我不知道会出现什么样的现象。
还有,前辈,芯片手册我也看过,按照我的程序来说,没超频,应该跟HSI没关系吧!
123下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版