打印

STM32不能用11.0592的晶振?

[复制链接]
7170|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
neuq521|  楼主 | 2009-11-20 18:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我的芯片是STM32F101RBT6,接外部的11.0592的晶振后程序可以运行,但是在调试窗口中看到的OSC的频率还是8M的,并且通过串口发送出去的数据也不正确。这是什么原因呢?
明明我都把HSI关掉了,程序也能运行,这说明外部晶振也已经运行了啊,但是为什么MDK显示的确是8M呢?

1111.JPG (97.67 KB )

1111.JPG
沙发
neuq521|  楼主 | 2009-11-20 18:13 | 只看该作者
高手帮我看一下设置的哪里有问题呢?
我都换成12M的晶振了,但是MDK中还是显示的OSC为8M。崩溃啊。。。。。。。

使用特权

评论回复
板凳
香水城| | 2009-11-20 18:18 | 只看该作者
这么一点困难就要崩溃啦,神经太脆弱了吧?:lol

改变外部时钟频率后,还要相应地改变程序中的参数,软件不会自动检测晶振频率的。

以前有很多这种帖子,你找找看。

使用特权

评论回复
地板
neuq521|  楼主 | 2009-11-20 18:23 | 只看该作者
呵呵,谢谢香主,我忙活了差不多一下午了,还没搞定。
以下是我程序中的RCC配置代码
/* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);
       
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* PLLCLK = 11.0592MHz * 3 = 33.1776 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_3);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
        RCC->CR &= ~(u32)0x00000001;//
  }
除了这些参数,还需要设置别的什么吗?软件中在哪里修改晶振频率呢?

使用特权

评论回复
5
neuq521|  楼主 | 2009-11-20 18:30 | 只看该作者
本帖最后由 neuq521 于 2009-11-20 19:14 编辑

HSE_Value,你藏的好深啊!

使用特权

评论回复
6
neuq521|  楼主 | 2009-11-20 19:41 | 只看该作者
好像还是不行啊,将HSE_Value的值改为12M之后,重新下载程序调试,在MDK中看到的OSC怎么还是8M呢?
还需要改哪里呢?
RCC_GetClocksFreq()这个函数要在哪里用呢?HSE_Value也只在这个函数里用到了。

使用特权

评论回复
7
neuq521|  楼主 | 2009-11-20 20:11 | 只看该作者
改了HSE_Value的值为12M后,现在的串口收到的数据倒是正确了,单就是在MDK中显示的OSC总是8M,这是什么原因呢?

使用特权

评论回复
8
linjing| | 2009-11-22 21:07 | 只看该作者
配置一下Keil的参数

使用特权

评论回复
9
zwll| | 2009-11-22 23:32 | 只看该作者
加油啊,别被吓到了

使用特权

评论回复
10
neuq521|  楼主 | 2009-11-23 10:48 | 只看该作者
TO8楼:如何配置keil的参数呢?
我发现只有更改了keil安装文件夹下的stm32f10x_conf.h文件中HSE_Value值,程序才能正常运行。
那以后要是有两个不同的产品用了不同的晶振,每次编译两个程序的时候都要把HSE_Value的做修改,这样岂不是很麻烦吗?

使用特权

评论回复
11
香水城| | 2009-11-23 11:40 | 只看该作者
如果有两个不同的产品用了不同的硬件配置,比如使用了不同的晶振或芯片配置,为避免混淆,最好的办法是把用到的系统文件拷贝到字节的项目下,这样不同的项目都使用自己专用的头文件。

使用特权

评论回复
12
neuq521|  楼主 | 2009-11-23 11:45 | 只看该作者
终于发现了,原来是在Options for target下的target中的Xtal栏中可以设置晶振为11.0592M。

使用特权

评论回复
13
gx_huang| | 2009-11-23 19:24 | 只看该作者
做51时就有这个选项,仿真是软件的?

使用特权

评论回复
14
sinadz| | 2009-11-23 21:25 | 只看该作者
不可能吧

使用特权

评论回复
15
neuq521|  楼主 | 2009-11-24 08:10 | 只看该作者
原先没有用过keil,所以对这个不太熟悉。
在Options for target下的target中的Xtal栏中设置晶振为11.0592M后,只是调试时keil会在PRCC这个界面中显示正确的各个时钟。

使用特权

评论回复
16
baidudz| | 2009-11-24 09:08 | 只看该作者
呵呵,问题解决了就好

使用特权

评论回复
17
ploto| | 2009-12-3 15:28 | 只看该作者
呵呵,我也出现过这种情况。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

97

帖子

1

粉丝