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月前
|
传感器
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
|
2月前
stm32f407探索者开发板(十九)——外部中断实验-EXIT
stm32f407探索者开发板(十九)——外部中断实验-EXIT
|
6天前
|
开发框架 C语言 开发者
STM32寄存器操作、模板构建
【8月更文挑战第23天】本文档介绍STM32中的寄存器操作方法与模板构建技巧。寄存器是STM32控制内外设的核心,通过直接读写特定内存地址来进行操作。以配置GPIO为例,需定位寄存器地址并写入适当值。文档还提供了一个基本的代码模板,包括包含头文件、时钟配置、外设初始化及主函数流程,帮助开发者快速搭建开发框架,并强调了参考手册的重要性以确保正确使用。
|
2月前
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
|
2月前
|
程序员
stm32f407探索者开发板(二十一)——窗口看门狗
stm32f407探索者开发板(二十一)——窗口看门狗
|
2月前
|
芯片
stm32f407探索者开发板(二十)——独立看门狗实验
stm32f407探索者开发板(二十)——独立看门狗实验
|
2月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
236 0
|
3月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
182 2
|
3月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
332 4
|
3月前
|
存储 数据采集 数据安全/隐私保护
使用STM32F103读取TF卡并模拟U盘:使用标准库实现
通过以上步骤,你可以实现用STM32F103将TF卡内容变成U盘进行读取。这种功能在数据采集、便携式存储设备等应用中非常有用。如果你有更多的需求,可以进一步扩展此项目,例如添加文件管理功能、加密存储等。希望这篇博客能帮到你,如果有任何问题,欢迎在评论区留言讨论!
84 1
下一篇
云函数