码迷,mamicode.com
首页 > 其他好文 > 详细

6、存储器与寄存器介绍

时间:2019-03-08 12:47:48      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:ioc   http   code   读取   通过   公司   技术   编写   重映射   

本讲主要内容
  1.什么是存储器映射
  2.什么是寄存器及寄存器映射
  3.如何访问STM32寄存器内容
 
1.什么是存储器映射
   存储器本身不具有地址信息,它的地址是由芯片厂商或
用户分配,给存储器分配地址的过程称为存储器映射,如果
再分配一个地址就叫重映射(具体地址分配参考芯片数据手
册及中文参考手册)
 
技术图片

 

技术图片

 

2.什么是寄存器及寄存器映射
 通过给有特定功能的内存单元起一个别名,这个别名就是
我们所说的寄存器。给已经分配好地址的有特定功能的内存
单元起别名的过程就叫寄存器映射

 

3.如何访问STM32寄存器内容
 我们知道寄存器就是一些有特定功能的内存单元,所以要
访问STM32寄存器也就是操作STM32的内存单元,根据C语言
指针的特点,可以使用指针来操作STM32的内存单元。
   假如我们要让STM32的GPIOC的第0管脚输出低电平,我
们怎么使用C语言来处理?
   首先我们要知道GPIOC挂接在哪个总线上,需要知道其地
址,STM32总线地址如下:

技术图片

技术图片

 

所以使用C语言宏可以定义外设基地址:
#define PERIPH_BASE ((unsigned int)0x40000000)
然后分别定义APB2总线基地址:
#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)
 
然后还需要知道端口外设地址,
同样使用C语言宏定义其端口地址:
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
 

 有了外设端口地址后,还需要知道GPIOC端口的寄存器地址,
如下表格:

技术图片

 

同样使用C语言宏定义其端口寄存器地址:

#define GPIOC_CRL           *(unsigned int*)(GPIOC_BASE+0x00)
#define GPIOC_CRH           *(unsigned int*)(GPIOC_BASE+0x04)
#define GPIOC_IDR           *(unsigned int*)(GPIOC_BASE+0x08)
#define GPIOC_ODR           *(unsigned int*)(GPIOC_BASE+0x0C)
#define GPIOC_BSRR           *(unsigned int*)(GPIOC_BASE+0x10)
#define GPIOC_BRR           *(unsigned int*)(GPIOC_BASE+0x14)
#define GPIOC_LCKR           *(unsigned int*)(GPIOC_BASE+0x18)

 

控制 GPIOC 引脚 0 输出低电平(即通过BSRR 寄存器的 BR0
置 1)
GPIOC_BSRR = (0x01<<(16+0));
控制 GPIOC 引脚 0 输出高电平(即通过BSRR 寄存器的 BS0
置 1)
GPIOC_BSRR = 0x01<<0;
读取GPIOC端口所有引脚的电平(读 IDR 寄存器)
unsigned int temp;
temp = GPIOC_IDR;
 
  我们这里仅仅以GPIO这个外设为例,给大家讲解了如何
使用C语言对寄存器封装的,对于其他的外设也是使用同样
方法。其实到了后面的实验程序的编写时,我们都是使用ST
公司提供的固件库,他把STM32所有外设都已经封装好了,
我们这里分析这个封装过程只是想让大家更加清楚理解如何
使用C来封装寄存器的。
 

6、存储器与寄存器介绍

标签:ioc   http   code   读取   通过   公司   技术   编写   重映射   

原文地址:https://www.cnblogs.com/zhb123456/p/10494981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!