一,实现效果。
控制 miniSTM32 开发板上的两个 LED 实现一个类似跑马灯的效果。
二, 工程文件
1)USER部分
stm32f10x_it.c中主要用来定义部分中断服务函数。
System_stm32f10x.c主要定义SystemInit等时钟初始化函数。
2)HAREWARE部分
放置头文件函数
3)SYSTEM部分
常用函数包
4)CORE部分
固件库核心文件和启动文件
5)FWLIB部分
固件库源文件和头文件
三。硬件连接部分
![]()
![]()
PA8控制mini板红灯,PD2控制mini板的绿灯。
输出高电平,LED灭。
输出低电平,LED亮。
四. GPIO
1)模式
推挽模式
2)函数
1,初始化函数GPIO_Init(GPIOB,&GPIO_InitStructure);
2,读取输入电平函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);读取单个寄存器例如GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);读取PA5
uint16_t GPIO_ReadInputDataDate(GPIO_TypeDef* GPIOx);读取组寄存器,例如读取PA组
3,设置输出电平函数
void GPIO SetBits(GPIO_TypeDef* GPIOx,uint16_t GPIO_pin);设置某io口高电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx,uint16_t GPIO_pin);设置某io口低电平
五,步骤
1,使能对应的io口时钟。例:RCC_APB2Periph_GPIOA使能GPIOA
调用函数RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
2. 初始化io口模式,调用函数GPIO_Init();
3, 控制高低电平
GPIO_SetBits();
GPIO_ReseBits();
六,软件部分
led.c 文件部分
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
main.c
#include "stm32f10x.h"
#include "led.h"
#include "Delay.h"
int main(void)
{
LED_Init();
delay_init();
while(1){
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
delay_ms(500);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
delay_ms(500);
}
}