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

太原网站建设-中国互联网站设计建设公司联系方式

太原网站建设-中国互联,网站设计建设公司联系方式,好网站建设公司地址,wordpress没有注册页面目录 存储系统与位带操作 1、对GPIO的操作函数 2、计算机对地址的管理 3、板子地址 4、什么是位带操作 5、位带地址好处 存储系统与位带操作 1、对GPIO的操作函数 //方案一 GPIO_WriteBit(GPIOF,GPIO_Pin_9,0);//方案二 GPIO_Write(GPIOF,0x0000);//方案三 GPIOF-O…目录 存储系统与位带操作 1、对GPIO的操作函数 2、计算机对地址的管理 3、板子地址 4、什么是位带操作 5、位带地址好处 存储系统与位带操作 1、对GPIO的操作函数 //方案一 GPIO_WriteBit(GPIOF,GPIO_Pin_9,0);//方案二 GPIO_Write(GPIOF,0x0000);//方案三 GPIOF-ODR 0x0000;//寄存器操作//方案四 *((volatile uint32_t*)(0X40021414))0x0000;//方案五 *((volatile uint32_t*)(0x42000000 0x21414*32 9*4)) 1; //方案六 PFout(9)0; 其中 GPIO_Write(GPIOF,0x0600); GPIO_Write本质上是对寄存器的操控即 GPIOF -ODR 0x0600; 而寄存器本质上是一块存贮空间可以理解上面代码是对于一块地址写入 0x0600. *((volatile uint32_t*)(0X40021414)) 0x0600; 但是对于STM32f407系列的板子还有一种写法 *((volatile uint32_t*)(0x42000000 0x21414*32 9*4)) 1; *((volatile uint32_t*)(0x42000000 0x21414*32 10*4)) 1; 上面这个地址能实现对于LED的控制是硬件工程师做了特殊处理该解决方案 叫做“位带操作”。要想理解这个中方案需要对计算机地址访问有着深刻理解。 2、计算机对地址的管理 从C语言角度理解内存拿到地址找到地址中的数据并返回 从计算组成理解的存储结构示意图 假设cpu中有3根地址线那么它进过译码器后组合出来(扩展)的结果表示8根线(再多的都表示不了),进而控制8个内存单元。每一个内存单元即就是一个字符型(char)。 内存申请和释放的最小单元 实际申请的是地址资源而一个地址刚好对应一个字符存储空间。因此字符空间 (char)是内存分配的最小单元。【bool型实际不存在它是变相的char】 内存不可以无限扩展受制于机器位数管理不了那么多的内存单元。32位机器 最多管理2^32个地址单元。64位机器可以管理2^64个地址单元。  3、板子地址 为什么 ((volatile uint32_t)(0X40021414)) 0x0600是可以控制LED灯 首先我们机器是32位的地址线。这些地址线提供了2的32次方的地址。这些地址 我们机器没有用完有剩余的。我们机器上的用在了这些地方程序存储器 数据存储器IO端口和寄存器。 存储器内存。 IO端口端口地址。网络通信里面要选端口。USB插口。CPU使用IO来通信。 寄存器这个和内存使用起来很像但是具体物理实现和计算机所处位置不同。 stm32给与GPIOF组的寄存器分配的地址如下 从地址0X4002 1400 - 0X4002 17FF.总共有0x3FF1的空间给与了GPIOF组使用。我们之前所有的操纵函数本质上都是操作了F组的寄存器的地址。给与这个地址写入0或者1。而寄存器的数据决定了引脚上的电压为高/低。 操作函数GPIO_WriteBit();也是在操作寄存器给寄存器写入0或1完成灯的控制。 GPIOF组的地址如下 地址跳转步骤 则GPIOF组地址为GPIO_BASE 0x4000 0000 0x0002 0000 0x1400 0x4002 1400 输出寄存器ODR寄存器偏移地址 0x14。 GPIOF-ODR GPIOF_BASE 0x14 0x40021414 给与这根地址线--0x40021414写数据。相当于配置ODR寄存器相当于调用 GPIO的操控函数。 这几个位对应的是 PF15,PF14,PF13,PF12,PF11,PF10,PF9,PF8,PF7,PF6,PF5,PF4,PF3,PF2,PF1,PF0,每一个位对应F组16个引脚的每一个故此数据是 0XFFFF--0X0000。 4、什么是位带操作 了解更多点击这里--位带(位段)操作-- 我的通俗理解一块内存可以用两个地址来访问一个是内存地址一个是硬件工程师在寄存器内接的该地址与原来PF9的输出寄存器的地址GPIOF-ODR 0x40021414地位平等。 上图红色线路是原有的地址属于这个寄存器的因此可以访问整个寄存器。 绿色线路是位带区域硬件接上去的这个地址仅仅属于这个寄存器的一个特定的位。 那么这块区域的操作有两种路线 红色路线1GPIOF-ODR 0XFFFF FFFF。我们计算好第9的数据位的数据赋 值给ODR寄存器。  绿色路线2获取单独分给ODR的第9根的数据位的地址并给与这根地址赋值 1/0. 位带操作可以让我们更好地理解底层存储但也知识理解一下就好了现有一个简化位带操作的封装函数BitBand.h,可以简化书写 #ifndef __BITBAND_H__ #define __BITBAND_H__#define BITBAND(addr,bitnum) 0x42000000 (addr 0xFFFFF)*32 bitnum *4 #define MEM_ADDR(addr) *((volatile uint32_t*)(addr)) #define BIT_ADDR(addr,bitnum) MEM_ADDR(BITBAND(addr,bitnum))#define GPIOA_IDR_ADDR (GPIOA_BASE 0x10) #define GPIOA_ODR_ADDR (GPIOA_BASE 0x14)#define GPIOB_IDR_ADDR (GPIOB_BASE 0x10) #define GPIOB_ODR_ADDR (GPIOB_BASE 0x14)#define GPIOC_IDR_ADDR (GPIOC_BASE 0x10) #define GPIOC_ODR_ADDR (GPIOC_BASE 0x14)#define GPIOD_IDR_ADDR (GPIOD_BASE 0x10) #define GPIOD_ODR_ADDR (GPIOD_BASE 0x14)#define GPIOE_IDR_ADDR (GPIOE_BASE 0x10) #define GPIOE_ODR_ADDR (GPIOE_BASE 0x14)#define GPIOF_IDR_ADDR (GPIOF_BASE 0x10) #define GPIOF_ODR_ADDR (GPIOF_BASE 0x14)#define GPIOG_IDR_ADDR (GPIOG_BASE 0x10) #define GPIOG_ODR_ADDR (GPIOG_BASE 0x14)#define GPIOH_IDR_ADDR (GPIOH_BASE 0x10) #define GPIOH_ODR_ADDR (GPIOH_BASE 0x14)#define GPIOI_IDR_ADDR (GPIOI_BASE 0x10) #define GPIOI_ODR_ADDR (GPIOI_BASE 0x14)#define PAout(n) BIT_ADDR(GPIOA_ODR_ADDR,n) #define PAin(n) BIT_ADDR(GPIOA_IDR_ADDR,n) #define PBout(n) BIT_ADDR(GPIOB_ODR_ADDR,n) #define PBin(n) BIT_ADDR(GPIOB_IDR_ADDR,n)#define PCout(n) BIT_ADDR(GPIOC_ODR_ADDR,n) #define PCin(n) BIT_ADDR(GPIOC_IDR_ADDR,n)#define PDout(n) BIT_ADDR(GPIOD_ODR_ADDR,n) #define PDin(n) BIT_ADDR(GPIOD_IDR_ADDR,n)#define PEout(n) BIT_ADDR(GPIOE_ODR_ADDR,n) #define PEin(n) BIT_ADDR(GPIOE_IDR_ADDR,n)#define PFout(n) BIT_ADDR(GPIOF_ODR_ADDR,n) #define PFin(n) BIT_ADDR(GPIOF_IDR_ADDR,n)#define PGout(n) BIT_ADDR(GPIOG_ODR_ADDR,n) #define PGin(n) BIT_ADDR(GPIOG_IDR_ADDR,n)#define PHout(n) BIT_ADDR(GPIOH_ODR_ADDR,n) #define PHin(n) BIT_ADDR(GPIOH_IDR_ADDR,n)#define PIout(n) BIT_ADDR(GPIOI_ODR_ADDR,n) #define PIin(n) BIT_ADDR(GPIOI_IDR_ADDR,n)#endif 封装前 封装后 5、位带地址好处 1.提升效率比特位的读写操作效率提升。 2.代码简洁仅仅对于某一个位进行控制无需考虑取值判断。0x0200 硬件把GPIO寄存器映射为位带区域可以提升IO操控和通信的速度。
http://www.yutouwan.com/news/224612/

相关文章:

  • 手机网站产品展示模板网站建设从化
  • c#网站开发技术wordpress默认排序
  • 医院网站后台管理系统登录网站关键词优化应该怎么做
  • 网页设计和网站开发有什么区别电商网站建设与运营方向就业前景
  • 芜湖门户网站建设多少钱如何提高权重
  • 中国建设银行宁夏分行网站手机网站建设哪里好
  • 美食网站的建设目的交易所网站开发
  • 内江市规划建设教育培训中心网站企业网站建设服务电话
  • 网站建设的意义与价值长安网站建设公司
  • 开封网站开发大连网站建设制作公司
  • 南博网站建设福建省 园区网互联及网站建设 网络部分题目
  • 如何看还在建设的网站有模版之后怎么做网站
  • 货运代理网站模板网络设置了代理怎么关闭
  • 给人做ppt的网站吗高清图片素材网
  • 宣城网站开发专业制广州广告公司
  • 网站的seo优化方案梅州建站
  • 金坛网站建设公司服装设计与工程
  • 甘肃营销型网站建设做五金行业的外贸网站
  • 韶关营销网站开发网站建设敬请期待图片素材
  • 官方网站找oem做洗发水厂家推广app赚佣金
  • 唯美谷网站建设深圳优秀网站设计
  • 微信公众号 做不了微网站吗公司主页怎么制作
  • 防下载 的视频网站 怎么做制作网页需要的技术
  • 衡阳电商网站建设网站建设丶金手指花总13
  • 网站数据分析建设有没有做任务一样的网站兼职
  • 北京朝阳网站建设海外广告公司
  • 网站 名词解释上海注册公司哪家好
  • 重庆市建设工程造价管理总站云南哪有网站建设推广
  • 深圳商业网站建设哪家好房产信息查询系统官方网站
  • 深圳南山建设局官方网站中建八局第一建设有限公司中标