学习原子哥STM32M4(2):可以简化我们操作的位带操作

发布者:MysticGarden最新更新时间:2019-05-10 来源: eefocus关键字:STM32M4  位带操作  头文件 手机看文章 扫描二维码
随时随地手机看文章

类似于51的sbit一样,位带操作可以简化我们的操作。


在原子哥的sys.h头文件中有以下定义:


#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)  


out为输出,in为输入

我们可以看到,比如PEout(2)就是指向E2的输出地址(可能有误,希望各位大虾纠正)


更深入的还有ReadInputDataBit函数


但本人比较懒惰觉得直接PEout(n)就可以很方便了,所以没有深入了解。。。不过待我完成了暑假任务后一定回来认真学习的


比如我们要用LED1连在PE2口上实现IO口的输出控制LED1闪烁


我们可以在led.h里宏定义一个


#define LED1 PEout(11)

这个意思是我们用LED1来替代PEout(11),这样程序更清晰明了我们在做什么

这样我们通过写LED1=1,LED1=0,就可以实现对IO口的输出控制了

这里 的LED1=1是让PE口输出1


关键字:STM32M4  位带操作  头文件 引用地址:学习原子哥STM32M4(2):可以简化我们操作的位带操作

上一篇:学习原子哥STM32M4(1):GPIO输出配置
下一篇:STM32学习记录——开发总流程

推荐阅读最新更新时间:2024-11-08 14:57

自制51单片机常用头文件(st7920并行方式)
/*-------------------------------------------------------------------------- ST7920.H The user function is C51. Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun All rights reserved. --------------------------------------------------------------------------*/ // 并行方式 #ifndef __ST7920_H__ #define __ST7920_H__ #
[单片机]
关于stm32f1ox.h头文件启动代码与编译器里的宏定义
今天调试stm32f107vc发现他的外部时钟竟是25M,和之前的stm32f103rbt6的8M晶振有所区别。 在此总结一下自己的发现。 stm32f107vc属于互联性器件,他的启动文件应该是.cl。对于启动文件有ji个, .ld .md .hd .cl .xl rbt6选用的是md 可以在keil c++ 宏定义那边说明STM32F10X_CL, 或者在stm32f10x。h中找到 #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_V
[单片机]
ARM学习《六》——从头文件开始自己动手设置STM32串口通讯
运用STM32的库函数时,有时候为了看懂一句语句需要翻遍整个头文件,找到头文件中预定义的名字到底代表的是什么意思,具体寄存器设置的数值是多少,相当麻烦。我花了一天的时间才明白串口设置的具体过程,只是库函数想的比较周全。下面是我调试好的串口设置程序,头文件是我自己定义的,舍去了库文件中繁琐的结构体定义 首先定义头文件: / RCC_CFGR &= (uint32_t)0xF8FF0000; RCC_CR &= (uint32_t)0xFEF6FFFF; // RCC_CR &= (uint32_t)0xFFFBFFFF; // RCC_CFGR &= (uint32_t)0
[单片机]
keil C51 的头文件
//-------------------------------------------------------------------------- REG52.H Header file for generic 80C52 and 80C32 microcontroller. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. //--------------------------------------------------------------------------*/
[单片机]
LCD1602.h头文件下载(完美液晶驱动文件)
1602液晶屏是在单片机系统中常用的显示器件,这里我给大家共享2个完美的LCD1602.h头文件,下面是第一个:由于2个文件组成: http://www.51hei.com/bbs/dpj-24671-1.html 把里面的2个代码分别保存为文件即可. 点这里可以提供文件下载 还有一个是 LCD1602.h 代码如下,复制代码并保存到文件即可,当然io口要改为你自己的. #ifndef _LCD1602_H #define _LCD1602_H /* #define uchar unsigned char #define uint unsigned int #define LCD_DATA P0 sbit LCD_EN=P2
[单片机]
单片机中用c编程时头文件reg51.h及reg52.h解析
单片机中用c编程时头文件reg51.h及reg52.h解析 我们在用c语言编程是往往第一行就是reg51.h或者其他的自定义头文件,我们怎么样来理解呢? 1) 文件包含 处理。 程序的第一行是一个 文件包含 处理。 所谓 文件包含 是指一个文件将另外一个文件的内容全部包含进来。程序中包含REG51.h 文件的目的是为了要使用P1 (还有其他更多的符号)这个符号,即通知C 编译器,程序中所写的P1 是指80C51 单片机的P1 端口而不是其它变量。这是如何做到的呢? 打开reg51.h 可以看到这样的一些内容: (此文件一般在C:KEILC51INC下 ,INC文件夹根目录里有不少头文件,并且里面还有很多以公司分类
[单片机]
430头文件的解释
__no_init volatile union { unsigned short WDTCTL; /* Watchdog Timer Control */ struct { unsigned short WDTIS0 : 1; /* */ unsigned short WDTIS1 : 1; /* */ unsigned short WDTSSEL : 1; /* */ unsigned short WDTCNTCL : 1; /* */ unsigned short WDTTMSEL : 1; /* */ unsigned short WD
[单片机]
关于STM32中的(bit-band)操作说明
支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。在 CM3 中,有两个区中实现了位带。其中一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低 1MB范围。这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。 位带操作的概念其实 30 年前就有了,那还是8051 单片机开创的先河,如今,CM3 将此能力进化,这里的位带操作是 8051 位寻址区的威力大幅加强版。 CM3 使用如下术语来表示位带存储的相关地址: 位带区:支
[单片机]
关于STM32中的<font color='red'>位</font><font color='red'>带</font>(bit-band)<font color='red'>操作</font>说明
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved