栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

用寄存器点亮LED灯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用寄存器点亮LED灯

文章目录
      • 存储映射图
      • 寄存器映射
      • 使用C语言封装寄存器
      • 点亮一个LED
        • 1. GPIO介绍
        • 2. 操作指导
      • 编译介绍

存储映射图

寄存器映射
  1. 就是给特定的寄存单元取别名

  2. 寄存器映射

  3. 外设地址=总线的基地址+偏移地址

使用C语言封装寄存器
//总线基地值(AHB地址)
#define PERIPH_BASE ((unsigned int)0x40000000)

//APB2基地址
#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)

//GPIOB 基地址
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)

//定义寄存器基地址 这里以 GPIOB 为例
 #define GPIOB_CRL     *(unsigned int*)(GPIOB_BASE+0x00)  
 
 #define GPIOB_CRH     *(unsigned int*)(GPIOB_BASE+0x04)   
 
 #define GPIOB_IDR     *(unsigned int*)(GPIOB_BASE+0x08)    
 
 #define GPIOB_ODR     *(unsigned int*)(GPIOB_BASE+0x0C)    
 
 #define GPIOB_BSRR    *(unsigned int*)(GPIOB_BASE+0x10)   
 
 #define GPIOB_BRR     *(unsigned int*)(GPIOB_BASE+0x14)   
 
 #define GPIOB_LCKR    *(unsigned int*)(GPIOB_BASE+0x18)

  1. 一般使用结构体来编辑寄存器

点亮一个LED 1. GPIO介绍
  1. GPIO分为电源引脚、晶振引脚、复位引脚、下载引脚、BOOT引脚、GPIO引脚
  2. GPIO结构
  • 1表示保护二极管,当I/O口电压过低,VSS导通,当I/O口电压过高,VDD导通,以此来保持电压稳定
  • 2上拉电阻和下拉电阻可以将I/O口有一个确定状态,当上拉、下拉电阻都是断开,就表现为浮空。STM32 内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流 很小,如果想要输出一个大电流,那么就需要外接上拉电阻了。
  • 3推挽输出。当为高电平,上面MOS管导通,输出为高电平(VDD);当为低电平,下面MOS管导通,输出为低电平(VSS)。开漏输出,P-MOS管关闭,输出控制低电平,I/O为低电平;输出控制高电平,I/O为高阻态
2. 操作指导
  1. 确定该引脚位置(GPIOB第五个引脚)

  2. 配置时钟基地址,开始于DMA1.

  3. 配置GPIOB时钟地址

  4. 配置寄存器输出模式

    • 一个管脚4位,通常CNF配置00(在输出模式,通用推挽输出),MODE配置01、10、11都可以(一般选速度最大的模式),最终配置位0x03(用3代替也可以了)
    • GPIOB_CLR &= ~(0x0f<<(4 * 5));GPIOB_CLR |= (0x03<<(4 * 5))

  5. 配置输出(端口位设置,GPIOB_BSRR)

编译介绍

  1. code 表示占用flash大小,180表示占用180个字节
  2. RO-data 表示程序占用的一些常量,也是占用flash大小,320表示占用320字节
  3. RW 和 ZI 表示占用rom大小
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994256.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号