huangjiayin 发表于 2014-11-13 17:45:19

换了另一块板,测试结过还是一样,是不是哪里设置出了问题?

duanks 发表于 2014-11-13 18:21:38

为何非要用寄存器,改库函数试试,不行就换晶振,以前焊电路板时就把晶振烫坏过一次

Veiko 发表于 2014-11-13 21:18:37

huangjiayin 发表于 2014-11-13 15:40
多谢3位的回答,我是操作寄存器的。现逻辑分析仪测出OSC-IN和OSC-OUT没波形,电压为零 ...

仔细阅读一下时钟部份的资料,看看有没有什么关键配置没有打开,同时更换晶振和起振电容(一般除了容值相差很大的情况才会不起振),检测电路连接

Veiko 发表于 2014-11-13 21:20:34

huangjiayin 发表于 2014-11-13 15:44
烧写程序成功,用J-LINK仿真器设置断点,连第1条指令不执行,这进一步说明晶振没起振了
...

这种情况有可能是工程(软件部份,IDE处理时的问题)复制代码重新建立一个工程试,我遇到过这种情况,但比较少一般,我在使用5.12版本做STM32F103时遇到过仿真不动的情况

arm8686 发表于 2014-11-14 11:39:53

huangjiayin 发表于 2014-11-13 15:40
多谢3位的回答,我是操作寄存器的。现逻辑分析仪测出OSC-IN和OSC-OUT没波形,电压为零 ...

我觉得还是使用示波器看吧。逻辑分析仪未必能够看到峰峰值较小的正弦波。

huangjiayin 发表于 2014-11-14 17:34:38

多谢各位的回答,我查了原子网上的资料,说是那2个匹配电容太大,去掉试一下,结果是晶振2脚还是高电平(逻辑分析仪测出),但数字万用表是显示0.也重建了工程,结过还是一样.我是抄原子的,只是配置向量表那几条语句屏蔽了,不会因为这里吧?---因为刚接触STM32,不熟它。打开配置向量表那几条语句会报警的,配置向量表那几条语句内容如下:
#ifdefVECT_TAB_RAM
                MY_NVIC_SetVectorTable(0x20000000, 0x0);
#else   
                MY_NVIC_SetVectorTable(0x08000000,0x0);
#endif*

huangjiayin 发表于 2014-11-14 17:44:39

我的程序内容很少,如下:
int main(void)
{
         Stm32_Clock_Init(6);            
         while(1)
         {
            
         }
}

huangjiayin 发表于 2014-11-14 17:54:56

现重贴MYRCC_DeInit函数,我把配置向量表屏蔽了,见下
void MYRCC_DeInit(void)
{       
        RCC->APB1RSTR = 0x00000000;//复位结束                       
        RCC->APB2RSTR = 0x00000000;
          
        RCC->AHBENR = 0x00000014;//睡眠模式闪存和SRAM时钟使能.其他关闭.          
        RCC->APB2ENR = 0x00000000; //外设时钟关闭.                          
        RCC->APB1ENR = 0x00000000;   
        RCC->CR |= 0x00000001;   //使能内部高速时钟HSION                                                                                                                              
        RCC->CFGR &= 0xF8FF0000;   //复位SW,HPRE,PPRE1,PPRE2,ADCPRE,MCO                                       
        RCC->CR &= 0xFEF6FFFF;   //复位HSEON,CSSON,PLLON
        RCC->CR &= 0xFFFBFFFF;   //复位HSEBYP                     
        RCC->CFGR &= 0xFF80FFFF;   //复位PLLSRC, PLLXTPRE, PLLMUL and USBPRE
        RCC->CIR = 0x00000000;   //关闭所有中断               
        //配置向量表       
/*                          
#ifdefVECT_TAB_RAM
        MY_NVIC_SetVectorTable(0x20000000, 0x0);
#else   
        MY_NVIC_SetVectorTable(0x08000000,0x0);
#endif*/
}

huangjiayin 发表于 2014-11-14 17:57:15

duanks,我对库函数很陌生,现也没有现成的STM32F030K6函函数例子来测试

huangjiayin 发表于 2014-11-14 17:58:18

现跳到while(!(RCC->CR>>17)); 这条指令就不往下走了。

void Stm32_Clock_Init(uint8_t PLL)
{   
            uint8_t temp=0;   
            MYRCC_DeInit();                               复位并配置向量表
             RCC->CR|=0x00010000;                   选用外部晶振
            while(!(RCC->CR>>17));                   等待外部时钟就绪
            RCC->CFGR=0X00000400;            
            PLL-=2;                        
            RCC->CFGR|=PLL<<18;                     倍频到48MHZ         
            RCC->CFGR|=1<<16;                        PLLSRC ON
            FLASH->ACR|=0x32;                        
            RCC->CR|=0x01000000;                     PLLON(Bit24)   
            while(!(RCC->CR &=0X02000000));   等待 PLLPLLPLL锁
            RCC->CFGR|=0x00000002;               PLL作为系统时钟
            while(temp!=0x02)                            等待 PLLPLLPLL作为系统时钟设置成功   
            {   
                     temp=RCC->CFGR>>2;            
                     temp&=0x03;                  
            }                  
         RCC->APB2ENR|=1<<0;                   使能SYSCFG时钟
                              
}
页: 1 [2] 3
查看完整版本: STM32F030K6外部晶振不工作,查不出原因