基于STM32-GPIO

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

本文章是学习STM32的一些学习记录,希望能够帮助大家。


提示:以下是本篇文章正文内容,下面案例可供参考

一、基于标准库

1.GPIO库函数介绍

初始化函数

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

读取输入电平函数

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

读取输出电平函数

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

输出电平函数

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

2.新建文件夹

新建HARWARE
在这里插入图片描述
再在HARWARE新建LED文件夹
在这里插入图片描述
再新建.c .h文件
在这里插入图片描述
在keil5把它们添加进来
在这里插入图片描述
在这里插入图片描述

添加头文件
在这里插入图片描述
在这里插入图片描述

3.函数、库的编写

打开stm32f10x_gpio.h
在这里插入图片描述
在这里插入图片描述
LED.c

#include "LED.h"
#include "stm32f10x.h"

void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//定义结构体类型
	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA的时钟
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置模式
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//设置引脚号
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度
  GPIO_Init(GPIOA,&GPIO_InitStructure);//GPIO初始化
	GPIO_SetBits(GPIOA,GPIO_Pin_0);//初始化PA0输出高电平
}

LED.h

#ifndef __LED_H
#define __LED_H

void LED_Init(void);

#endif

mian.c

#include "stm32f10x.h"
#include "LED.h"

int main(void)
 {	
	 LED_Init();
	 while(1)
	 {
	 GPIO_SetBits(GPIOA,GPIO_Pin_0);
	 }
 }
 

二、基于寄存器

1.IO口寄存器

在这里插入图片描述
在这里插入图片描述

2.新建文件夹

新建HARWARE
在这里插入图片描述
再在HARWARE新建LED文件夹
在这里插入图片描述
再新建.c .h文件
在这里插入图片描述
在keil5把它们添加进来
在这里插入图片描述
在这里插入图片描述

添加头文件
在这里插入图片描述
在这里插入图片描述

3.函数、库的编写

在这里插入图片描述
GPIOx_CRL 是GPIO_PIN0-GPIO_PIN7
在这里插入图片描述

GPIOx_CRH 是GPIO_PIN8-GPIO_PIN15
在这里插入图片描述
LED.c

#include "LED.h"
#include "stm32f10x.h"

void LED_Init(void)
{
	RCC->APB2ENR|=1<<2; //使能GPIOA的时钟
	
    GPIOA->CRL&=0XFFFFFFF0;//GPIO_PIN0的位清零
	GPIOA->CRL|=0X00000003;//GPIO_PIN0的位赋值(设置模式、速度)
	GPIOA->CRL&=0XFFFFFF0F;//GPIO_PIN1的位清零
	GPIOA->CRL|=0X00000030;//GPIO_PIN1的位赋值(设置模式、速度)
	GPIOA->ODR|=0<<0;//GPIO_PIN0输出低电平
	GPIOA->ODR|=0<<1;//GPIO_PIN1输出低电平
}

LED.h

#ifndef __LED_H
#define __LED_H

void LED_Init(void);

#endif

mian.c

#include "stm32f10x.h"
#include "LED.h"
int main(void)
{
  LED_Init();
	while(1)
	{
	GPIOA->ODR|=1<<0;//GPIO_PIN0输出高电平
	GPIOA->ODR|=1<<1;//GPIO_PIN1输出高电平
	}
}

附件

汲取自各大神,希望能理解,如有侵权随时可删除

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值