使用寄存器点亮LED——编程实战

stm32的编程和stc89c51还是存在着很多思想上的不同的,在51单片机中,我们点亮LED灯,只用给对应IO高低电平就可以了,而stm32中,就一个简单的GPIO,我们也需要配置好几个寄存器,而且,就算配置好GPIO寄存器,我们还必须有一步不能缺少的操作,那就是开启对应GPIO的时钟。在stm32的编程中,开启对应时钟是必不可少的一个操作,而且,开启时钟的操作必须在配置相应寄存器之前,以GPIO为例,如果我们先配置GPIO的寄存器,不开启时钟或者先配置GPIO寄存器,最后再开启时钟,都不能正常驱动芯片工作。时钟就像人的脉搏一样,人必须有脉搏才能工作,同样,stm32也必须先给时钟,再配置寄存器达到相应的功能。

那么我是怎么知道要这样配置的呢?

第一,现在的教程比较成熟,能够知道这些内容;第二,在开发板的学习教程中,他也是通过ST的官方demo知道的,具体在

F4固件库\STM32F4xx_DSP_StdPeriph_Lib_V1.5.1\STM32F4xx_DSP_StdPeriph_Lib_V1.5.1\Project\STM32F4xx_StdPeriph_Examples\

这个目录下,有基于ST的参考代码,别人告诉我们要先开启时钟;第三,为什么要先开启对应外设时钟才能工作,51单片机就不需要啊。这个也是可以理解的,为了低功耗嘛,时钟相当于一把钥匙控制这个电路的开关,没用时钟这把钥匙,你什么操作也是白搭,对应时钟控制对应外设,这也无可厚非。

那么我们怎么查看具体外设到底要开启什么时钟呢?

查看《STM32F4xx中文参考手册1》2.3节,STM32F4xx 寄存器边界地址 ,可以看到对应外设的时钟。

可以看到我们的GPIOH是挂载在AHB1总线上,所以要先开启AHB1总线上的GPIOH时钟。

那么又在哪里查看这个呢?还是中文参考资料中,6.3.12 RCC AHB1 外设时钟使能寄存器 (RCC_AHB1ENR)

通过这里我们我们可以看到:

参考手册上说明,这个寄存器的第七位控制我们的GPIOH,置1,使能。

同样,配置GPIO寄存器时,也应该参考对应手册:

在知道这些流程之后,开始编写程序:

/*
    使用寄存器的方法点亮LED灯
  */
#include "./stm32f4xx.h"  

/**
  *   主函数
  */
int main(void)
{
    /*开启 GPIOH 时钟,使用外设时都要先开启它的时钟*/
    RCC_AHB1ENR |= (1<<7);    //很明朗了,第七位要置1,使能时钟

    /* LED 端口初始化 */
    //根据上面的寄存器描述依次配置,这个技能是只要你去看,就会的东西
    /*GPIOH MODER10清空*/
    GPIOH_MODER  &= ~( 0x03<< (2*12));
    /*PH10 MODER10 = 01b 输出模式*/
    GPIOH_MODER |= (1<<2*12);

    /*GPIOH OTYPER10清空*/
    GPIOH_OTYPER &= ~(1<<1*12);
    /*PH10 OTYPER10 = 0b 推挽模式*/
    GPIOH_OTYPER |= (0<<1*12);

    /*GPIOH OSPEEDR10清空*/
    GPIOH_OSPEEDR &= ~(0x03<<2*12);
    /*PH10 OSPEEDR10 = 0b 速率2MHz*/
    GPIOH_OSPEEDR |= (0<<2*12);

    /*GPIOH PUPDR10清空*/
    GPIOH_PUPDR &= ~(0x03<<2*12);
    /*PH10 PUPDR10 = 01b 上拉模式*/
    GPIOH_PUPDR |= (1<<2*12);

    /*PH10 BSRR寄存器的 BR10置1,使引脚输出低电平*/
    GPIOH_BSRR |= (1<<16<<12);

    /*PH10 BSRR寄存器的 BS10置1,使引脚输出高电平*/
    //GPIOH_BSRR |= (1<<10);

    while(1);

}

// 函数为空,目的是为了骗过编译器不报错
void SystemInit(void)//这个函数必须自己写一个加上,因为启动文件的关系,到后面会详细说这个问题
{
}

/*********************************************END OF FILE**********************/

这个是我们自己用寄存器实现的例子,我的开发板有三个灯,分别接GPIOH10,11,12,所以更改了几次代码,这样也发现寄存器编程的一个问题,修改代码有点麻烦,而且还是有点冗余,虽然我们可以通过宏或者函数封装,但是,那样封装之后,他就是库函数版本了, 到后面,我们都会采用库函数的方式来学习,项目开发中肯定也是库函数首选。但是,我们经过自己配置寄存器这个步骤,知道了库函数底层其实也就是封装了配置好的寄存器而已,知道原理之后,我们还是应该才赢开发效率更高的库函数来进行应用。

