引言:对于第一个实验跑马灯,就相当于代码界的打印“Holle word”,可以说非常重要和基础,理解了跑马灯实验,在后面的学习将非常有用。为此特意写下这篇文章来解释一下每个代码的作用,以及本人在理解时遇到的问题和解决思路。

1)实验平台:正点原子STM32mini开发板

2)摘自《正点原子STM32 不完全手册(HAL 库版)关注官方微信号公众号,获取更多资料:正点原子

led.h头文件代码:

#ifndef _LED_H             //如果没有定义led.h头文件
#define _LED_H             //定义led.h头文件
#include "sys.h"           //引入sys.h头文件
#define LED0 PAout(8)       //使LED0等于PAout(8),后面用到LED0=1,则PAout(8)=1
#define LED1 PDout(2)       //同理void LED_Init(void);          //自定义一个函数,用来初始化LED灯配置
#endif

led.c文件代码:

#include "led.h"void LED_Init(void)
{GPIO_InitTypeDef GPIO_Initure;                //定义了一个结构体变量__HAL_RCC_GPIOA_CLK_ENABLE();               //开启GPIOA时钟__HAL_RCC_GPIOD_CLK_ENABLE();               //开启GPIOD时钟GPIO_Initure.Pin=GPIO_PIN_8;                 //PB8GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //推挽输出GPIO_Initure.Pull=GPIO_PULLUP;              //上拉GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;    //高速HAL_GPIO_Init(GPIOA,&GPIO_Initure);     //配置PA8GPIO_Initure.Pin=GPIO_PIN_2;                 //PD2HAL_GPIO_Init(GPIOD,&GPIO_Initure);     //配置PD2HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);    //PA8置1,默认初始化后灯灭HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);    //PD2置1,默认初始化后灯灭
}

下面解释一些重要的代码:

1.

GPIO_InitTypeDef GPIO_Initure;   //创建一个GPIO_InitTypeDef结构体

解释:GPIO_InitTypeDef结构体的内容

typedef struct
{
  uint32_t Pin;       /*指定要配置的GPIO引脚。*/

uint32_t Mode;      /*指定选定接点的工作模式*/

uint32_t Pull;      /*指定选定接点的上拉或下拉激活。*/

uint32_t Speed;     /*指定选定接点的速度。*/
} GPIO_InitTypeDef;

2.

__HAL_RCC_GPIOA_CLK_ENABLE();               //开启GPIOA时钟
    __HAL_RCC_GPIOD_CLK_ENABLE();               //开启GPIOD时钟

对于这两个时钟是一定要开的,相当于小开关,只开有用的GPIO,无用的不开,这样可以节省芯片功耗。 因为用到了GPIOA和GPIOB,所以打开相应的GPIO串口时钟。

3.

GPIO_Initure.Pin=GPIO_PIN_8;                 //PB8
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;              //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;    //高速
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);     //配置PA8

由于LED0和PA8串口相连,LED1和PD2串口相连,先定义串口PA8,或者先定义串口PD2都可以,在上述代码中先定义了串口PA8。

4.

GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //推挽输出

这里介绍一下几个Mode(寄存器) 模式的选择:

GPIO_MODE_INPUT 浮空输入

GPIO_Mode_OUTPUT_OD 开漏输出

GPIO_Mode_OUTPUT_PP 推挽输出

GPIO_Mode_AF_OD 复用开漏输出

GPIO_Mode_AF_PP 复用推挽输出

LED灯使用的是推挽输出,推挽输出可以输出高低电平。

5.

HAL_GPIO_Init(GPIOA,&GPIO_Initure);     //配置PA8

此函数的原型为

void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init)

GPIO_TypeDef为一个结构体

typedef struct
{
  __IO uint32_t CRL;  //端口配置寄存器
  __IO uint32_t CRH;   //端口配置高寄存器
  __IO uint32_t IDR;    //端口输入数据寄存器
  __IO uint32_t ODR;   //端口输出数据寄存器
  __IO uint32_t BSRR;  //端口位设置/清除寄存器
  __IO uint32_t BRR;    //端口位清除寄存器
  __IO uint32_t LCKR;   //端口配置锁定寄存器
} GPIO_TypeDef;   //七种寄存器

GPIOx可以用来设置GPIOA或GPIOB等等,根据这两个结构体就可以把GPIO口给配置好。

同理因为LED 1与PD2相连,所以设置:

GPIO_Initure.Pin=GPIO_PIN_2;                 //PD2  把结构体的Pin设置为2.
    HAL_GPIO_Init(GPIOD,&GPIO_Initure);

这样GPIO_Initure为PD2的串口设置。

6.

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);    //PA8置1,默认初始化后灯灭

void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

GPIO写入函数。此函数前两个形参之前已经介绍过,第三个形参为一个结构体:

typedef enum
{
  GPIO_PIN_RESET = 0u,
  GPIO_PIN_SET
} GPIO_PinState;  //枚举类型,第一个GPIO_PIN_RESET设置为0,则第二个自然为1.

main.c主函数的设置:

#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();                        //初始化LED    while(1){LED0=0;                     //LED0亮LED1=1;                     //LED1灭delay_ms(500);LED0=1;                    //LED0灭LED1=0;                    //LED1亮delay_ms(500);}
}

这样就可以完成一个跑马灯实验,大家还有什么不懂的欢迎评论。

