型号:STM32F103ZE
图片:
LED部分原理图:
主函数(main.c)
//main.c
#include "stm32f10x.h"
#include "bsp-led2.h"
int main(void)
{
LED_GPIO_Config(); //LED端口初始化
GPIO_SetBits(LED0_GPIO_PORT,LED0_GPIO_PIN); //将电位设置为高电平,灯被熄灭
GPIO_ResetBits(LED0_GPIO_PORT,LED0_GPIO_PIN); //将电位设置为低电平,灯被点亮
GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
}`
bsp-led2.c
//bsp-led2.c
#include "bsp-led2.h"
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct; //定义GPIO_InitTypeDef类型的结构体
RCC_APB2PeriphClockCmd(LED0_GPIO_CLK|LED1_GPIO_CLK,ENABLE); //PB,PE端口时钟使能
GPIO_InitStruct.GPIO_Pin = LED0_GPIO_PIN; //分别设置选择要控制的GPIO引脚
GPIO_InitStruct.GPIO_Pin = LED1_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //设置引脚模式为通用推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //设置IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStruct); //调用库函数,初始化GPIO
GPIO_Init(GPIOE, &GPIO_InitStruct);
}
bsp-led2.h
//bsp-led2.h
#ifndef _BSP_LED_H
#define _BSP_LED_H
#include "stm32f10x.h"
//LED0 D0 PB5
#define LED0_GPIO_PIN GPIO_Pin_5 //连接到SCL时钟线的GPIO
#define LED0_GPIO_PORT GPIOB //设置GIPO端口
#define LED0_GPIO_CLK RCC_APB2Periph_GPIOB //设置GIPO端口
//LED1 D1 PE5
#define LED1_GPIO_PIN GPIO_Pin_5 //同上
#define LED1_GPIO_PORT GPIOE
#define LED1_GPIO_CLK RCC_APB2Periph_GPIOE
void LED_GPIO_Config(void);
#endif //-LED-H
运行结果:烧录程序结果:
实物图:
流水灯【主函数部分】
#include "bsp-led2.h"
#include "stm32f10x.h"
#include "delay.h"
int main(void)
{
LED_GPIO_Config(); //LED端口初始化
delay_init(); //延迟函数初始化
while(1)
{
GPIO_SetBits(LED0_GPIO_PORT,LED0_GPIO_PIN); //LED0与LED1交替闪烁
delay_ms(500);
GPIO_ResetBits(LED0_GPIO_PORT,LED0_GPIO_PIN);
// delay_ms(500);
GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
delay_ms(500);
GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
// delay_ms(500);
}
}
位带操作版本
#include "bsp-led2.h"
#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"
int main(void)
{
LED_GPIO_Config(); //LED端口初始化
delay_init(); //延迟函数初始化
while(1)
{
PBout(5)=1;
delay_ms(500);
PBout(5)=0;
PEout(5)=1;
delay_ms(500);
PEout(5)=0;
}
}
/*
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出
#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C // IO控映射地址
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
*/