嵌入式STM32F10学习 — 跑马灯实验

使用蓝桥杯CT117E板子
库函数版本

一.硬件连接

1.LED灯电路图

在这里插入图片描述

2.基本知识

— GPIO输出方式:推挽输出
— IO口输出高电平,LED灭,输出低电平,LED点亮。
— 锁存器高电平打开,低电平关闭

二.配置步骤

在这里插入图片描述
电路图对应

     锁存口:LE —— N LE —— M PD2
     LED灯 :D1~D8—— H D0~H D7—— M PC8~M PC15

三.代码

1.IO口操作,只对单一的IO口

	#define LED0 PCout(8)   
	#define LED1 PCout(9)
	#define LED2 PCout(10)
	#define LED3 PCout(11)
	#define LED4 PCout(12)
	#define LED5 PCout(13)
	#define LED6 PCout(14)
	#define LED7 PCout(15)

2.控制端口输出高低电平控制LED亮灭

	void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//输出高电平
	void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)//输出低电平

3.GPIO_Init输入参数详解

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*GPIO_InitStruct)

功能描述: 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器

输入参数1: GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设

输入参数2: GPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息

由此我们知道第二个参数“&GPIO_InitStructure”包含的是外设GPIO的配置信息,主函数开头我们进行了这样一个私有数据声明:

    GPIO_InitTypeDef  GPIO_InitStructure;

顺藤摸瓜,我们在头文件“stm32f10x_gpio.h”看到对GPIO_InitTypeDef 的定义:

         typedef struct
        {
                uint32_t GPIO_Pin;             
                                      
               GPIOMode_TypeDef GPIO_Mode;    

               GPIOSpeed_TypeDef GPIO_Speed;  

               GPIOOType_TypeDef GPIO_OType;  

               GPIOPuPd_TypeDef GPIO_PuPd;    
        }GPIO_InitTypeDef;

在这个之前,我已经对GPIO_InitTypeDef中的各个参数进行了定义,对应的正是void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)输入参数2的描述“指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息”。

4.源文件

—— led.c文件

/********************************* 
1.锁存口:LE —— N LE —— M PD2
  LED灯 :D1~D8—— H D0~H D7—— M PC8~M PC15

2.IS_FUNCTION_STATE(STATE)是用于状态参数判断的  在函数中会调用它来判断你输入的状态参数
  是不是ENABLE DISABLE之一  如果你输入的参数是他俩其中的一个  那么参数是合法的  运算结果就是1
  如果参数不合法那运算结果就为0了
*********************************/
#include "led.h"

void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

    //LED
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);	 //使能GPIOC端口时钟	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12
								  |GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //模式设置为推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);

	//锁存器
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);	 //使能GPIOD端口时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOD,&GPIO_InitStructure);

	GPIO_SetBits(GPIOC,GPIO_Pin_All);				 //将LED端口都设为高电平,熄灭LED

}	

—— led.h文件

/************************************
头文件中使用#ifndef #define #endif条件编译,避免头文件内容重复定义
/
	#ifndef 字符串
	#define 上述字符串
	#endif
/
一般放在头文件里面,作用就是以防你在.c文件里面不小心重复包含头文件的时候不会报错
*************************************/
#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"

void LED_Init(void); //函数声明

#endif

—— 主函数main.c

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
	LED_Init();
	while(1)
	{
		GPIO_SetBits(GPIOD,GPIO_Pin_2);
		GPIO_ResetBits(GPIOC,GPIO_Pin_8);
		GPIO_ResetBits(GPIOD,GPIO_Pin_2);				
	}
}


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值