新手上路
- 积分
- 47
- 金钱
- 47
- 注册时间
- 2014-7-8
- 在线时间
- 0 小时
|
原子哥一开篇就讲SYSTEM文件夹里面的复杂程序,对于初学者是看的云里雾里啊。本人经过两周时间,把原子哥的文件夹弄了个透,并简化代码,像操作单片机一样简单。
#include"stm32f10x.h"
void Clock_Init()
{
u32 temp;
RCC->CR|=0X01<<16; //使能HSE(外部高速时钟)
while(!((RCC->CR>>17)&0X01));//等待使能成功
RCC->CFGR&=0XFFFFFF0F;//AHB不分频
RCC->CFGR|=0X04<<8;//HCLK2分频作为APB1
RCC->CFGR&=0XFFFFC7FF;//APB2不分频
RCC->CFGR&=~(0X01<<17);//HSE不分频作为PLL输入时钟
RCC->CFGR|=0X07<<18;//PLL9倍频输出
RCC->CFGR|=0X01<<16;//HSE作为PLL时钟源
FLASH->ACR|=0X32;
RCC->CR|=0X01<<24;//PLL开启
while(!((RCC->CR>>25)&0X01));//等待PLL开启
RCC->CFGR|=0X02;//设置PLL为系统时钟源
while(temp!=0x02) //等待PLL设置时钟源成功
{
temp=RCC->CFGR>>2;
temp=temp&0x03;
}
}
void delay()
{
u32 x=1000000;
while(x--);
}
int main()
{
Clock_Init();
RCC->APB2ENR|=0X01<<3;//使能GOIOB时钟
RCC->APB2ENR|=0X01<<6;//使能GPIOE时钟
GPIOB->CRL&=0XFFF0FFFFF;
GPIOB->CRL|=0XFFF3FFFFF;//PB.5通用推挽输出模式,50MHz
//操作某几位时,一般先清零再写数据。
GPIOB->ODR|=0X01<<5;//先关闭DS0灯
GPIOE->CRL&=0XFFF0FFFFF;
GPIOE->CRL|=0XFFF3FFFFF;//PE.5通用推挽输出模式,50MHz
GPIOE->ODR|=0X01<<5;//先关闭DS1灯
for(;;)
{
GPIOB->BRR|=0X01<<5;//PB5低电平DS0亮
delay();
GPIOB->ODR|=0X01<<5;//PB5高电平DS0灭
GPIOE->BRR|=0X01<<5;//PE5低电平DS1亮
delay();
GPIOE->ODR|=0X01<<5;//PE5低电平DS1亮
}
}
是不是和操作单片机一样简单,后面的话,再慢慢的分模块,这样的学习更有助于理解。
|
|