STM32F103ZE跑马灯基于库函数

头文件:stm32f10x_gpio.h

源文件:stm32f10x_gpio.c

1个初始化函数:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

typedef struct
   {
     uint16_t GPIO_Pin;                           //指定要初始化的IO口         
    GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度
    GPIOMode_TypeDef GPIO_Mode;    //设置工作模式:8种中的一个
   }GPIO_InitTypeDef;

例:初始一个函数

GPIO_InitTypeDef  GPIO_InitStructure;
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);  //根据设定参数初始化GPIOB.5

2个读取输入电平函数:实际操作的是GPIOx_IDR寄存器
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输入电平

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有io口输入电平

2个读取输出电平函数:实际操作的是GPIO_ODR寄存器。
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输入电平

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有io口输入电平

4个设置输出电平函数:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);实际操作BSRR寄存器。

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);实际操作的BRR寄存器。

扫描二维码关注公众号,回复: 8967769 查看本文章

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

常用前两个

实现跑马灯步骤:

1.使能IO口时钟。调用函数RCC_APB2PeriphColckCmd();//不同的IO组,调用的时钟使能函数不一样。

2.初始化IO口模式。调用函数GPIO_Init();

3.操作IO口,输出高低电平。

GPIO_SetBits();//就是高电平

GPIO_ResetBits();//就是低电平

实际操作:(源码在最后代码块

1.新建一个文件夹,下面包括.c和.h两个文件,按照之前方法的添加到工程中,记得添加路径。

2.调用时钟使能函数 RCC_APB2PeriphColckCmd();

调用的时钟使能函数

图片

3.检索相关参数

图片图片图片图片图片

4.初始化IO口模式。调用函数GPIO_Init(); 并检索相关参数。

图片图片图片图片

5.参数检索copy完成,如下图所示。

图片

6.编辑.h文件

图片

7.新建添加路径编辑main.c

图片

烧录测试。测试成功。

图片图片

源码:

main.c

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
delay_init();
LED_init();
 
while(1){
  GPIO_SetBits(GPIOB,GPIO_Pin_5);
  GPIO_SetBits(GPIOE,GPIO_Pin_5);
  delay_ms(500);
   
  GPIO_ResetBits(GPIOB,GPIO_Pin_5);
  GPIO_ResetBits(GPIOE,GPIO_Pin_5);
  delay_ms(500);
}

}

led.h

#ifndef __led_h
#define __led_h
void LED_init(void);
#endif

led.c

#include "led.h"
#include "stm32f10x.h"
void LED_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//GPIOE
  
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOB,&GPIO_InitStructure);
  GPIO_SetBits(GPIOB,GPIO_Pin_5);
  
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOE,&GPIO_InitStructure);
  GPIO_SetBits(GPIOE,GPIO_Pin_5);
 

}

发布了31 篇原创文章 · 获赞 28 · 访问量 9502

猜你喜欢

转载自blog.csdn.net/visual_eagle/article/details/104139583