STM32深度学习————4、跑马灯实验

前言

因攻城狮偷懒摸鱼,所以就跳过了工程模板的创建
直接上链接

链接:https://pan.baidu.com/s/1kshgin-_z9MSyxK3IplmZA
提取码:0123

在工程模板的基础上建立一个新的文件夹用于存放led.c和led.h。

一、硬件连接

STM32深度学习————4、跑马灯实验_第1张图片

正点原子STM32f103zet6

STM32深度学习————4、跑马灯实验_第2张图片

二、GPIO库函数介绍

1. 1个初始化函数:

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

作用:初始化一个或者多个IO口(同一组)的工作方式和速度。
该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的
时候有设置BSRR或者BRR寄存器

GPIOx: GPIOA~GPIOG
外设(包括GPIO)在使用之前,几乎都要先使能对应的时钟。
可以一次初始化一个IO组下的多个IO,前提是这些IO口的配置方式一样。

2. 2个读取输入电平函数:

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

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

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
作用:读取某组GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。
例如:
GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有io口输入电平

3. 2个读取输出电平函数:

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

例如:
GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输出电平

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
作用:读取某组GPIO的输出电平。实际操作的是GPIO_ODR寄存器。
例如:
GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有io口输出电平

4. 4个设置输出电平函数:

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
作用:设置某个IO口输出为低电平(0)。实际操作的BRR寄存器。

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
这两个函数不常用,也是用来设置IO口输出电平。

三、跑马灯程序

1、使能IO口时钟。调用函数RCC_APB2PeriphColckCmd();
(不同的IO组,调用的时钟使能函数不一样。)
2、初始化IO口模式。调用函数GPIO_Init();
3、操作IO口,输出高低电平。
GPIO_SetBits();
GPIO_ResetBits();
程序如下:
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);
}

led.h

#ifndef __LED_H
#define __LED_H

void LED_Init(void);



#endif

main.c

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
	LED_Init();
	delay_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);
	
	}
}

总结

以上就是本文要讲的内容,点灯实验是众多嵌入式入门的第一个实验,灯点亮的一瞬间真是成就感十足。

你可能感兴趣的:(stm32,单片机,arm)