当前位置: 首页 > article >正文

STM32完全学习——F407ZGT6点亮LED

一、寄存器描述

我们想要点亮LED,无非就是对于寄存器的一些设置,主要分为两步,首先是需要打开相应GPIO的时钟,这是因为STM32在上电后,每个外设的时钟默认都是关闭的,需要我们手动打开。其次就是对GPIO的一些寄存器进行设置,然后给端口输出0或1就可以点亮LED了。需要注意的是我们这次需要在KEIL5软件下进行编程。

二、编程实现

有了上面的寄存器表,我们只需要设置一些值就可以完成对GPIO的控制了,我这个开发板上面我使用的是GPIOF9和GPIOF10这两个端口,LED灯的负极接的GPIOF9和GPIOF10。程序如下:

#ifndef __LED_H__
#define __LED_H__

#define uint unsigned int

typedef struct rGPIO
{
  uint MODER;
  uint OTYPER;
  uint OSPEEDR;
  uint PUPDR;
  uint IDR;
  uint ODR;
  uint BSRR;
}GPIO_TypeDef;

typedef struct rRCC
{
  uint CR;
  uint PLLCFGR;
  uint CFGR;
  uint CIR;
  uint AHB1RSTR;
  uint AHB2RSTR;
  uint AHB3RSTR;
  uint RESERVED1;
  uint APB1RSTR;
  uint APB2RSTR;
  uint RESERVED2;
  uint RESERVED3;
  uint AHB1ENR;
}RCC_TypeDef;

void led_init(void);
#endif

#include "led.h"

GPIO_TypeDef *GPIOF = (GPIO_TypeDef *)0x40021400;  //GPIOF的起始地址
RCC_TypeDef *RCC = (RCC_TypeDef *)0x40023800;      //RCC的起始地址

void led_init(void)
{
  RCC->AHB1ENR &= ~(0x01 << 5);
  RCC->AHB1ENR |= 0x01 << 5;      //开启GPIOF的时钟

  GPIOF->MODER &= ~((0x03 << 9*2) | (0x03 << 10*2));  
  GPIOF->MODER |= (0x01 << 9*2) | (0x01 << 10*2);   //端口F设置为通用输出模式
  GPIOF->OTYPER &= ~((0x01 << 9) | (0x01 << 10));
  GPIOF->OTYPER |= (0x0 << 9) | (0x0 << 10);        //端口F设置为推挽输出
  GPIOF->OSPEEDR &= ~((0x03 << 9*2) | (0x03 << 10*2));
  GPIOF->OSPEEDR |= (0x02 << 9*2) | (0x02 << 10*2); //端口F输出速度设置为50MHz
  GPIOF->ODR = 0xfffff0ff;                          //给GPIOF9和F10两个端口都输出0
}

三、注意事项

首先我们运行上述代码会发现程序好像并没有运行,然后我们只需要勾选一个地方就可以了。

如果还有一些错误比如下面这种:

那么你只需要在main()函数下面在加一个函数就可以了,里面什么都不需要写。

#include "led.h"

int main(void)
{
  led_init();

}

void SystemInit(void)
{


}


http://www.kler.cn/a/396186.html

相关文章:

  • 《基于Oracle的SQL优化》读书笔记
  • 【包教包会】CocosCreator3.x框架——带翻页特效的场景切换
  • 51c大模型~合集42
  • Python sys模块介绍
  • HarmonyOS Next星河版笔记--界面开发(5)
  • 深度解析:Android APP集成与拉起微信小程序开发全攻略
  • 力扣-Mysql-3293-计算产品最终价格(中等)
  • CentOS中安装Webmin进行可视化管理linux
  • 从 Rust 官方文档理解 Ownership
  • 零基础Java第十八期:图书管理系统
  • 【学习】HTTP
  • 【前端】深入浅出的React.js详解
  • SpringCloud2023实战之接口服务测试工具SpringBootTest
  • ORB-SLAM2源码学习:ORBextractor.cc:ORBextractor::operator()主入口函数
  • 开源AI大模型工作流神器Flowise本地部署与远程访问
  • VMware高危漏洞VMSA-2024-0019修复堆溢出和权限提升漏洞
  • 最后一个单词的长度---每日小题
  • 【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载
  • Spring Boot框架:电商系统的技术革新
  • CSS Grid 布局实战:从入门到精通
  • 推理计算:GPT-o1 和 AI 治理
  • 一文说清C++类型转换操作符(cast operator)
  • datawhale11月组队学习 模型压缩技术2:PyTorch模型剪枝教程
  • 多路转接之poll
  • SpringBoot整合Minio
  • 第二十章 TCP 客户端 服务器通信 - 立即发送模式(Q 模式)