1.GPIO的输出模式:
- 推挽模式输出:因为LED0和LED1阳极都是3.3V,需要将阴极设置为低电平才可以点亮LED;
- 操作io口时,必须引入源文件和头文件;
- 关于时钟的文件存放在rcc中;
2.GPIO库函数介绍:
(1).1个初始化函数:
- void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
- 作用:初始化一个或多个io口(同一组)的工作方式和速度,
- 该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或下拉的时候有设置BSRR或BRR寄存器;
- 主要包括设置指定初始化io口、设置工作模式(8种)、设置io口输出速度;
注意:
- 外设(包括GPIO)在使用之前,几乎都要先使能对应的时钟;
- 可以一次初始化一个io组下的多个io,前提是这些io口的设置方式一样;
(2).2个读取输入电平函数:
- uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
- 作用:读取某个GPIO的输入电平。实际操作GPIOx_IDR寄存器;
- uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
- 作用:读取某组GPIO的输入电平。实际也是操作GPIOx_IDR寄存器;
(3).2个读取输出电平函数:
- uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
- 作用:读取某个GPIO的输出电平。实际操作的是GPIOx_ODR寄存器;
- uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
- 作用:读取某组GPIO的输出电平。实际也是操作GPIOx_ODR寄存器;
(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口输出电平;
3.相关引脚原理图:
4.跑马灯实验步骤:
- 使能io口时钟,调用RCC_APB2PeriphClockCmd()函数实现;
- 初始化io口模式,调用GPIO_Init()函数实现;
- 操作io口,输出高低电平;GPIO_SetBits()和GPIO_ResetBits()函数实现;
注意:
在使能io口时钟时,不同的io组,调用的时钟使能函数不一样;文章来源地址https://www.toymoban.com/news/detail-498219.html
(1)主函数:
#include "led.h"
#include "delay.h"
int main(){
LED_Init(); //LED初始化
delay_init(); //延时初始化
while(1){
delay_ms(100);
GPIO_ResetBits(GPIOB,GPIO_Pin_5); //LED0亮
GPIO_SetBits(GPIOE,GPIO_Pin_5); //LED1不亮
delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_5); //LED0不亮
GPIO_ResetBits(GPIOE,GPIO_Pin_5); //LED1亮
}
}
(2)LED头文件:
#ifndef __LED_H
#define __LED_H
void LED_Init();
#endif
(3)LED初始化功能函数:
#include "led.h"
#include "stm32f10x.h"
/*
1.功能:LED的初始化
2.返回参数:无
*/
void LED_Init(){
GPIO_InitTypeDef GPIO_InitStruct;
//1.初始化io时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);
//2.配置GPIO
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_OD; //推挽输出模式->既可以输出高电平也可以输出低电平
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5; //PB5
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; //输出速率50MHz
GPIO_Init(GPIOB,&GPIO_InitStruct);
GPIO_SetBits(GPIOB,GPIO_Pin_5); //LED0灭->LED对应的引脚,高电平灭,低电平亮
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_OD; //推挽输出模式
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5; //PE5
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStruct);
GPIO_SetBits(GPIOE,GPIO_Pin_5); //LED1灭
}
文章来源:https://www.toymoban.com/news/detail-498219.html
到了这里,关于3.跑马灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!