STM32F407 跑马灯 库函数版 个人笔记
原理图:
MCU在开发板原理图的第二页,LED在开发板原理图的第三页
由图可知,PF9 ,PF10 若输出低电平则灯亮,高电平则灯灭


选推挽输出
代码步骤
- 使能IO口时钟。 
 调用函数RCC_AHB1PeriphClockCmd();不同的外设调用的时钟使能函数可能不一样
- 初始化IO口模式。调用函数GPIO_Init(); 
- 操作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 跑马灯 库函数版 个人笔记的更多相关文章
- STM32F407 跑马灯 寄存器版 个人笔记
		更多原理请参考跑马灯 库函数版 个人笔记 步骤 使能IO口时钟.配置相关寄存器寄存器RCC->AHB1ENR 初始化IO口模式.配置四个配置寄存器 GPIOx_MODER/ GPIOx_OTYP ... 
- STM32F407 按键输入实验 库函数版 个人笔记
		读取IO口输入的函数: STM32F4 的 IO口做输入使用的时候,是通过调用函数 GPIO_ReadInputDataBit()来读取 IO 口的状态的.了解了这点,就可以开始我们的代码编写了. 按 ... 
- STM32F407 跑马灯实验
		1.库函数版本调用的函数有哪些?对应的源文件/头文件是哪个? 库函数 源文件 头文件 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE) stm3 ... 
- Android 高级UI设计笔记05:使用TextView实现跑马灯的效果
		1. 使用TextView属性实现跑马灯的效果: (1). 新建一个Android工程,命名为"MarqueeTextViewDemo",如下: (2). 来到activity_m ... 
- Android 开发笔记___textvieww__跑马灯效果
		<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ... 
- Vue学习笔记四:跑马灯效果
		目录 跑马灯原理 HTML 箭头函数 计时器 跑马灯效果 跑马灯原理 先讲讲跑马灯的原理,就是一行字,会滚动,思路是这样的,使用substring方法,一个获取字符串的第一个字,一个获取1后面所有的字 ... 
- TextView的跑马灯效果(AS开发实战第二章学习笔记)
		TextView的跑马灯效果跑马灯用到的属性与方法说明singleLine 指定文本是否单行显示ellipsize 指定文本超出范围后的省略方式focusable 指定是否获得焦点,跑马灯效果要求设置 ... 
- canvas九宫格跑马灯
		canvas九宫格跑马灯抽奖 之前用dom写了一版,部分 安卓机会卡顿,换用canvas dom版本九宫格抽奖 
- 为 Xamarin.Forms 做个跑马灯控件
		前段时间,私下用 Xamarin.Forms 做了个商业项目的演示版.很多被国内App玩坏了的控件/效果,XF上都没有或是找不到对应的实现,没有办法只能亲自上阵写了几个,效果还行,就是有BUG. 这个 ... 
随机推荐
- 浅谈Windows API编程
			WinSDK是编程中的传统难点,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制…… WinSDK是编程 ... 
- HDU 1568 快速求斐波那契前四位
			思路: 把斐波那契通项公式转化成log的形式,高中数学... //By SiriusRen #include <bits/stdc++.h> using namespace std; ], ... 
- 选择排序                                                    分类:            算法             c/c++             2014-10-10 20:32    509人阅读    评论(0)    收藏
			选择排序(假设递增排序) 每次选取从当前结点到末尾结点中最小的一个与当前结点交换,每一轮固定一个元素位置. 时间复杂度O(n^2),空间复杂度O(1).下面的示例代码以带头结点的链表为存储结构: #i ... 
- 最简单的struts实例介绍
			struts2环境配置 struts2框架,大多数框架都在使用.由于工作需要,开始做Java项目.先学个struts2. 一.下载struts2 有好多版本,我下载的是struts-2.2.1.1 ... 
- iOS 集成银联支付(绕过文档的坑,快速集成)-转
			本文是投稿文章,作者:南栀倾寒当初集成支付宝的时候,觉得见了这么丑的代码,加上这么难找的下载地址,在配上几乎为零的文档,寒哥就要吐血了. 下午去集成银联,才知道血吐的早了. 下载地址:https:// ... 
- SpringMvc如何将Url 映射到 RequestMapping (二)
			昨天简单分析了Springmvc 中 RequestMapping 配置的url和请求url之间的匹配规则.今天详细的跟踪一下一个请求url如何映射到Controller的对应方法上 一.入口 org ... 
- IntentFilter的相关问题解析
			IntentFilter是配合Intent而生的,你有目标行动或者结果,那么那些行动和结果就会有他完成的特定要求,这些要求就是IntentFilter,可以理解为Intent和IntentFilter ... 
- jq一些常用的交互效果
			jq回到顶部: //回到顶部 $(window).scroll(function() { //执行处理的代码 var a = document.body.scrollTop; if($(documen ... 
- HTML标签的分类
			html中的标签元素大体被分为三种不同的类型:块状元素.内联元素和内联块状元素.常用的块状元素有:<div>.<p>.<h1>...<h6>.<o ... 
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave (堆优化dijkstra)
			题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ... 
 
			
		