一直知道有这个网站存在,不过没怎么来过,还提一下,哈哈,我曾经在网站根据地正门口前仰望过 21IC 这个**,我在天河,嘿嘿
最近在学STM32,遇到问题搜一下,被百度引领到了这里,看了一个帖子,感到这里的版主还是特别给力的,很有耐心。
好了,进入正题。
看了一段时间的书,开始折腾手头的板子,用的芯片是103ZE6。按照自己的理解配置好时钟后,发现程序不能表达了。硬件仿真一下,发现在将时钟切换成PLL72M输出后,下一步就无法执行了。对照着正点原子的程序,对比两个程序切换完时钟后的相应寄存器的设置,发现时钟并没有配置错。(当然,我只观察了RESET和CLOCK这个窗口、一些IO窗口和MDK左边的一些寄存器,不排除可能存在其他我还不了解的潜在影响。)
不明白为什么,切换完时钟后,单击下一步,汇编区里面的代码就全变成了FFFF FFFF;undefined这样的字眼。请问是怎么回事呢?
下面是自己的程序。#include "sys.h"
void Systick()
{
SysTick->VAL = 0X00;
SysTick->CTRL |= 0X01;
while(!((SysTick->CTRL)>>16)&0X01);
SysTick->CTRL =0X00;
}
void LED_Init(void)
{
RCC->APB2ENR|=1<<3; //使能PORTB时钟
RCC->APB2ENR|=1<<6; //使能PORTE时钟
GPIOB->CRL&=0XFF0FFFFF;
GPIOB->CRL|=0X00300000;//PB.5 推挽输出
GPIOB->ODR|=1<<5; //PB.5 输出高
GPIOE->CRL&=0XFF0FFFFF;
GPIOE->CRL|=0X00300000;//PE.5推挽输出
GPIOE->ODR|=1<<5; //PE.5输出高
}
int main()
{
RCC->CR = 0X01; //HSION
while(!((RCC->CR>>1)&0X01)); //wait for HSIRDY
RCC->CR |= 0X00010080; //HSEON
while(!((RCC->CR>>17)&0X01)); //wait for HSERDY
RCC->CFGR = 0X001D0400; //PLLXTPRE cleared,PLLSRC seted,PLLMUL = 9
RCC->CR |= 0X01000000; //PLLON
while(!((RCC->CR>>25)&0X01)); //wait for PLLRDY
RCC->CFGR |= 0X02; //change system clock
while(!((RCC->CFGR>>3)&0X01));
LED_Init();
SysTick->LOAD = 9000*1000;
while(1)
{
GPIOB->ODR &= ~(0<<5);
Systick();
GPIOB->ODR = 1<<5;
Systick();
}
}
新人分不多,允许我小吝啬一下哈,谢谢各位。 |