打印

STM32难搞

[复制链接]
3621|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
the_ether|  楼主 | 2013-3-8 11:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
好不容易自己做了块电路板出来,结果程序能烧写进去,就是不能正常工作。检查出来,结果就是,系统时钟函数的问题,一旦我把这个屏蔽掉,就能正常工作。系统时钟函数如下:
void Stm32_Clock_Init(u8 PLL)
{
        unsigned char temp=0;   
        MYRCC_DeInit();                  //复位并配置向量表
        RCC->CR|=0x00010000;  //外部高速时钟使能HSEON
        while(!(RCC->CR>>17));//等待外部时钟就绪
        RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
        PLL-=2;//抵消2个单位
        RCC->CFGR|=PLL<<18;   //设置PLL值 2~16
        RCC->CFGR|=1<<16;          //PLLSRC ON
        FLASH->ACR|=0x32;          //FLASH 2个延时周期

        RCC->CR|=0x01000000;  //PLLON
        while(!(RCC->CR>>25));//等待PLL锁定
        RCC->CFGR|=0x00000002;//PLL作为系统时钟         
        while(temp!=0x02)     //等待PLL作为系统时钟设置成功
        {   
                temp=RCC->CFGR>>2;
                temp&=0x03;
        }   
}                    


沙发
uet_cache| | 2013-3-8 11:52 | 只看该作者
寄存器配置的话,如果CPU不同,好像有点点差别。你可以 试着用库函数做。

使用特权

评论回复
板凳
uet_cache| | 2013-3-8 11:52 | 只看该作者
另外,上面是配的外部时钟,如果你外部时钟电路不对,就死在等待语句里了。

使用特权

评论回复
地板
the_ether|  楼主 | 2013-3-8 12:45 | 只看该作者
uet_cache 发表于 2013-3-8 11:52
另外,上面是配的外部时钟,如果你外部时钟电路不对,就死在等待语句里了。 ...

为了避免硬件上的问题。我现在已经换成8MHZ的晶振了。。我准备再找一下系统时钟函数的问题

使用特权

评论回复
5
hawksabre| | 2013-3-8 16:46 | 只看该作者
呵呵  谢谢楼主的共享资料  不同的型号  内部的结构好像不一样  所以需要采用不同的设置  这个需要注意一下   呵呵   直接使用官方的例程   看看  熟悉一下  应该就好了  呵呵

使用特权

评论回复
6
the_ether|  楼主 | 2013-3-8 17:16 | 只看该作者
hawksabre 发表于 2013-3-8 16:46
呵呵  谢谢楼主的共享资料  不同的型号  内部的结构好像不一样  所以需要采用不同的设置  这个需要注意一下 ...

哎。。真心搞不定了。这个问题我处理了两天,还是解决不了。同样的程序,在开发板上能运行,在我的电路板上就运行有错

使用特权

评论回复
7
SLEET1986| | 2013-3-8 17:21 | 只看该作者
the_ether 发表于 2013-3-8 17:16
哎。。真心搞不定了。这个问题我处理了两天,还是解决不了。同样的程序,在开发板上能运行,在我的电路板 ...

那肯定你的板子有问题了:o

使用特权

评论回复
8
the_ether|  楼主 | 2013-3-8 17:30 | 只看该作者
SLEET1986 发表于 2013-3-8 17:21
那肯定你的板子有问题了

最开始,我在怀疑是自己用了12M的晶振,而有是用的别人的函数,所以以为可能超频了,但是分析完系统函数后,程序应该没问题。。但是就在刚才,我突然发现了一个问题,晶振都不是要就两个电容么。。我的两个电容在物理上离晶振至少有2CM(这个电路具体叫啥,RC震荡还是,我基础太差啦)

使用特权

评论回复
9
the_ether|  楼主 | 2013-3-8 17:32 | 只看该作者
SLEET1986 发表于 2013-3-8 17:21
那肯定你的板子有问题了

我觉得应该就是这两个电容离晶振太远的原因。导致输出频率不对,从而影响了外设GPIO输出的频率。对应该就是这样

使用特权

评论回复
10
didida201210| | 2013-3-8 21:42 | 只看该作者
应该要越靠近越好还要离芯片越近越好

使用特权

评论回复
11
明月小厨| | 2013-3-9 03:40 | 只看该作者
万事开头难;只要**搞搞;不出3个月就差不多比较熟练了;

使用特权

评论回复
12
zhaoyu2005| | 2013-3-9 09:30 | 只看该作者
这不关stm32的事,是LZ的硬件基础不好

使用特权

评论回复
13
ABCDELF| | 2013-3-9 15:28 | 只看该作者
stm32不错啦
比lm3s系列的强多了

使用特权

评论回复
14
拿起书本| | 2013-3-9 16:02 | 只看该作者
ST给了个固件库大大降低了难度。
真要从寄存器入手,要折腾死的。

使用特权

评论回复
15
the_ether|  楼主 | 2013-3-9 17:03 | 只看该作者
拿起书本 发表于 2013-3-9 16:02
ST给了个固件库大大降低了难度。
真要从寄存器入手,要折腾死的。

我现在还是直接操作寄存器的。。我参考了原子的程序,感觉也没有啥难度啊。。用库太大了,函数太多,入栈出栈,会大大降低速度,而我是做显示屏的嘛,这样子应该是不行的。

使用特权

评论回复
16
xhtxzxw| | 2013-3-9 20:19 | 只看该作者
用官库呆妈吧,洗一洗就是了,把不必要的部分洗掉。
或许是晶体上那俩电容用的不合适吧?贴片小电容有个问题,没有容量标识,一不小心,可能容量就差数量级了。实验状态下,可把这俩祸害焊下来不用。

使用特权

评论回复
17
cjhk| | 2013-3-9 20:34 | 只看该作者
晶振的两个起振电容对晶振的可靠工作也有影响   这个还不知道  距离应该没有什么影响吧  个人认为这不是问题  呵呵

使用特权

评论回复
18
the_ether|  楼主 | 2013-3-9 21:55 | 只看该作者
xhtxzxw 发表于 2013-3-9 20:19
用官库呆妈吧,洗一洗就是了,把不必要的部分洗掉。
或许是晶体上那俩电容用的不合适吧?贴片小电容有个问 ...

回答正确,昨天已经检查出来时电容的问题,电容容值太大,不能起振

使用特权

评论回复
19
the_ether|  楼主 | 2013-3-9 21:55 | 只看该作者
cjhk 发表于 2013-3-9 20:34
晶振的两个起振电容对晶振的可靠工作也有影响   这个还不知道  距离应该没有什么影响吧  个人认为这不是问 ...

实验证明,距离在2CM以内没有特别的影响,明天做RTC实验。还不知道对RTC有影响没

使用特权

评论回复
20
明月小厨| | 2013-3-9 23:46 | 只看该作者
晶振只要有条件就尽可能放近些,好处很多;严格的还要包地;估计你也不会当一回事的;

使用特权

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

本版积分规则

个人签名:书到用时方恨少,事非经过不知难。

13

主题

95

帖子

0

粉丝