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

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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版