提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
本文章是学习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输出高电平
}
}
附件
汲取自各大神,希望能理解,如有侵权随时可删除