// 打开 GPIOB 端口的时钟
*( unsigned int * )0x40021018|= ( 1 << 4 ); // 配置PC2 IO口为通用推挽输出,速度为10M

*( unsigned int * )0x40011000 &=~ ( 0x0f << (4*2) );//GPIOC IO 4位清空
         *( unsigned int * )0x40011000 |= ( 1 << (4*2) );// 通用推挽输出,速度为10M

      // 控制 ODR 寄存器
*( unsigned int * )0x4001 100c &= ~(1<<2);

我们在使用内存地址点亮LED灯中使用内存地址点亮,但是这种可读性极差,外人根本不知道干什么的。下面我们介绍另外一种方法 给这些内存地址起别名。(称为寄存器映射)

相当于我们在51单片机中头文件中的内容的定义。(我们之所以能用P0=....;这是因为我们在reg52.h中已经写好了映射 sfr P0=0x80)。

现在我们打开STM32的中文参考手册   2 存储器和总线构架------>存储器映像可以看多所以外设对应的地址单元。

这三张图呢我们先说:

第一张为STM32的系统架构图,我们可以看见所有的外设(最外边的红线框)均挂在到AHB总线上,AHB总线再分四个,分别为SDIO RCC APB1 APB2.

第二张为挂载在AHB总线上的所有外设地址。其实AHB起地址为0x4000 0000(由底向上看,最开始的地址)。这样我们在设计寄存器映射是可以定义AHB为基地址。

(小技巧:我们在定义RCC的基址是可以定义为DMA1,而不是定义为SDIO,因为DMA1的地址特别整齐,这样好计算。只要将SDIO的地址单独定义即可。事实上官             方也是这样定义的。)

小灯PC2的电路图:PC2含义GPIOC第二引脚

代码:

Stm32f10x.h的内容:

// 用来存放STM32寄存器映射的代码

// 外设  perirhral

#define  PERIPH_BASE               ((unsigned int)0x40000000)  //AHB
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)//小技巧 #define RCC_BASE (AHBPERIPH_BASE + 0x1000)
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) #define RCC_APB2ENR *(unsigned int*)(RCC_BASE + 0x18) #define GPIOC_CRL *(unsigned int*)(GPIOB_BASE + 0x00)
#define GPIOC_CRH *(unsigned int*)(GPIOB_BASE + 0x04)
#define GPIOC_ODR *(unsigned int*)(GPIOB_BASE + 0x0C)

main中的内容:

       // 打开 GPIOB 端口的时钟
RCC_APB2ENR|= ( << );
//配置PC2 IO口为通用推挽输出,速度为10M
GPIOC_CRL&=~ ( 0x0f << (*) );//GPIOC IO 4位清空
GPIOC_CRL|= ( << (*) );// 通用推挽输出,速度为10M
// 控制 ODR 寄存器
GPIOC_ODR&= ~(<<);//开
// GPIOC_ODR|= (1<<2); //关

使用寄存器点亮LED(第2节)—寄存器映射代码讲解的更多相关文章

  1. 第7章 使用寄存器点亮LED灯

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  2. 第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  3. STM32F4 阿波罗寄存器点亮LED灯

    学习步骤: 使用寄存器点亮LED灯,需要进行如下的步骤,LED灯属于外设部分,首先需要开启外设的时钟使能,然后LED灯是PB1口,(芯片是正点原子的阿波罗),接着定义GPIOB口的输出模式,为上拉.推 ...

  4. 使用寄存器点亮LED——2

    1. 项目:使用stm32寄存器点亮LED, 分别点亮红.绿.蓝3个灯. 2. 步骤 先新建个文件夹保存项目 再新建项目 将startup_stm32f10x_hd.s拷贝到该文件夹下 新建main. ...

  5. 使用寄存器点亮LED

    1. 项目:使用stm32寄存器点亮LED, 分别点亮红.绿.蓝3个灯. 2. 代码: 只需要编写main.c程序,stm3210x.h程序为空(只需要新建即可). 2.1 点亮绿灯main.c程序 ...

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

    GPIO简介 GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚, STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯.控制以及数据采集的功能.STM32 ...

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

    stm32的编程和stc89c51还是存在着很多思想上的不同的,在51单片机中,我们点亮LED灯,只用给对应IO高低电平就可以了,而stm32中,就一个简单的GPIO,我们也需要配置好几个寄存器,而且 ...

  8. 使用寄存器点亮LED——前言基础知识

    在点亮LED之前,我们需要具备一些基础知识: GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚 ...

  9. stm32F103C8T6通过写寄存器点亮LED灯

    因为我写寄存器的操作不太熟练,所以最近腾出时间学习了一下怎么写寄存器,现在把我的经验贴出来,如有不足请指正 我使用的板子是stm32F103C8T6(也就是最常用的板子),现在要通过写GPIO的寄存器 ...

随机推荐

  1. 1、Kfaka 部署

    一.使用Kfaka自带的zookeeper服务. 1.下载Kafka,下载地址: http://kafka.apache.org/downloads 2.区分Kfaka版本: Scala 2.12 - ...

  2. BZOJ4237稻草人——单调栈+CDQ分治

    题目描述 JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下条件: ...

  3. 简单动态字符串-redis设计与实现

    简单动态字符串 Sds (Simple Dynamic String,简单动态字符串)是 Redis 底层所使用的字符串表示, 几乎所有的 Redis 模块中都用了 sds. 本章将对 sds 的实现 ...

  4. Python 中路径的有效使用

    import arcpy arcpy.GetCount_management("c:/temp/streams.shp") arcpy.GetCount_management(&q ...

  5. JV默认是如何处理异常

    main函数收到这个问题时,有两种处理方式: a:自己将该问题处理,然后继续运行 b:自己没有针对的处理方式,只有交给调用main的jvm来处理 jvm有一个默认的异常处理机制,就将该异常进行处理. ...

  6. Centos 7 下 Corosync + Pacemaker + DRBD + psc + crmsh 实现 mysql 服务高可用

    一.介绍 高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别. Heartbeat到了 ...

  7. 24Flutter中常见的表单有TextField单行文本框,TextField多行文本框、CheckBox、Radio、Switch

    一.Flutter常用表单介绍: CheckboxListTile.RadioListTile.SwitchListTile.Slide. 二.TextField:表单常见属性: maxLines:设 ...

  8. tcpdump抓包代码

    tcpdump - tcp[:]=:]=0x4854 or tcp 抓出来的包可以导入wireshark分析 以上代码曾经在ios越狱机器上使用,用于抓包,具体也记不起来了 导入wireshark效果

  9. Masonry详解

    - (void)viewDidLoad { [super viewDidLoad]; //1.view1 居中显示 UIView *view1 = [[UIView alloc]init]; view ...

  10. 通过命令行给 XenServer 打补丁

    安装 XenCenter 客户端,cmd 到 XenCenter 安装目录. 1.上传补丁到服务器,获得uuid xe patch-upload -s <服务器IP地址> -u root ...