跑马灯实验-库函数版
来源:互联网 发布:垃圾处理器 知乎 编辑:程序博客网 时间:2024/06/16 01:13
1、参考资料
《STM32F1开发指南-库函数版本》-第六章 跑马灯实验6.1小节
《STM32中文参考手册V10》-第8章通用和复用功能IO(GPIO和AFIO)
2、WarShip原理图
LED0--PD5 LED1--PE5 共阳极 低电平有效
推挽输出:
可以输出强高低电平,连接数字器件
操作IO口:
头文件:stm32f10x_gpio.h
源文件:stm32f10x_gpio.c
3、重要函数:
1个初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
2个读取输入电平函数:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
2个读取输出电平函数:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
4个设置输出电平函数:
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);
4、跑马灯用到三个函数
GPIO_Init() GPIO_SetBits() GPIO_ResetBits()
·使能IO口时钟。调用函数RCC_APB2PeriphColckCmd();
不同的IO组,调用的时钟使能函数不一样
·初始化IO口模式。调用GPIO_Init();
·操作IO口,输出高低电平
GPIO_SetBits();
GPIO_ResetBits();
5、复制工程模板,新建文件夹HARDWARE,在HARDWARE文件夹中添加LED文件夹
添加文件LED.c和led.h
6、写代码
led.h
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif
LED.c
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //PB口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE); //PG口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE); //PF口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //PC口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //PE口时钟使能
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //设置第13管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOB, GPIO_Pin_13); //设置PB13管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //设置第0管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOG, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOG, GPIO_Pin_0); //设置PG0管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //设置第14管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOF, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOF, GPIO_Pin_14); //设置PF14管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //设置第12管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOF, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOF, GPIO_Pin_12); //设置PF12管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //设置第2管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOB, GPIO_Pin_2); //设置PB2管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //设置第0管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOB, GPIO_Pin_0); //设置PB0管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //设置第4管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOC, GPIO_Pin_4); //设置PC0管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //设置第5管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOA, GPIO_Pin_6); //设置PA6管脚输出高电平
}
main.c
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main()
{
delay_init();//延时初始化函数
LED_Init(); //LED初始化函数
while(1)
{
GPIO_SetBits(GPIOB, GPIO_Pin_13);//设置PB13管脚输出高电平
GPIO_SetBits(GPIOG, GPIO_Pin_0);//设置PG0管脚输出高电平
GPIO_SetBits(GPIOF, GPIO_Pin_14);//设置PF14管脚输出高电平
GPIO_SetBits(GPIOF, GPIO_Pin_12);//设置PF12管脚输出高电平
GPIO_SetBits(GPIOB, GPIO_Pin_2);//设置PB2管脚输出高电平
GPIO_SetBits(GPIOB, GPIO_Pin_0);//设置PB0管脚输出高电平
GPIO_SetBits(GPIOC, GPIO_Pin_4);//设置PC4管脚输出高电平
GPIO_SetBits(GPIOA, GPIO_Pin_6);//设置PA6管脚输出高电平
delay_ms(300);
GPIO_ResetBits(GPIOB, GPIO_Pin_13);//设置PB13管脚输出低电平
GPIO_ResetBits(GPIOG, GPIO_Pin_0);//设置PG0管脚输出低电平
GPIO_ResetBits(GPIOF, GPIO_Pin_14);//设置PF14管脚输出低电平
GPIO_ResetBits(GPIOF, GPIO_Pin_12);//设置PF12管脚输出低电平
GPIO_ResetBits(GPIOB, GPIO_Pin_2);//设置PB2管脚输出低电平
GPIO_ResetBits(GPIOB, GPIO_Pin_0);//设置PB0管脚输出低电平
GPIO_ResetBits(GPIOC, GPIO_Pin_4);//设置PC4管脚输出低电平
GPIO_ResetBits(GPIOA, GPIO_Pin_6);//设置PA6管脚输出低电平
delay_ms(300);
}
《STM32F1开发指南-库函数版本》-第六章 跑马灯实验6.1小节
《STM32中文参考手册V10》-第8章通用和复用功能IO(GPIO和AFIO)
2、WarShip原理图
LED0--PD5 LED1--PE5 共阳极 低电平有效
推挽输出:
可以输出强高低电平,连接数字器件
操作IO口:
头文件:stm32f10x_gpio.h
源文件:stm32f10x_gpio.c
3、重要函数:
1个初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
2个读取输入电平函数:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
2个读取输出电平函数:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
4个设置输出电平函数:
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);
4、跑马灯用到三个函数
GPIO_Init() GPIO_SetBits() GPIO_ResetBits()
·使能IO口时钟。调用函数RCC_APB2PeriphColckCmd();
不同的IO组,调用的时钟使能函数不一样
·初始化IO口模式。调用GPIO_Init();
·操作IO口,输出高低电平
GPIO_SetBits();
GPIO_ResetBits();
5、复制工程模板,新建文件夹HARDWARE,在HARDWARE文件夹中添加LED文件夹
添加文件LED.c和led.h
6、写代码
led.h
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif
LED.c
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //PB口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE); //PG口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE); //PF口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //PC口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //PE口时钟使能
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //设置第13管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOB, GPIO_Pin_13); //设置PB13管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //设置第0管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOG, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOG, GPIO_Pin_0); //设置PG0管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //设置第14管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOF, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOF, GPIO_Pin_14); //设置PF14管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //设置第12管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOF, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOF, GPIO_Pin_12); //设置PF12管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //设置第2管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOB, GPIO_Pin_2); //设置PB2管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //设置第0管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOB, GPIO_Pin_0); //设置PB0管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //设置第4管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOC, GPIO_Pin_4); //设置PC0管脚输出高电平
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //设置第5管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速度50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_SetBits(GPIOA, GPIO_Pin_6); //设置PA6管脚输出高电平
}
main.c
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main()
{
delay_init();//延时初始化函数
LED_Init(); //LED初始化函数
while(1)
{
GPIO_SetBits(GPIOB, GPIO_Pin_13);//设置PB13管脚输出高电平
GPIO_SetBits(GPIOG, GPIO_Pin_0);//设置PG0管脚输出高电平
GPIO_SetBits(GPIOF, GPIO_Pin_14);//设置PF14管脚输出高电平
GPIO_SetBits(GPIOF, GPIO_Pin_12);//设置PF12管脚输出高电平
GPIO_SetBits(GPIOB, GPIO_Pin_2);//设置PB2管脚输出高电平
GPIO_SetBits(GPIOB, GPIO_Pin_0);//设置PB0管脚输出高电平
GPIO_SetBits(GPIOC, GPIO_Pin_4);//设置PC4管脚输出高电平
GPIO_SetBits(GPIOA, GPIO_Pin_6);//设置PA6管脚输出高电平
delay_ms(300);
GPIO_ResetBits(GPIOB, GPIO_Pin_13);//设置PB13管脚输出低电平
GPIO_ResetBits(GPIOG, GPIO_Pin_0);//设置PG0管脚输出低电平
GPIO_ResetBits(GPIOF, GPIO_Pin_14);//设置PF14管脚输出低电平
GPIO_ResetBits(GPIOF, GPIO_Pin_12);//设置PF12管脚输出低电平
GPIO_ResetBits(GPIOB, GPIO_Pin_2);//设置PB2管脚输出低电平
GPIO_ResetBits(GPIOB, GPIO_Pin_0);//设置PB0管脚输出低电平
GPIO_ResetBits(GPIOC, GPIO_Pin_4);//设置PC4管脚输出低电平
GPIO_ResetBits(GPIOA, GPIO_Pin_6);//设置PA6管脚输出低电平
delay_ms(300);
}
}
0 0
- 跑马灯实验-库函数版
- 跑马灯实验-库函数版
- 通过 库函数 寄存器 位操作 实现 跑马灯实验(1)
- 【stm32学习笔记之一】跑马灯实验(基于库函数)
- STM32F1x系列——跑马灯实验-库函数
- LED跑马灯-库函数
- 跑马灯实验-寄存器版
- 跑马灯实验-寄存器版
- stm32F407ZG之跑马灯实验——————基于库函数
- 跑马灯实验-位带操作版
- 跑马灯实验
- STM32F407 跑马灯实验
- Stm32跑马灯实验
- stm32103RC--跑马灯实验
- 【实验一】跑马灯实验
- LED跑马灯实验笔记
- mini2440 LED 跑马灯实验
- 1.5.第四个实验--跑马灯
- 1
- 手把手教你在友善之臂tiny4412上用uboot启动Linux内核
- CSS伪类和伪元素
- 十大算法总结
- redis中的五种数据类型和基本操作
- 跑马灯实验-库函数版
- 【C++学习笔记】switch语句
- 分布式计算:将Socket实验修改为服务端多线程程序,并测试完成
- 基因表达式编程下的加速进化和紧凑分类
- 超链接基本知识点
- 面试杂谈
- ConcurrentHashMap 原理解析
- diango项目第二步
- 库和框架的概念区分