目录
1.硬件连接
本代码所选择的硬件连接是将LED1连接在单片机的PB0端口上,将LED2连接在单片机的PB1端口上。
2.main函数部分代码呈现
#include "stm32f10x.h" //STM32Í·Îļþ
#include "sys.h"
#include "delay.h"
#include "led.h"
int main (void){//主程序
RCC_Configuration(); //时钟初始化¯
LED_Init();//LED初始化
while(1){
//方法一
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
delay_us(50000); //延时一秒
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0
delay_us(50000); //延时一秒
//方法二
// GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //取反LED1
// delay_ms(500); //延时一秒
//方法三
// GPIO_SetBits(LEDPORT,LED1); //LED1为高电平1
// delay_s(1); //延时一秒
// GPIO_ResetBits(LEDPORT,LED1); //LED1为低电平0
// delay_s(1); //延时一秒
}
}
3.led.c部分呈现
#include "led.h"
void LED_Init(void){ //LED灯接口初始化初始化
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //管脚初始化
GPIO_InitStructure.GPIO_Pin = LED1 | LED2; //选择端口号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO口的工作方式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO口的速度(2/10/50MHz)
GPIO_Init(LEDPORT, &GPIO_InitStructure);
}
4.led.h部分呈现
#ifndef __LED_H
#define __LED_H
#include "sys.h"
//#define LED1 PBout(0)// PB0
//#define LED2 PBout(1)// PB1
#define LEDPORT GPIOB //定义IO接口
#define LED1 GPIO_Pin_0 //定义IO接口
#define LED2 GPIO_Pin_1 //定义IO接口
void LED_Init(void);//初始化
#endif
5.延时函数呈现
delay.c
#include "delay.h"
#define AHB_INPUT 72 //请按RCC中设置的AHB时钟频率填写到这里(单位MHz)
void delay_us(u32 uS){ //uS微秒级延时程序(参考值即是延时数,72MHz时最大值233015)
SysTick->LOAD=AHB_INPUT*uS; //重装计数初值(当主频是72MHz,72次为1微秒)
SysTick->VAL=0x00; //清空定时器的计数器
SysTick->CTRL=0x00000005;//时钟源HCLK,打开定时器
while(!(SysTick->CTRL&0x00010000)); //等待计数到0
SysTick->CTRL=0x00000004;//关闭定时器
}
void delay_ms(u16 ms){ //mS毫秒级延时程序(参考值即是延时数,最大值65535)
while( ms-- != 0){
delay_us(1000); //调用1000微秒的延时
}
}
void delay_s(u16 s){ //S秒级延时程序(参考值即是延时数,最大值65535)
while( s-- != 0){
delay_ms(1000); //调用1000毫秒的延时
}
}
delay.h
#ifndef __DELAY_H
#define __DELAY_H
#include "sys.h"
void delay_s(u16 s);
void delay_ms(u16 ms);
void delay_us(u32 us);
#endif