#include <stm32f10x_lib.h> #include "system.h" //LED端口定义#define LED0 PAout(4)// PA4void Gpio_Init(void); int main(void){ Rcc_Init(9); //系统时钟设置 Gpio_Init(); //初始化与LED连接的硬件接口 while(1) { LED0=0; delay(300000); //延时300ms LED0=1; delay(300000); } }void Gpio_Init(void){ RCC->APB2ENR|=1<<2; //使能PORTA时钟 GPIOA->CRL&=0XFFF0FFFF; GPIOA->CRL|=0X00030000;//PA4 推挽输出 GPIOA->ODR|=1<<4; //PA4 输出高 }
#include "stm32f10x.h"void RCC_Configuration(void);void GPIO_Configuration(void);void delay(vu32 n); //延时函数int main(void){ RCC_Configuration(); GPIO_Configuration(); while(1){ GPIO_SetBits(GPIOA,GPIO_Pin_4); //调用库函数 将LED_1 置1 输出高电平 delay(2000000); GPIO_ResetBits(GPIOA,GPIO_Pin_4); delay(2000000); }}void GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; //结构体 初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA , &GPIO_InitStructure); }void delay(vu32 n){ while(--n);}void RCC_Configuration(void){ /* 定义枚举类型变量 HSEStartUpStatus */ ErrorStatus HSEStartUpStatus; /* 复位系统时钟设置*/ RCC_DeInit(); /* 开启HSE*/ RCC_HSEConfig(RCC_HSE_ON); /* 等待HSE起振并稳定*/ HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* 判断HSE起是否振成功,是则进入if()内部 */ if(HSEStartUpStatus == SUCCESS) { /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */ RCC_PCLK2Config(RCC_HCLK_Div1); /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* 设置FLASH延时周期数为2 */ //FLASH_SetLatency(FLASH_Latency_2); /* 使能FLASH预取缓存 */ //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* 使能PLL */ RCC_PLLCmd(ENABLE); /* 等待PLL输出稳定 */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); /* 选择SYSCLK时钟源为PLL */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 等待PLL成为SYSCLK时钟源 */ while(RCC_GetSYSCLKSource() != 0x08); } /* 打开APB2总线上的GPIOA时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); }
联系客服