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

使用寄存器点亮LED——编程实战相关推荐

  1. STM32C8T6之使用寄存器点亮LED灯

    这几天肺炎闹得沸沸扬扬,我窝在家里学习STM32.这篇博客筹备了3-4天吧,终于完成了. 实验电路如下图所示: 这里以PC13为例. 用寄存器点亮LED灯,主要就是操作GPIOx_ODR寄存器,GPI ...

  2. 【STM32-野火】(三)使用寄存器点亮LED

    [STM32-野火](三)使用寄存器点亮LED (一).由于stm32比51要更加高级,所以配置时不仅有输入还有输出,此时由配置高低寄存器决定端口,要配合材料看. 对应上图写配置GPIO为输出的代码 ...

  3. 野火STM32F103指南者笔记1.寄存器点亮LED

    通过讲解我知道了LED可以通过控制寄存器来点亮LED.选择GPIOB端口寄存器. 控制寄存器通过基地址. 但是要分为三步: 1.打开时钟使能寄存器(GPIOB挂载到APB2上,时钟在AHB上)时钟默认 ...

  4. STM32寄存器点亮LED(什么是寄存器、GPIO工作方式、点亮原理)

    一.什么是寄存器   STM32编程通常有两种编程方法,一种是寄存器编程:另一种是固件库编程,其中寄存器编程是基础,而固件库编程是在寄存器编程的基础上升级而来的一种易于学习和开发的方法,是学习STM3 ...

  5. 野火STM32寄存器点亮LED灯详解

    ** 1.需要先打开RCC总控制信号APB2->GPIOB中IO端口B时钟使能 ** 程序代码为:*(ussigend int *)0x40021018|=(1<<3); ** 2. ...

  6. 常用置位、清零解释及stm32f103寄存器点亮led

    置位:|= , 清0:&=~ 清0例:*(unsigned int*)0x40010C0C &=~(1<<0) 先让1左移0位,即 再全部取反,即 再与之相与,即.... ...

  7. 【嵌入式08】STM32F103C8T6寄存器方式借助面包板点亮LED流水灯详解

    文章目录 一.题目简述 二.简述:初始化GPIO,点亮LED灯 三.工程文件模板的建立 四.使用寄存器点亮LED灯--代码部分 1.硬件连接设计 2.打开之前建立的工程模板 3.代码编写 4.硬件连接 ...

  8. STM32F03寄存器方式点亮LED流水灯

    STM32F03寄存器方式点亮LED流水灯 文章目录 STM32F03寄存器方式点亮LED流水灯 一.题目内容 二.STM32F03系列芯片的地址映射和寄存器映射映射原理:了解GPIO端口的初始化设置 ...

  9. stm32——点亮LED

    1.点亮LED灯的准备工作 需要了解GPIO的基本工作原理,话不多说,先上图 关于详细的功能介绍,请参考普中科技F407详细资料,今天主要到的是GPIO的推挽输出模式 如图 通过软件向寄存器中写入数据 ...

最新文章

  1. 09-dispatch_source
  2. BCH综述:稳定发展,市场趋势,新应用
  3. C# winform treeview节点重命名
  4. DB1:数据库的创建和文件的修改
  5. SAP中服务性订单的替代解决方案
  6. 解决_类百度在线留言本_所遇到的问题
  7. Jmeter中JDBC链接配置 JDBC Connection Configuration
  8. python核心数据类型_Python核心数据类型——列表
  9. random(随机函数生成)
  10. dom技术解析xml下jaxp解析器详细代码
  11. 嵌入式Linux系统编程学习之十九标准管道流
  12. SpringBoot动态切换数据源-快速集成多数据源的启动器
  13. 鸿蒙如何连接电视,鸿蒙系统首秀,在自家设备上和普通电视大不相同
  14. 分享一个我做的记账系统(网站)
  15. Houdini 快捷键
  16. 浩哥带你学习JDK1.1源码——第1天
  17. 专访Facebook HipHop作者、阿里研究员赵海平:生物与计算机交织的独特人生
  18. 优秀LOGO设计的规则
  19. WiFi的信道与关联
  20. 单片机(51) 什么是编码器?什么是译码器?

热门文章

  1. 使用asp.net mvc开发应用程序,页面中的page.IsPostback还有用处吗?
  2. extern 与 #define 使用说明
  3. 大数据之-Hadoop3.x_MapReduce_TextInputFormat---大数据之hadoop3.x工作笔记0107
  4. C++_类和对象_C++继承_继承中的构造和析构顺序---C++语言工作笔记064
  5. SpringCloud学习笔记023---SpringBoot集成Dubbo_依赖zookeeper实现分布式应用一致性以及远程服务调用
  6. ASP.Net学习笔记011--ASP.Net揭秘之div版本自增
  7. js技术要点---JS 获取网页源代码
  8. SQL之Sort的组合查询
  9. 杭电4502吉哥系列故事——临时工计划
  10. 华中科技大学计算机第三次作业,华中科技大学微机原理第三次作业.doc