stm32f4discovery led toggle (二)

意法半导体在出这个款板的时候也同步推出了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

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

时间: 2024-10-22 02:56:33

stm32f4discovery led toggle (二)的相关文章

stm32f4discovery LED toggle

MOV R0,#0x1000 MOV R1,#0x40020c00 STRH R0,[R1]

LED灯珠散热的计算方法

LED灯珠散热的计算方法 来源: 时间:2014-09-23 13:55 [编辑:lufieliu] [字体:大 中 小] 我来说两句 一.热对LED的影响 1.LED是冷光源吗? (1)LED的发光原理是电子与空穴经过复合直接发出光子,过程中不需要热量.LED可以称为冷光源. (2)LED的发光需要电流驱动.输入LED的电能中,只有约15%有效复合转化为光,大部分(约85%)因无效复合而转化为热. (3)LED发光过程中会产生热量,LED并非不会发热的冷光源. 2.热对LED性能和结构的影响

Android深度探索-卷1第七章心得体会

创建LED驱动的设备文件 第一步:使用cdev_init函数初始化cdev 第二步:指定设备号.直接在代码指定或动态分配 第三步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中 第四步:使用class_create宏创建struct class 第五步:使用device_create函数创建设备文件 卸载LED驱动的设备文件 需要依次调用device_destroy.class_destroy和unregister_chrdev_region方法 void device_dest

CC2540开发板学习笔记(五)&mdash;&mdash;串口通信

一.实验现象: 开发板实现 3个功能.发送.收发.控制 LED. 二.实验过程 1.PL2303 USB转串口电路图 2.串口发送 (1)查看用户手册有: UART0 对应的外部设备 IO 引脚关系为: P0_2 ------ RX                                                     P0_3 ------ TXUART1 对应的外部设备 IO 引脚关系为: P0_5 ------ RX                             

如何编写自己的Arduino库?

一开始写Arduino 的时候很不习惯,没有main函数,因为好多东西都被隐藏了.一直想搞清楚,以便编写自己的库文件.于是研究一下午,下面是一些总结. Arduino工程的初步认识 一.目录规范 当你创建一个空的工程,先按下ctrl+s保存一下.这个时候弹出对话框,命名工程.假如命名为LED,并保存在 我自己的Arduino工作目录下  H:\Arduino\workspace\ 于是IDE会自动帮我们在workspace下创建1个文件夹,并将sketch主文件放在里面,而且主文件和文件夹同名.

树莓派.使用Node.js控制GPIO

树莓派上的40个GPIO是最好玩的东西 它们可以被C,/C++, Python, Java等语言直接控制 现在就来看看怎么用Node.js做到同样的事情 在试验之前, 请先安装好Node.js, 具体可以移步到: <树莓派.安装系统+Node.js+MongoDB系列环境> 1.准备试验文件夹 mkdir /home/pi/Documents/test-gpio-demo/ 2.创建文件package.json { "name": "test-gpio-demo&

第 17 章 按钮和折叠插件

学习要点: 1.按钮 2.折叠 主讲教师:李炎恢 本节课我们主要学习一下 Bootstrap 中的按钮和折叠插件. 一.按钮 可以通过按钮插件创建不同状态的按钮. //单个切换. <button class="btn btn-primary" data-toggle="button" autocomplete="off">单个切换</button> 注:在 Firefox 多次页面加载时,按钮可能保持表单的禁用或选择状态.

树莓派.使用Node.js来制作一个作业检查仪

先上图 前段时间, 花了点时间给女儿做了个数学习题的小程序 首页 做题界面(题目每次都随机生成, 加减乘除都有) 做题记录 现在问题来了, 怎么才能随时知道作业有没有完成呢? 每次打开做题记录页面刷新太费劲了 于是做了个树莓派+小LED灯的设备, 基本功能如下: LED闪烁 - 表示正在检查作业,且当天作业未完成 LED常亮 - 表示检测到作业已完成 每天重置一次LED状态 准备物料: - 树莓派 - LED灯珠1个, 电阻一个(220欧姆或1K都可以) 接线: 第36脚(GPIO16) 经过一

[学习开发板怎么选]迅为4412开发板帮你入门嵌入式

丰富选配模块 入门视频教程(购买后提供完整版高清教程)部分视频观看地址: [视频教程]iTOP-4412开发板之学习方法--致初学者 http://v.youku.com/v_show/id_XNzQ5MDA4NzM2.html [视频教程]三星Exynos 4412处理器开发要点 http://v.youku.com/v_show/id_XNjIwODA0MTY4.html [视频教程]iTOP-4412开发板之如何扩展不同型号LCD屏 http://v.youku.com/v_show/id