原理图:

MCU在开发板原理图的第二页,LED在开发板原理图的第三页

由图可知,PF9 ,PF10 若输出低电平则灯亮,高电平则灯灭



选推挽输出

代码步骤

  1. 使能IO口时钟。

    调用函数RCC_AHB1PeriphClockCmd();不同的外设调用的时钟使能函数可能不一样

  2. 初始化IO口模式。调用函数GPIO_Init();

  3. 操作IO口,输出高低电平。

    GPIO_SetBits();

    GPIO_ResetBits();

实现步骤

1.删掉FWLIB中不用的源文件(以提高编译速度),保留misc,rcc , gpio , uart

2.新建hardward文件夹,其中新建led文件夹,其中新建led.c 和led.h,分别引入工程

3.led.h中:

#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif

4.led.c中,每个函数用gotodefinition查看定义

怎么写函数里的参数呢?找到assert_param 函数

assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph));

其中最里层的括号里会出现参数,外面用一个宏包着

对包着参数的那个宏,(如下面的IS_RCC_AHB1_CLOCK_PERIPH)goto definition,可以看到其定义

1)如果直接是A||B

例如

#define IS_FUNCTIONAL_STATE(STATE) (((STATE) ==DISABLE) || ((STATE) == ENABLE))

那么可选参数即为A和B

另一种情况:

2)如果不是那样,而是比较复杂,里面直接一些十六进制,就往它上面看,基本就是可选值

例如

#define IS_RCC_AHB1_CLOCK_PERIPH(PERIPH) ((((PERIPH) & 0x810BE800) == 0x00) && ((PERIPH) != 0x00))



如图这些define的内容就是该参数的可选项(从注释也可以看出)

完整代码

main.c

#include "stm32f4xx.h"
#include "led.h"
#include "delay.h" int main(void)
{
LED_Init();
delay_init(168); //时钟为168M
while(1){
GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
delay_ms(500);
GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
delay_ms(500);
}
}

led.c

#include "led.h"
#include "stm32f4xx.h" //固件库
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//1.使能gpio的时钟
//FWLIB , stm32f4xx_rcc.h
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE); //时钟使能函数
//2.GPIO初始化
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出(强高低电平)
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉 (默认情况下高电平,led不亮)
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOF,&GPIO_InitStructure);
//3.置为高电平(默认不亮)
GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);

led.h

#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif

STM32F407 跑马灯 库函数版 个人笔记的更多相关文章

  1. STM32F407 跑马灯 寄存器版 个人笔记

    更多原理请参考跑马灯 库函数版 个人笔记 步骤 使能IO口时钟.配置相关寄存器寄存器RCC->AHB1ENR 初始化IO口模式.配置四个配置寄存器 GPIOx_MODER/ GPIOx_OTYP ...

  2. STM32F407 按键输入实验 库函数版 个人笔记

    读取IO口输入的函数: STM32F4 的 IO口做输入使用的时候,是通过调用函数 GPIO_ReadInputDataBit()来读取 IO 口的状态的.了解了这点,就可以开始我们的代码编写了. 按 ...

  3. STM32F407 跑马灯实验

    1.库函数版本调用的函数有哪些?对应的源文件/头文件是哪个? 库函数 源文件 头文件 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE) stm3 ...

  4. Android 高级UI设计笔记05:使用TextView实现跑马灯的效果

    1. 使用TextView属性实现跑马灯的效果: (1). 新建一个Android工程,命名为"MarqueeTextViewDemo",如下: (2). 来到activity_m ...

  5. Android 开发笔记___textvieww__跑马灯效果

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  6. Vue学习笔记四:跑马灯效果

    目录 跑马灯原理 HTML 箭头函数 计时器 跑马灯效果 跑马灯原理 先讲讲跑马灯的原理,就是一行字,会滚动,思路是这样的,使用substring方法,一个获取字符串的第一个字,一个获取1后面所有的字 ...

  7. TextView的跑马灯效果(AS开发实战第二章学习笔记)

    TextView的跑马灯效果跑马灯用到的属性与方法说明singleLine 指定文本是否单行显示ellipsize 指定文本超出范围后的省略方式focusable 指定是否获得焦点,跑马灯效果要求设置 ...

  8. canvas九宫格跑马灯

    canvas九宫格跑马灯抽奖 之前用dom写了一版,部分 安卓机会卡顿,换用canvas dom版本九宫格抽奖

  9. 为 Xamarin.Forms 做个跑马灯控件

    前段时间,私下用 Xamarin.Forms 做了个商业项目的演示版.很多被国内App玩坏了的控件/效果,XF上都没有或是找不到对应的实现,没有办法只能亲自上阵写了几个,效果还行,就是有BUG. 这个 ...

随机推荐

  1. redis的多实例

    redis的多实例功能,可以在一个机器上,启动多个redis服务端 vim redis.conf ,写入以下内容(不要加上注释) port 6379 bind 0.0.0.0 daemonize no ...

  2. JAVA大数处理(BigInteger,BigDecimal)

    原文链接 Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类. 这两个类都在java.math.*包中,因此每次必须在开头处引用该包. Ⅰ基本函数: 1.valu ...

  3. glassfish应用服务器安装配置

    1.Glassfish4.0下载地址:https://glassfish.java.net/download.html#gfoseTab 2.将下载的glassfish-4.0.zip传输到服务器/h ...

  4. Android学习备忘笺01Activity

    01.设置视图 在Android Studio新建的项目中,通过 setContentView(R.layout.activity_main);方法将res/layout/activity_main. ...

  5. java数据结构和算法04(链表)

    前面我们看了数组,栈和队列,大概就会这些数据结构有了一些基本的认识,首先回顾一下之前的东西: 在数组中,其实是分为有序数组和无序数组,我简单实现了无序数组,为什么呢?因为有序数组的实现就是将无序数组进 ...

  6. 我用 Python 爬了智联“北上广深”5400条 Java 招聘数据

    结论 国际惯例,先上结论. Java 类职位招聘,不论是需求量(工作机会),还是工资平均水平,都是帝都北京最好. 北京和上海的平均工资差距不大(不超过200/月),但上海的需求量是北京的一半,机会更少 ...

  7. 前复权是从今天的价格倒推 后复权是从上市价格前推 不复权就是原始K线。

    前复权是从今天的价格倒推 后复权是从上市价格前推 不复权就是原始K线.

  8. 5-Java-C(小题答案)

    1. a[i][j]=a[i-1][j-1]+a[i-1][j] 2.1835421 3.93 4.1572836

  9. Linux 控制终端转义和控制序列

    DESCRIPTION 描述 Linux控制台实现了VT102和ECMA-48/ISO 6429/ANSI X3.64终端控制的子集, 这个子集很庞大,当然还有Linux自己私有的控制序列,以改变颜色 ...

  10. python连接mysql的操作

    一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...