STM32(1)跑马灯
建立LED初始化头文件
建立头文件有点像C++中,头文件中可以添加宏定义以及函数原型,然后在.c文件中写入函数定义
“sys.h”
“sys.h"这个头文件中#include “stm32f10x.h”,所以自己写的文件不需要再引用"stm32f10x.h”
还包括了IO口操作宏定义,IO口地址映射,IO口操作以及其他
stm32 sys文件总结
PBout(5)
PBout(5)就是sys文件中的宏定义内容:#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出
它指向了控制PBn所在的寄存器,对其进行操作。
#define LED0 PBout(5)//LED0
这里的LED0就是指PB5这个IO口
led.h 代码
#ifndef _LED_H
#define _LED_H
#include "sys.h"//宏定义
#define LED0 PBout(5)//LED0
#define LED1 PEout(5)//LED1
//led.cvoid LED_Init(void);#endif
建立LED初始化程序
GPIO
每个IO口都有7个寄存器来控制:
2个32位端口配置寄存器CRL和CRH
2个32位的数据寄存器IDR和ODR
1个32位的置位/复位寄存器BSRR
1个16位的复位寄存器BRR
1个32位的锁存寄存器LCKR
其中,CRL和CRH控制着每个IO口的模式及输出速率
GPIO的八种工作模式
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出
1、上拉输入、下拉输入可以用来检测外部信号,例如,按键等;
2、浮空输入模式,由于输入阻抗较大,一般把这种模式用于标准通信协议的 I2C、 USART 的接收端;
3、普通推挽输出模式一般应用在输出电平为 0 和 3.3V 的场合。而普通开漏输出模 式一般应用在电平不匹配的场合,如需要输出 5V 的高电平,就需要在外部一个上拉电 阻,电源为 5V,把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输 出 5V 电平。
4、对于相应的复用模式(复用输出来源片上外设),则是根据 GPIO 的复用功能来 选择,如 GPIO 的引脚用作串口的输出(USART/SPI/CAN),则使用复用推挽输出模式。 如果用在 I2C、SMBUS 这些需要线与功能的复用场合,就使用复用开漏模式。
5、在使用任何一种开漏模式时,都需要接上拉电阻。
GPIO_InitTypeDef
GPIO_InitTypeDef是一个结构体类型,具体定义如下
typedef struct
{uint32_t Pin; /*!< 指定要配置的GPIO引脚。uint32_t Mode; /*!< 指定选定接点的操作模式。uint32_t Pull; /*!< 指定选定接点的上拉或下拉激活。uint32_t Speed; /*!< 指定选定接点的速度。
}GPIO_InitTypeDef;
a)GPIO_pins_define 中的所有可选择的值,代表各个引脚。
#define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */
#define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */
#define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */
#define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */
#define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */
#define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */
#define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */
#define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */
#define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */
#define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */
#define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */
#define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */
#define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */
#define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */
#define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */
#define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */
#define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */
#define GPIO_PIN_MASK 0x0000FFFFU /* PIN mask for assert test */
b)GPIO_mode_define 中的所有可选择的值,代表可选的GPIO配置模式。
#define GPIO_MODE_INPUT 0x00000000U /*!< 输入浮动模式 */
#define GPIO_MODE_OUTPUT_PP 0x00000001U /*!< 输出推拉模式 */
#define GPIO_MODE_OUTPUT_OD 0x00000011U /*!< 输出开漏模式 */
#define GPIO_MODE_AF_PP 0x00000002U /*!< 交替功能推拉模式 */
#define GPIO_MODE_AF_OD 0x00000012U /*!< 交替功能开漏模式 */#define GPIO_MODE_ANALOG 0x00000003U /*!< 模拟模式 */#define GPIO_MODE_IT_RISING 0x10110000U /*!< 带上升沿触发检测的外部中断模式 */
#define GPIO_MODE_IT_FALLING 0x10210000U /*!< 带下降沿触发检测的外部中断模式 */
#define GPIO_MODE_IT_RISING_FALLING 0x10310000U /*!< 带上升/下降沿触发检测的外部中断模式 */#define GPIO_MODE_EVT_RISING 0x10120000U /*!< 具有上升沿触发检测的外部事件模式 */
#define GPIO_MODE_EVT_FALLING 0x10220000U /*!< 具有下降沿触发检测的外部事件模式 */
#define GPIO_MODE_EVT_RISING_FALLING 0x10320000U /*!< 具有上升/下降沿触发检测的外部事件模式 */
c)GPIO_pull_define 中的所有可选择的值,配置激活状态。通过设置GPIO中的PUPDR寄存器的值。
#define GPIO_NOPULL 0x00000000U /*!< 无上拉或下拉激活 */
#define GPIO_PULLUP 0x00000001U /*!< 上拉激活 */
#define GPIO_PULLDOWN 0x00000002U /*!< 下拉激活 */
d)GPIO_speed_define 中的所有可选择的值,配置输出最大功率。通过设置GPIO中的OSPEEDR寄存器的值。
#define GPIO_SPEED_FREQ_LOW 0x00000000U /*!< IO工作频率为2 MHz,请参阅产品数据表 */
#define GPIO_SPEED_FREQ_MEDIUM 0x00000001U /*!< 范围12.5 MHz至50 MHz */
#define GPIO_SPEED_FREQ_HIGH 0x00000002U /*!< 范围为25兆赫至100兆赫 */
#define GPIO_SPEED_FREQ_VERY_HIGH 0x00000003U /*!< 范围50兆赫至200兆赫 */
嵌入式开发(学习笔记:跑马灯)GPIO_InitTypeDef+SysTick_Type
HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
其实就是将对应的字节输入到对应的寄存器中来配置IO口
HAL库-STM32F4 HAL_GPIO_Init()
stm32库函数之GPIO_Init()详细解析
HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinSate)
通过设置ODR寄存器的值来控制IO口的输出状态。ODR是一个端口输出数据寄存器,该寄存器可读写,从该寄存器读出来的数据可以用于判断当前IO口的输出状态。而向该寄存器写数据,则可以控制某个IO口的输出电平。
HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
读取某个IO口的状态。读的是IDR寄存器,该寄存器是端口输入数据寄存器,该寄存器是只读寄存器。
__HAL_RCC_GPIOB_CLK_ENABLE()
在配置STM32外设时,任何时候都要先使能该外设的时钟。
用多少功能就使能多少功能,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。如果不用的就完全关闭,尽可能降低芯片功耗。
使能就是打开该功能。
STM32时钟使能及应用总结
led.c 代码
#include"led.h"
void LED_Init(void)
{GPIO_InitTypeDef GPIO_Initure;//创建GPIO初始化参数结构体__HAL_RCC_GPIOB_CLK_ENABLE();//开启GPIOB时钟__HAL_RCC_GPIOE_CLK_ENABLE();//开启GPIOE时钟//PB5初始化GPIO_Initure.Pin=GPIO_PIN_5;//选择引脚GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;//输出输出模式GPIO_Initure.Pull=GPIO_PULLUP;//上拉下拉GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//输出速度HAL_GPIO_Init(GPIOB,&GPIO_Initure);//初始化函数//PE5初始化GPIO_Initure.Pin=GPIO_PIN_5;//选择引脚HAL_GPIO_Init(GPIOE,&GPIO_Initure);//初始化函数//HAL_GPIO_WritePin(GPIO组,IO口,输出状态),PinState:高电频——GPIO_PIN_SET; 低电频——GPIO_PIN_RESETHAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//PB5置1,默认初始化后灭灯HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);//PE5置1,默认初始化后灭灯}
main代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
int main(void)
{HAL_Init();//初始化HAL库Stm32_Clock_Init(RCC_PLL_MUL9);//设置时钟,72Mdelay_init(72);//初始化延时函数LED_Init();//初始化LEDwhile(1){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//LED0亮HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);//LED1灭delay_ms(500);//延时500msHAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//LED0灭HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);//LED1亮delay_ms(500);//延时500ms}}
STM32(1)跑马灯相关推荐
- 【STM32】跑马灯实验主要程序代码分析
文章目录 main.c led.c led.h STM32 的 IO 口可以由软件配置成如下 8 种模式: 输入浮空 输入上拉 输入下拉 模拟输入 开漏输出 推挽输出 推挽式复用功能 开漏复用功能 S ...
- 汇编语言实现跑马灯89c51,点亮STM32汇编语言跑马灯+源代码
只有1个程序-- ;LED端口在GPIOC6,7,8,9 ;#define led_gpio GPIOC ;#define led1 GPIO_Pin_6 //led1 连接在GIIOC_6 ;#d ...
- 小白学STM32——跑马灯库函数版本
一.STM32 GPIO 1. GPIO_MODE_AIN 模拟输入 输入信号不经施密特触发器直接接入,输入信号为模拟量而非数字量,其余输入方式输入数字量. 2. GPIO_MODE_IN_FLOAT ...
- 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础
上篇文章 单片机入门学习四 STM32单片机学习一 跑马灯程序和创建工程 仅介绍了入门程序及其编译运行过程,下面开始对stm32的一些基础知识做一个记录. 1.stm32f103zet6(上篇问题3 ...
- STM32入门开发--LED模块实现跑马灯
1.案例描述 利用STM32F103ZE开发板实现控制LED灯实现跑马灯现象. 正在不断学习嵌入式开发中,博客还会持续更新,敬请关注! 2.开发环境 keil 5.14 + Windows 10 + ...
- STM32如何使用STLINK下载程序:点亮LED跑马灯(库版本)
系列文章目录 STM32F103ZE学习记录:主要参考正点原子教程 文章目录 系列文章目录 前言 一.环境的搭建 1.新建编程文件操作步骤 2.ST_LINK烧录搭建 3.STlink下载出现st-l ...
- 单片机c语言跑马灯,基于STM32单片机对跑马灯的控制
基于学习STM32有一段时间了,特意写下一篇关于一个简单的跑马灯 的例程,梳理思路,也希望我自己的理解能帮到一些学习STM32的初学者 //============================== ...
- 【stm32】如何把原子哥的代码移植到最小系统板stm32f103c8t6 以跑马灯实验为例
[stm32]如何把原子哥的代码移植到最小系统板stm32f103c8t6 以跑马灯实验为例 外部硬件: stm32仿真编程器 (仿真编制器自己在网上买,不确定买哪个的可以就买我这个,图片上有牌子,自 ...
- stm32跑马灯实验
本文记录STM32mini开发板实验 普通跑马灯 回归GPIO基础知识 每组IO口含有下面7个寄存器,7个寄存器一共可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIO ...
最新文章
- Windows下开源缺陷跟踪系统mantis安装指南(续)-
- ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测
- Python面向对象的三大特性
- Logstash入门简介
- 把svg图标制作成字体图标_让我们用SVG符号和CSS变量制作彩色图标
- Jsp使用Cookie完成记住账号密码的功能
- PDA程序 点击登录按钮显示提示信息
- pc系统安全问题让你防不胜防--安装系统屏保时,偶然发现没有安装的ie工具栏软件baidu_jpwb(Just Under/WINDOWS)!
- 进销存excel_简单易操作!Excel免费进销存管理系统!不花钱的进销存管理软件...
- C10K问题及解决方案
- Android JetPack组件之DataBinding的使用详解
- nm 和 c++filt - [GNU/Linux]
- Linux系统编程-信号入门2
- 如何评价唐卫国公李靖的战功、军事才能、政治才能?
- 在Ubuntu上安装VM WarePlayer 编译不过
- 有理数加法 (15分)(PTA)
- html设计动画小黄人,纯CSS3画出小黄人并实现动画效果_html/css_WEB-ITnose
- 体重指数BMI java web
- WordPress 搭建个人博客全攻略
- FPGA与CYUSB3014实现USB3.0数据传输学习笔记(1)