时间: 2024-10-12 14:02:02

使用寄存器点亮LED——编程实战的相关文章

寄存器点亮LED

看了视频,也试着用操作寄存器的方法点亮下LED. 应用keil5编译软件. 1.首先创建新工程. 如何创建工程就不介绍了 2.添加启动文件 启动文件是由官方给出的.关于103的就有很多种. 大部分都是容量的不同.我们这里用的是startup_stm32f10x_hd.s,因为我们的芯片是STM32F103ZET6,这里是大容量的 这里可以查看ST公司官方给出的选项参考 在其他的文章中我们会详细解释这个启动文件,这里就先不介绍了.启动文件就是汇编编写的文件,用于调入__main,进入C编程. 3.

使用寄存器点亮LED(第1节)—GPIO功能框图讲解

GPIO简介 GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚, STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯.控制以及数据采集的功能.STM32 芯片的 GPIO 被分成很多组,每组有 16 个引脚,如型号为 STM32F103VET6 型号的.芯片有 GPIOA. GPIOB. GPIOC 至 GPIOE 共 5 组 GPIO,芯片一共 100 个引脚,其中GPIO 就占了一大部分,所有的 GPIO 引脚都有基本的输入输出功能. 最基本的

使用寄存器点亮LED等

最基本的输入功能是检测外部输入电平,如把 GPIO引脚连接到按键,通过电平高低区分按键是否被按下. 基本结构分析 2. P-MOS管和 N-MOS管 main.c中的main函数

27.点亮led的操作

Led可以作为我调试程序的工具:在嵌入式系统软件,例如Bootloader和kernel,在开发初期,由于串口等硬件尚未被初始化,因此调试手段相当有限,这时候可以采用Led来作为调试手段. OK6410有关led的原理图: 从上图知道,要让led发光二极管,就是从右到左导通,右边是高电平,所以左边给低电平,二极管就会导通,发光了. 知道原理后,看看OK6410的核心板原理图,查看NLED1-4应该接到核心板的哪些引脚:led的部分截图: 我们从上面的原理图知道,led1-4对应的是GPM0-3.

ARM裸机之点亮LED

声明:本文由个人学习过程中整理而成,转载请注明出处 实验开发版:S5PV210 1.什么是GPIO? General Purpose Input Output (通用输入/输出)简称为GPIO,属于芯片引脚的一部分. 嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号.而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭.对这些设备/电路的控制,使用传统的串行口或并行口都不合适

一步一步点亮Led

1.了解物理特性 点亮LED的关键在于电压差 2.查阅原理图了解板载LED的硬件接法 方法:可以利用PDF文档的搜索功能(搜索LED即可,在底板搜索) 可知:有4颗正极接3.3V,负极分别接SoC上面的引脚(即引脚低电平亮),另外一个开机常亮. 3个SoC引脚是知道的,另外在核心板上查看pwmtout1可知引脚为GPD0_1,如下图 GPD0表示端口号,后面的1是引脚号 3.查阅数据手册 当我们想要编程操控GPIO来操作LED时,需要通读一下数据手册关于GPIO的部分 我们要操作的硬件为LED,

第11章 GPIO输出-使用固件库点亮LED—零死角玩转STM32-F429系列

第11章 ????GPIO输出-使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ? 本章参考资料:<STM32F4xx参考手册>.库帮助文档<stm32f4xx_dsp_stdperiph_lib_um.chm>. 利用库建立好的工程模板,就可以方便地使用STM32标准库编写应用程序了,可以说从这一章我们才开始迈入STM32开发的大门. LE

STM32学习之路-点亮LED

STM32学习笔记—点亮led灯 STM32的I/O口有很多的功能,所以称为GPIO(GENERAL PURPOSE) 其中GPIO又分为A,B,C,D,E,F,G不同的组,每个组端口又分为0~15,共16个不同的引脚,不同的芯片引脚数量也不同,所用的学习板为STM32F103RBT6; I/O口的八种模式: 输入浮空:                  模拟输入: 输入上拉:                  输入下拉: 开漏输出:                  推挽输出: 推挽式复用功能

第11章 GPIO输出—使用固件库点亮LED

第11章     GPIO输出-使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:<STM32F4xx参考手册>.库帮助文档<stm32f4xx_dsp_stdperiph_lib_um.chm>. 利用库建立好的工程模板,就可以方便地使用STM32标准库编写应用程序了,可以说从这一章我们才开始迈入STM32开发的大门. LED灯