stm32f407探索者开发板(五)——跑马灯实验(寄存器版本)

简介: stm32f407探索者开发板(五)——跑马灯实验(寄存器版本)

一、步骤


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

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

GPIOx_MODER/GPIOx_OTYPER/GPIOx_OSPEEDR/GPIOx_PUPDR

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


二、配置RCC->AHB1ENR


0a2653c851af460fa595bd959398a8f1.png0eacb84100b54626af849e6b562bf92a.png


#include "led.h"
#include "stm32f4xx.h"
void LED_Init(void)
{
  RCC->AHB1ENR|= 1<<5;  //将第五位设置为1其余不变
  //PF9
  //PF10
}


三、配置IO口模式


2d65d23f6d4748949b924e4057485923.png

红框区域配置为01,其余位置不变

先清零,再置1


//清零:要18、19位为00,取反为11,即3左移2*9
  GPIOF->MODER &= ~(3<<2*9);
  //18位赋值为1,结合上述则为01
  GPIOF->MODER |= 1<<(2*9);

0a2653c851af460fa595bd959398a8f1.png

配置成50MHz,为10


GPIOF->OSPEEDR &= ~(3<<2*9);
  GPIOF->OSPEEDR |= 2<<(2*9);

0eacb84100b54626af849e6b562bf92a.png2d65d23f6d4748949b924e4057485923.png

设置为01上拉


GPIOF->PUPDR &= ~(3<<2*9);
  GPIOF->PUPDR |= 1<<(2*9);

0a2653c851af460fa595bd959398a8f1.png0eacb84100b54626af849e6b562bf92a.png

GPIOF->OTYPER &= ~(1<<9);//一个位配置一个寄存器
  GPIOF->OTYPER |= 0<<9;

2d65d23f6d4748949b924e4057485923.png

就是输出


四、代码展示


4.1 main.c


#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"
int main(void)
{
  delay_init(168);
  LED_Init();
  while(1){
  GPIOF->ODR &= ~(1<<9);
  GPIOF->ODR &= ~(1<<10);
  delay_ms(500);
  GPIOF->ODR |= 1<<9;
  GPIOF->ODR |= 1<<10;
  delay_ms(1000);
  }
}


4.2 led.c


#include "led.h"
#include "stm32f4xx.h"
void LED_Init(void)
{
  RCC->AHB1ENR|= 1<<5;  //将第五位设置为1其余不变
  //PF9
  //清零:要18、19位为00,取反为11,即3左移2*9
  GPIOF->MODER &= ~(3<<2*9);
  //18位赋值为1,结合上述则为01
  GPIOF->MODER |= 1<<(2*9);
  GPIOF->OSPEEDR &= ~(3<<2*9);
  GPIOF->OSPEEDR |= 2<<(2*9);
  GPIOF->PUPDR &= ~(3<<2*9);
  GPIOF->PUPDR |= 1<<(2*9);
  GPIOF->OTYPER &= ~(1<<9);//一个位配置一个寄存器
  GPIOF->OTYPER |= 0<<9;
  GPIOF->ODR |= 1<<9;//1
  //GPIOF->ODR &= ~(1<<9);
  //PF10
  GPIOF->MODER &= ~(3<<2*10);
  GPIOF->MODER |= 1<<(2*10);
  GPIOF->OSPEEDR &= ~(3<<2*10);
  GPIOF->OSPEEDR |= 2<<(2*10);
  GPIOF->PUPDR &= ~(3<<2*10);
  GPIOF->PUPDR |= 1<<(2*10);
  GPIOF->OTYPER &= ~(1<<10);//一个位配置一个寄存器
  GPIOF->OTYPER |= 0<<10;
  GPIOF->ODR |= 1<<10;//1 输出
}


4.3 led.h


#ifndef __LED_H_
#define __LED_H_
void LED_Init(void);
#endif
相关文章
|
2月前
|
C语言 芯片 内存技术
STM32F103标准外设库——寄存器 (二)
STM32F103标准外设库——寄存器 (二)
66 0
STM32F103标准外设库——寄存器 (二)
|
7月前
|
存储 算法 API
stm32cubeMX学习、SD卡虚拟U盘实验
stm32cubeMX学习、SD卡虚拟U盘实验
274 0
|
10月前
STM32_NVIC寄存器详解
STM32_NVIC寄存器详解
195 0
|
10月前
|
芯片 内存技术
STM32串口IAP实验笔记
STM32串口IAP实验笔记
146 0
|
10月前
|
NoSQL Shell C语言
用GCC开发STM32,正点原子开发板的一个库函数版本例程示例
用GCC开发STM32,正点原子开发板的一个库函数版本例程示例
用GCC开发STM32,正点原子开发板的一个库函数版本例程示例
|
10月前
野火F1开发板STM32案例-外部中断(按键)使用
野火F1开发板STM32案例-外部中断(按键)使用
72 0
|
10月前
|
C语言
野火F1开发板STM32案例-MultiButton移植
野火F1开发板STM32案例-MultiButton移植
126 0
|
10月前
|
芯片
野火F1开发板STM32案例 0.96 oled综合库使用
野火F1开发板STM32案例 0.96 oled综合库使用
149 0
|
12月前
|
芯片 iOS开发
STM32 | GPIO口的普通与复用如何配置与用法,本文降从最底层教你如何查看手册运用寄存器来实现GPIO口的配置
STM32 | GPIO口的普通与复用如何配置与用法,本文降从最底层教你如何查看手册运用寄存器来实现GPIO口的配置
551 0
STM32使用寄存器通过控制GPIO点亮一盏灯
STM32使用寄存器通过控制GPIO点亮一盏灯
71 0
STM32使用寄存器通过控制GPIO点亮一盏灯