意法半导体在出这个款板的时候也同步推出了stdperiph_driver这个库文件。

然后根据库以及demonstration 大概可以看见如下的内容。

在main.c中有个这样的调用

STM_EVAL_LEDToggle(LED4);

这个函数的原型来自于 stm32f4_discovery.c 类似如下

void STM_EVAL_LEDOn(Led_TypeDef Led)

{

GPIO_PORT[Led]->BSRRL = GPIO_PIN[Led];

}

在stdperiph_driver中可以看见关于 led_typedef 处的定义 ,定义为 enum类型。

GPIO_PORT在定义处为 GPIO_typedef struct 的指针。

GPIO_TypeDef* GPIO_PORT[LEDn] = {LED4_GPIO_PORT, LED3_GPIO_PORT, LED5_GPIO_PORT, LED6_GPIO_PORT};

Ledx_gpio_port 用宏定义为 gpiod

Gpiod用宏定义为 gpiod_base

Gpiod_base 同样的用宏定义为 ahb1periph_base 加一段offset 0x0c00

熟悉arm的不难知道 ahb1periph_base 的地址为0x40020000

所以 gpio_typedef* gpio_port[] 定义一个数组指针分别指向同一个地址,也就是gpio register 的地址

然后根据下面的struct 用作bitband 操作,可仔细观察address offset 和 stm32_manual 的关系。

typedef struct

{

__IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */

__IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */

__IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */

__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */

__IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */

__IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */

__IO uint16_t BSRRL; /*!< GPIO port bit set/reset low register, Address offset: 0x18 */

__IO uint16_t BSRRH; /*!< GPIO port bit set/reset high register, Address offset: 0x1A */

__IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */

__IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */

} GPIO_TypeDef;

然后还原这句话 GPIO_PORT[Led]->BSRRL = GPIO_PIN[Led];

也就是 把0x1000这个数据送到 0x40020c18这个地址。

然后我们对照着 gpio_typedef 进行查看也就把GPIO port bit set/reset low register 送入 0x1000这个数据

Gpio有16个io那么我们对照着 pin12进行换算也就是0001 0000 0000 0000B

也就是 0x1000

具体的可以参照我的上一篇文章。

stm32里toggle_stm32f4discovery led toggle (二)相关推荐

  1. 基于Proteus无实物STM32入门自学教程(二)--LED流水灯

    本教程面向新手,前期没有用到stm32的内部库,源程序尽量使用单文件.方便从51直接转过来的同学有个适应期.proteus仿真stm32总所周知没有51仿真的那么完美.笔者在51年代进行仿真时基本与实 ...

  2. 嵌入式固件开发之二——直接操作STM32寄存器的LED点灯测试程序和仿真

    2 直接操作STM32寄存器的LED点灯测试程序 2.1 创建并编译工程 双击桌面上的"Keil uVision5"图标,启动MDK. 点击"Project"- ...

  3. Arduino/stm32 智能小车设计(二)

    Arduino/stm32 智能小车设计(二) 本节进行Arduino智能小车的代码讲解. 一.I/O口定义与初始化函数 如下图RGB指示灯用到10.11.12三个I/O口,分别对应蓝色.红色.绿色. ...

  4. STM32点亮led的详细步骤

    STM32 点亮LED灯的步骤1:先是在点亮LED灯那个引脚使能,相当于修路,比如是PIN5引脚,就要使能对应的GPIO.使能函数是 控制一个固件发挥作用:第一步就是把它对应的总线时钟使能,第二步配置 ...

  5. STM32定时器控制LED灯闪烁及PWM练习

    一.STM32定时器控制LED灯闪烁 1.相关配置 1)配置RCC和SYS 2)配置IO 配置PC15,并命名为D1. 3)配置定时器 选定时器2,配置Clock Source为Internal Cl ...

  6. STM32学习 3:GPIO管脚配置与第一个STM32实验:LED灯闪烁

    STM32学习 3:GPIO管脚配置与第一个STM32实验:LED灯闪烁 1,GPIO管脚简介与配置 1.1GPIO框图 1.2GPIO不同模式 1.3 GPIO寄存器 1.4 GPIO库函数配置 2 ...

  7. bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二(RMQ)

    3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 84  Solve ...

  8. 从ARM裸机看驱动之按键中断方式控制LED(二)

    硬件环境:Samsung Cortex-A9 Exynos4412 BSP 软件环境:Linux3.14 =============================================== ...

  9. LED显示屏二次开发接口的设计方案

    引言 在LED 显示屏工程应用中,有单块显示屏项目,但更多的是多块显示屏项目.对于单块显示屏,直接使用厂商配置的控制软件就满足要求了:但对于多块显示屏,尤其是系统集成项目,厂商配置的控制软件就很难满足 ...

最新文章

  1. IntelliJ IDEA 更新后,电脑卡成球,该如何优化?
  2. 王者荣耀装备测试软件,王者荣耀首度公开5v5 PVP自动化测试方案
  3. div实现返回符,倒三角,椭圆+小知识收集
  4. C语言文件操作(一)产生0~M范围内的N个随机数
  5. 反射-获取java私有内部类反射类型、私有字段
  6. n个节点的二叉树n+1_使用C ++程序删除链接列表的M个节点后的N个节点
  7. 弹性负载均衡:负载无限,均衡有道【华为云分享】
  8. 【2013年04月18号】
  9. css使两个盒子并列_前端学习CSS
  10. 阶段3 1.Mybatis_07.Mybatis的连接池及事务_2 连接池介绍
  11. 线性代数----逆矩阵的性质和求法
  12. RTF转HTML(<div>标签)格式的方法(java)
  13. IOS 定位 CLLocationManager
  14. 有源滤波器——APF
  15. 1.初识JAVA概念、配置开发环境
  16. [算法竞赛入门经典] UVA 12174 - Shuffle
  17. 百度上线惊雷算法3.0严打SEO快排作弊问题
  18. uIP宏定义的详细配置
  19. android 反色 java_Android6.0状态栏图标原生反色操作
  20. 学习OpenMV(一)详细参数及简单介绍

热门文章

  1. 语音识别-声纹识别-语音合成【专题二】
  2. titanRTX安装bubantu18.04 内核 驱动 cuda cudnn ananconda python tensorflow-gpu
  3. Kernighan-Lin算法
  4. 13 Babylonjs基础入门 粒子
  5. Keil C51 V9.00/uVision 4基础
  6. 1月8日服务器例行维护公告,2020年1月8日维护公告
  7. 架构一、无人值守PXE+KS
  8. 华中农业大学C++考试基础练习题
  9. 支付宝移动接入报系统繁忙,参数错误等错误
  10. 【转】关于浏览器的内核以及几个小问题