为了使工程更加有条理,我们把 LED 灯控制相关的代码独立分开存储,方便以后移植。
在“工程模板”之上新建“ bsp_led.c”及“ bsp_led.h”文件,其中的“ bsp”即 Board
Support Packet 的缩写(板级支持包),这些文件也可根据您的喜好命名,这些文件不属于
STM32 标准库的内容,是由我们自己根据应用需要编写的。

在学习过程中,经常看到有人问这样一个问题,为什么下面的时钟初始化可以用按位或(|)的方式。其实这里就是在于ST底层库的实现,需要我们灵活运用C语言。

void LED_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure; /*开启LED相关的GPIO外设时钟*/
RCC_AHB1PeriphClockCmd ( LED1_GPIO_CLK|
LED2_GPIO_CLK|
LED3_GPIO_CLK, ENABLE); //这里可以用 | 的方式,因为底层库寄存器配置是个uint32_t的寄存器,可以多位同时操作 /*选择要控制的GPIO引脚*/
GPIO_InitStructure.GPIO_Pin = LED1_PIN; /*设置引脚模式为输出模式*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; /*设置引脚的输出类型为推挽输出*/
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; /*设置引脚为上拉模式*/
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; /*设置引脚速率为2MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; /*调用库函数,使用上面配置的GPIO_InitStructure初始化GPIO*/
GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);
//有了上面的 | 配置思路之后,我们在想,下面这样复用的代码能否可以也通过 | 的方式呢?
 //答案是否定的,这里的寄存器配置是个GPIO_TypeDef*的类型,用 | 操作已然不合适。
/*选择要控制的GPIO引脚*/
GPIO_InitStructure.GPIO_Pin = LED2_PIN;
GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure); /*选择要控制的GPIO引脚*/
GPIO_InitStructure.GPIO_Pin = LED3_PIN;
GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure); /*关闭RGB灯*/
LED_RGBOFF;
}

或许还有疑问就是为什么后面的LED2,3不用再配置模式那些,这其实还是属于c语言问题,在我们三个IO口都是相同模式选择的情况下,我们可以只改变结构体中控制引脚的部分,其他部分保留,但是如果有引脚的对应模式需要改变,那就不能这样了。

STM32 标准库补充知识
1. SystemInit 函数去哪了?
在前几章我们自己建工程的时候需要定义一个 SystemInit 空函数,但是在这
STM32 标准库的工程却没有这样做, SystemInit 函数去哪了呢?
这个函数在 STM32 标准库的“ system_stm32f4xx.c”文件中定义了,而我们
经包含该文件。标准库中的 SystemInit 函数把 STM32 芯片的系统时钟设置成了
即此时 AHB1 时钟频率为 180MHz, APB2 为 90MHz, APB1 为 45MHz。当 ST
电后,执行启动文件中的指令后,会调用该函数,设置系统时钟为以上状态 。

2.断言

断言一般用在调试程序的时候使用,ST虽然在库函数中有断言,但是默认是没有开启的,需要定义一个宏。

除了启用这个宏之外,我们还要在外部定义一个asset_failed函数,因为这个函数在这里只有声明。这些都在conf.h头文件中。FILE LINE这种,是预处理宏,不需要头文件支持,是c编译器具备的。

3.防止重复包含

GPIO输出—使用固件库点亮LED的更多相关文章

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

    第11章     GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...

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

    第11章     GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...

  3. GPIO 输出—使用固件库点亮 LED

    编程要点 1. 使能 GPIO 端口时钟:  2. 初始化 GPIO 目标引脚为推挽输出模式:  3. 编写简单测试程序,控制 GPIO 引脚输出高.低电平. LED的电路图 过程: 1.拷贝一个库函 ...

  4. 第12章 GPIO输出—使用固件库点亮LED

    本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 利用库建立好的工程模板,就可以方便地使用STM32 H ...

  5. 使用固件库点亮led灯

    1. 项目 使用STM32F103VE的固件库实现流水灯设计. 2. 代码 由于这是基于野火的视频进行学习的,项目代码在上节基础上进行编写的. 点亮绿灯: main.c #include " ...

  6. S3C2440—3.用点亮LED来熟悉裸机开发的详细流程

    文章目录 一.硬件知识 1.LED原理图 2.芯片手册 Ⅰ.找LED原理图 Ⅱ.找对应引脚 Ⅲ.在芯片手册中查找引脚信息 Ⅳ.查看寄存器说明 Ⅴ.配置寄存器 二.S3C2440框架与启动过程 三.要用 ...

  7. JZ2440裸机点亮LED【学习笔记】

    平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山一期视频学习笔记 一.我们首先来做第一个实验,用汇编语言点亮板子上的LED. 1.1 LED的原理图 从下面的原理图可知LED1是 ...

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

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

  9. 单片机基础——使用GPIO输出点亮一个LED灯

    1. 准备工作 硬件准备 开发板首先需要准备一个小熊派IoT开发板,并通过USB线与电脑连接. 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码,可参考MDK安装教程 ...

随机推荐

  1. VS2010 OpenCL运行环境配置

    1.安装AMD GPU显卡驱动(安装后重启) 13-12_win7_win8_64_dd_ccc_whql.exe 2.安装AMD OpenCL SDK(安装后重启) AMD-APP-SDK-v2.9 ...

  2. javascript常用技巧归纳

    最近归纳了下,发现还很多的哦1 javascript捕捉方向键  <HTML><HEAD><title>反选</title><script lan ...

  3. mongodb pymongo.errors.CursorNotFound: Cursor not found, cursor id: 82792803897

    默认 mongo server维护连接的时间窗口是十分钟 默认 单次从 server获取数据是101条或者 大于1M小于16M的数据 所以默认情况下,如果10分钟内未能处理完数据,则抛出该异常. 解决 ...

  4. System.Windows.Forms

    File: winforms\Managed\System\WinForms\DataGridView.cs Project: ndp\fx\src\System.Windows.Forms.cspr ...

  5. 反射方式,获取出集合ArrayList类的class文件对象

    /* * 定义集合类,泛型String * 要求向集合中添加Integer类型 * * 反射方式,获取出集合ArrayList类的class文件对象 * 通过class文件对象,调用add方法 * * ...

  6. 阿里云服务器 centos7 ftp安装

    昨天租了阿里云服务器一个月,想玩一下linux系统,结果想用ftp上传本地文件的时候,发现用不了,结果在安装配置的时候折腾了几个小时,在网上查了无数的资料,有的说要改配置文件,有的说要关防火墙,说啥的 ...

  7. 关于ibatis的实体类部分属性无法映射

    今天在编码中不小心就遇到了一个ibatis初学者偶尔会遇到的问题. 先来看这张图中的DictionPo的部分属性赋值都为空.其实,数据库中是有数据的. 再来看看mapper的写法 上面那个对象查询语句 ...

  8. Android开发之Shortcuts, LiveFolder, Widget

    2013-07-05 桌面组件包括:快捷方式(Shortcuts),实时文件夹(Live Folder),桌面插件(Widget).   快捷方式用于启动应用程序的某个组件,例如Activity, S ...

  9. 在where子句中经常使用的运算符

    比较运算符 >   <   <=   >=   =    <> 大于.小于.大于(小于)等于.不等于 BETWEEN  ...AND... 显示在某一区间的值 IN ...

  10. python 的集合 set()操作

      Python 的集合 set(),是一个无序不重复元素集,可以用于关系测试和消除重复元素.     有以下运算:   1.创建一个set ()集合:   2.add:增加集合元素   3.clea ...