换了另一块板,测试结过还是一样,是不是哪里设置出了问题?
为何非要用寄存器,改库函数试试,不行就换晶振,以前焊电路板时就把晶振烫坏过一次
huangjiayin 发表于 2014-11-13 15:40
多谢3位的回答,我是操作寄存器的。现逻辑分析仪测出OSC-IN和OSC-OUT没波形,电压为零 ...
仔细阅读一下时钟部份的资料,看看有没有什么关键配置没有打开,同时更换晶振和起振电容(一般除了容值相差很大的情况才会不起振),检测电路连接
huangjiayin 发表于 2014-11-13 15:44
烧写程序成功,用J-LINK仿真器设置断点,连第1条指令不执行,这进一步说明晶振没起振了
...
这种情况有可能是工程(软件部份,IDE处理时的问题)复制代码重新建立一个工程试,我遇到过这种情况,但比较少一般,我在使用5.12版本做STM32F103时遇到过仿真不动的情况
huangjiayin 发表于 2014-11-13 15:40
多谢3位的回答,我是操作寄存器的。现逻辑分析仪测出OSC-IN和OSC-OUT没波形,电压为零 ...
我觉得还是使用示波器看吧。逻辑分析仪未必能够看到峰峰值较小的正弦波。
多谢各位的回答,我查了原子网上的资料,说是那2个匹配电容太大,去掉试一下,结果是晶振2脚还是高电平(逻辑分析仪测出),但数字万用表是显示0.也重建了工程,结过还是一样.我是抄原子的,只是配置向量表那几条语句屏蔽了,不会因为这里吧?---因为刚接触STM32,不熟它。打开配置向量表那几条语句会报警的,配置向量表那几条语句内容如下:
#ifdefVECT_TAB_RAM
MY_NVIC_SetVectorTable(0x20000000, 0x0);
#else
MY_NVIC_SetVectorTable(0x08000000,0x0);
#endif*
我的程序内容很少,如下:
int main(void)
{
Stm32_Clock_Init(6);
while(1)
{
}
}
现重贴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*/
}
duanks,我对库函数很陌生,现也没有现成的STM32F030K6函函数例子来测试
现跳到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时钟
}