【MiniSTM32_HAL库版本_V1.0】实验1跑马灯代码解释(超详细,适合初识STM32的朋友)相关推荐

  1. anaconda必须安装在c盘吗_Window版本 - Python数据分析集成开发环境 Anaconda安装(超详细)...

    Window版本 - Python数据分析集成开发环境 Anaconda安装(超详细) 前沿 ​ Hello,各位看官,您是不是决定要学习Python数据分析,您是不是现在正在"学" ...

  2. Arduino IDE搭建合宙ESP32C3开发环境(最简单) 附跑马灯代码

    Arduino IDE搭建合宙ESP32C3开发环境(最简单) 附跑马灯代码 一.安装Arduino IDE 二.搭建合宙简约版ESP32C3开发环境 1.产品示例&管脚定义&原理图 ...

  3. 第一个ARM实验(跑马灯)

    要成功完成基于ARM板的跑马灯实验首先需要:硬件(ARM板),软件(ADS1_2,JLINK,GIVEIO) 现在我们准备好了软件,先对软件进行安装! 一.对ADS1_2的安装: 1.点击进行安装, ...

  4. 参考学习的各种跑马灯代码

    实现跑马灯的方法很多,其中最简单的是采用一句Html代码来实现,我们在需要出现跑马灯效果的地方插入"<marquee>滚动的文字</marquee>"语句, ...

  5. python的集成开发环境搭建_Window版本 - Python数据分析集成开发环境 Anaconda安装(超详细)...

    Window版本 - Python数据分析集成开发环境 Anaconda安装(超详细) 前沿 ​ Hello,各位看官,您是不是决定要学习Python数据分析,您是不是现在正在"学" ...

  6. html跑马灯编程,求一个HTML无缝的跑马灯代码。

    属性要求:胆识.福缘.机敏 效果:中毒.抗毒 蛤蟆功: 首部曲 1.巳午未时点扬州武器商附近的全知道触发到对话..说有事情想请教,一阵对话后给他10万两.接着说要到华山去(若给他1000两的是昆仑剑法 ...

  7. [ENVI] 定量遥感实验-水体叶绿素浓度遥感反演 (超详细步骤)

    实验目的 得到太湖区域的叶绿素浓度分布图 实验内容及实验步骤 HJ-CCD影像的辐射定标 插件:ENVI_HJ1A1B_Tools.sav 建议在classic版本下执行操作,自动完成定标及波段合成 ...

  8. Ubuntu20.04虚拟机使用Kubeadm从0到1搭建K8S集群(超详细)

    前言 最近在读张磊老师的<深入剖析Kubernets>,在阅读4.2节的时候遇到了问题,由于书上使用的版本已经过时,很多命令的执行都失败了,在经历了长达两个星期的折磨以后,我终于把这一节需 ...

  9. 从0到1搭建一个个人网站超详细教程

    前言 如何从0到1搭建一个可以外网访问的项目? 我就用自己的服务器给大家举例,怎么从0到1搭建一个学生和新手可以用来面试的项目,老手也可以回忆一下自己逝去的青春. 服务器在激活的时候会让你选系统,这个 ...

  10. phpstorm调试远程服务器代码(超详细版本)

    本篇教程是我综合了多篇教程综合而成的产物,每篇教程都会有一些小细节没有写到,折腾了好久终于是整出来了...现在在这里做个记录,也是给后来人避一下坑,先讲一下远程debug的原理:(本段来自:可能是全网 ...

最新文章

  1. 关于django 如何实现简单api的restful 接口
  2. Android 10 中有关限制非 SDK 接口的更新
  3. Solaris IPMP 配置
  4. python gui打包exe pyinstaller打包运行失败 Failed to execute script pyi_rth_multiprocessing
  5. Webpack核心概念解析
  6. SpringBoot异常处理-自定义HandlerExceptionResolver
  7. java安全级别过高_Java应该是更高级别还是更低级别?
  8. leetcode74. 搜索二维矩阵(二分查找)
  9. iOS - Card Identification 银行卡号识别
  10. Delphi 2009 的反射单元(ObjAuto):
  11. Spring-Bean配置-使用外部属性文件(转)
  12. 继承(1)----《.NET 2.0面向对象编程揭秘 》学习
  13. web service中配置tcp/ip监视器
  14. linux运行bak,linux 备份学习
  15. SOAPUI使用教程-REST请求工作
  16. matlab平滑处理例题,(完整word版)matlab中smooth函数平滑处理数据实例
  17. 周末不知道学什么?这份 Android 优秀技术文章清单请收下
  18. handsome主题添加服务器信息,全屏响应式精美typecho主题handsome
  19. 推荐几个编程学习网站
  20. 阿里云oss使用cdn,节省oss下行流量

热门文章

  1. Ubuntu18.04安装gcc——史上最全安装教程
  2. visio 2010激活教程
  3. xp系统qq安装不上网络连接服务器,xp系统安装QQ提示“安装文件失败”如何解决...
  4. 计算机的3d软件家庭版,3DOne家庭版 64位
  5. 2020最新淘宝等级表图及商品发布限制数量类目表
  6. 金算盘加密狗维护信息
  7. dump文件 linux,linux使用MAT分析dump文件
  8. java对excel加密_java 加密 excel
  9. java基础学习的心得体会
  10. 《球球大作战》源码解析:服务器与客户端架构