更多原理请参考跑马灯 库函数版 个人笔记

步骤

  1. 使能IO口时钟。配置相关寄存器寄存器RCC->AHB1ENR

  2. 初始化IO口模式。配置四个配置寄存器

    GPIOx_MODER/ GPIOx_OTYPER/ GPIOx_OSPEEDR/ GPIOx_PUPDR

  3. 操作IO口,输出高低电平。配置寄存器GPIOX_ODR或者BSRRL/BSRRH。

代码

led.c

#include "led.h"
#include "stm32f4xx.h"
void LED_Init(){
//1.使能pf9 和pf 10 的时钟
//打开中文参考手册,找到时钟使能寄存器ah
/*
6.3.12 RCC AHB1 外设时钟使能寄存器 (RCC_AHB1ENR)
*/
//查手册知,PF是第五位,故第五位置1,其余位不变
RCC->AHB1ENR |= 1<<5; //2.GPIO_init
//GPIOF)_9
GPIOF->MODER &= ~(3<<2*9); //查手册知,19,18位为01(通用输出模式)先都置为0 ; gpiof9,每个引脚两位
GPIOF->MODER |= 1<<2*9; //再把18位置为1 GPIOF->OSPEEDR &= ~(3<<2*9); //19~18 10 fast 50MHz
GPIOF->OSPEEDR |= 2<<2*9; GPIOF->PUPDR &= ~(3<<2*9); //查手册知,19,18位为01
GPIOF->PUPDR|= 1<<2*9; GPIOF->OTYPER &= ~(1<<9); //第九\十位为0 //GPIOF)_10
GPIOF->MODER &= ~(3<<2*10); //查手册知,19,18位为01(通用输出模式)先都置为0 ; gpiof9,每个引脚两位
GPIOF->MODER |= 1<<2*10; //再把18位置为1 GPIOF->OSPEEDR &= ~(3<<2*10); //19~18 10 fast 50MHz
GPIOF->OSPEEDR |= 2<<2*10; GPIOF->PUPDR &= ~(3<<2*10); //查手册知,19,18位为01
GPIOF->PUPDR|= 1<<2*10; GPIOF->OTYPER &= ~(1<<10); //第九\十位为0 //3.输出高低电平
GPIOF->ODR |= 1<<9;
GPIOF->ODR |= 1<<10;
}

led.h

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

main.c

#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"
int main()
{
delay_init(168);
LED_Init();
while(1){
Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz,(先开始没加这一句,延时速度很慢)
GPIOF->ODR &=~(1<<9);
GPIOF->ODR |=1<<10;
delay_ms(500); GPIOF->ODR |=1<<9;
GPIOF->ODR &=~(1<<10);
delay_ms(500);
}
}

STM32F407 跑马灯 寄存器版 个人笔记的更多相关文章

  1. STM32F407 跑马灯 库函数版 个人笔记

    原理图: MCU在开发板原理图的第二页,LED在开发板原理图的第三页 由图可知,PF9 ,PF10 若输出低电平则灯亮,高电平则灯灭 选推挽输出 代码步骤 使能IO口时钟. 调用函数RCC_AHB1P ...

  2. stm32寄存器版学习笔记07 ADC

    STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...

  3. stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)

    STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...

  4. stm32寄存器版学习笔记05 PWM

    STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...

  5. stm32寄存器版学习笔记03 外部中断

    stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...

  6. stm32寄存器版学习笔记10 SPI

    SPI(Serial Peripheral Interface),串行外围设备接口.SPI是一种高速的.全双工.同步的通信总线. SPI接口一般使用4条线通信: MISO 主设备数据输入,从设备数据输 ...

  7. stm32寄存器版学习笔记08 DMA

    DMA(Direct Memory Access),直接存储器访问.DMA传输方式无需CPU直接控制传输,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU效率大大提高.stm32f10 ...

  8. stm32寄存器版学习笔记04 定时计数器中断

    STM32共有8个定时计数器,其中TIME1和TIME8是高级定时器,TIME2~TIME5是通用定时器,TIME6和TIME7是基本定时器.以TIME3为例总结定时计数器的基本用法. 1.TIM3的 ...

  9. stm32寄存器版学习笔记02 串口通信

    stm32F103RCT6提供5路串口.串口的使用,只要开启串口时钟,设置相应的I/O口的模式,然后配置下波特率.数据位长度.奇偶校验等信息,即可使用. 1.串口的配置步骤 ①串口时钟使能 APB2外 ...

随机推荐

  1. 51nod 1874 字符串排序

    1874 字符串排序  基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 定义一个字符串的无序度为所有位置后面的字母比该位置的字母小的总数之和.比如&q ...

  2. ACM_送气球(规律题)

    送气球 Time Limit: 2000/1000ms (Java/Others) Problem Description: 为了奖励近段时间辛苦刷题的ACMer,会长决定给正在机房刷题的他们送气球. ...

  3. Matlab实现图像分割 分类: 图像处理 2014-06-14 21:31 662人阅读 评论(1) 收藏

    下面使用极小值点阈值选取方法,编写MATLAB程序实现图像分割的功能. 极小值点阈值选取法即从原图像的直方图的包络线中选取出极小值点, 并以极小值点为阈值将图像转为二值图像 clear all; cl ...

  4. hdu 1695 GCD 欧拉函数 + 容斥

    http://acm.hdu.edu.cn/showproblem.php?pid=1695 要求[L1, R1]和[L2, R2]中GCD是K的个数.那么只需要求[L1, R1 / K]  和 [L ...

  5. Quartz~关于cron表达式要说的

    每20秒执行一次

  6. mvc的生命周期

    尽管每次都是从msdn里复制粘贴,但是还是有必要的,加深对mvc的理解和官方的表述. 了解 MVC 应用程序执行过程 发送给基于 ASP.NET MVC 的 Web 应用程序的请求首先通过 UrlRo ...

  7. Java语法基础-final关键字

    final关键字主要用在三个地方:变量.方法.类. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改: 如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一 ...

  8. iOS Programming View Controllers 视图控制器

    iOS Programming View Controllers  视图控制器  1.1  A view controller is an instance of a subclass of UIVi ...

  9. 洛谷 P1364 医院设置

    题目描述 设有一棵二叉树,如图: 其中,圈中的数字表示结点中居民的人口.圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为l.如上 ...

  10. Android(java)学习笔记197:ContentProvider使用之内容观察者02

    下面通过3个应用程序之间的交互说明一下内容观察者: 一. 如下3个应用程序为相互交互的: 二.交互逻辑图: 三.具体代码: 1.   16_数据库工程: (1)数据库帮助类BankDBOpenHelp ...