GPIOC->ODR |=(0<<2);  // 总线操作,即操作整个寄存器.

在51单片机中

P0=0xFE;   //总线操作.

sbit LED1=P0^0;  //位操作,即操作寄存器中的某一位.

LED1 =0;

在STM32中并没有sbit这样的关键字.但是我们可以用位带操作实现位操作.

位带操作

在 STM32 中,有两个地方实现了位带,一个是 SRAM 区(存放代码)的最低 1MB 空间,令一个是外设区最低 1MB 空间。这两个 1MB 的空间除了可以像正常的 RAM 一样操作外,他们还有自己的位带别名区,位带别名区把这 1MB 的空间的每一个位膨胀成一个 32 位的字(4个字节),当访问位带别名区的这些字时,就可以达到访问位带区某个比特位的目的.

位带操作的公式

外设位带区与外设位带别名区的地址转换:    AlisaAddr=0x42000000+(A-0x40000000)*8*4+n*4

SRAM位带区与SRAM位带别名区地址转换:  AlisaAddr=0x22000000+(A-0x20000000)*8*4+n*4

其中:A:表示操作的那个位寄存器所在的寄存器地址

n:位号(第几位)

对上面式子的解释:

AlisaAddr=位带别名区基地址+(寄存器地址-寄存器基地址)[偏移多少个字节]*8[一个字节8位]*4[每个位膨胀4个字节] [这是第0位]+n*4[第n个位膨胀的字节说]

理解要点:位带区的一个位在位带别名区膨胀位4个字节

位带操作的总公式

AlisaAddr =((addr&0xF0000000)+0x02000000+((addr&0x00FFFFFF)<<5)+(bitnum<<2))

其中:addr:要操作的寄存器地址.(寄存器映射表中,每个外设地址+偏移地址)

bitnum:位号,即寄存器的第几位

对上面式子的解释:   addr&0xF0000000:为了取出4和2,用来区分是外设还是SRAM.然后+0x20000000就等于外设/SRAM位带别名区的起始地址

add&0x00FFFFFF0x00FFFFFF:屏蔽掉高2位,外设位带区的高地址位0x4010 0000,SRAM的位带区高地址为0x2010 0000, (0x4010 0000 –0x40000000) 和(0x2010 0000-0x200000)在求偏移地址相减的时候只要第四位有效,所以就把剩下的高两位屏蔽掉,剩下的6位与F相与即可.

点亮LED的源码

我们在上次的代码中继续添加:

main为:

#include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
#include "bsp_led.h"
#include "bsp_key.h" #define SOFT_DELAY Delay(0x0FFFFF);
//void Delay(__IO u32 nCount); #define GPIOC_ODR_Addr (GPIOC_BASE+0x0C)
#define PCout(bitnum) *(unsigned int *)((GPIOC_ODR_Addr&0xF0000000)+0x02000000+((GPIOC_ODR_Addr &0x00FFFFFF)<<5)+(bitnum<<2)) #define GPIOC_IDR_Addr (GPIOC_BASE+0x08)
#define PCIn(bitnum) *(unsigned int *)((GPIOC_IDR_Addr&0xF0000000)+0x02000000+((GPIOC_IDR_Addr &0x00FFFFFF)<<5)+(bitnum<<2))
void Delay( uint32_t count){
for( ;count!=0;count--); } int main(void)
{
// 来到这里的时候,系统的时钟已经被配置成72M。
LED_GPIO_Config();
LED_OFF;
KEY_LED_Config();
while(1){
if(PCIn(13)==KEY_ON){
while(PCIn(13)==KEY_ON)
; LED_TOGGLE; } } }

位带操作—GPIO输出和输入的更多相关文章

  1. 玩转X-CTR100 | STM32F4 l GPIO位带操作

    更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]       STM32F4位带概念,及位带的GPIO操作实践应用. 原理介 ...

  2. 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器基础板载资源 ...

  3. STM32之GPIO端口位带操作

    #ifndef __SYS_H #define __SYS_H #include "stm32f10x.h" //位带操作 //把“位带地址+位序号”转换别名地址宏 #define ...

  4. 第13章 GPIO—位带操作

    第13章     GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  5. (stm32学习总结)—GPIO位带操作

    本章参考资料:<STM32F10X-中文参考手册>存储器和总线构架章节.GPIO 章节,<CM3 权威指南 CnR2>存储器系统章节. 位带简介 位操作就是可以单独的对一个比特 ...

  6. GPIO—位带操作

    GPIO—位带操作本章参考资料:< STM32F4xx 中文参考手册>存储器和总线构架章节. GPIO 章节,< Cortex®-M4 内核编程手册> 2.2.5 Bit-ba ...

  7. 关于STM32位带操作随笔

    以前在学习STM32时候关注过STM32的位带操作,那时候只是知道位带是啥,用来干嘛用,说句心里话,并没有深入去学习,知其然而不知其所以然.但一直在心中存在疑惑,故今日便仔细看了一下,写下心得供日后参 ...

  8. 东芝MCU实现位带操作

    位带操作简介 位带操作的概念其实30年前就有了,那还是 8051单片机开创的先河,如今ARM CM3 将此能力进化,可以说,这里的位带操作是8051 位寻址区的威力大幅加强版.即如果要改写某个寄存器的 ...

  9. STM32位带操作总结---浅显易懂

    正在准备做毕业设计,配置LED_Config()的时候,又看到了位带操作的宏定义,我又嘀咕了,什么是位带操作,一年前在使用位带操作的时候,就查阅过好多资料,Core-M3也看过,但是对于博主这种“低能 ...

随机推荐

  1. WORD转HTML-python第三方包Mammoth(官方文档翻译)

    Mammoth 官方 Mammoth可用于将.docx文档(比如由Microsoft Word创建的)转换为HTML.Mammoth致力于通过文档中的语义信息生成简洁的HTML,而忽略一些其他细节.例 ...

  2. 【零基础】神经网络优化之dropout和梯度校验

    一.序言 dropout和L1.L2一样是一种解决过拟合的方法,梯度检验则是一种检验“反向传播”计算是否准确的方法,这里合并简单讲述,并在文末提供完整示例代码,代码中还包含了之前L2的示例,全都是在“ ...

  3. Selenium 常用JS

    滑动scroll: window.scrollTo(0,document.body.scrollHeight);

  4. Ionic4.x Modal模态对话框以及 Modal 传值

    1.Modal 模态对话框简介 官方文档:https://ionicframework.com/docs/api/modal Modal模态对话框主要用于登录注册页面,我们可以把它理解为从页面底部弹出 ...

  5. MySQL中表的复制以及大型数据表的备份教程

    MySQL中表的复制以及大型数据表的备份教程     这篇文章主要介绍了MySQL中表的复制以及大型数据表的备份教程,其中大表备份是采用添加触发器增量备份的方法,需要的朋友可以参考下 表复制 mysq ...

  6. php实现手机定位功能的实例

    最近在做通过定位手机用户,进行消息推送,经过分析最终做法如下 mobile.php文件 当用户当手机访问该页面时,通过实现页面表单隐藏封装自动提交获取手机浏览器经纬度并post给服务器 1 2 3 4 ...

  7. memcache安装与简单介绍

    本文参考自菜鸟教程中的内容. 安装 安装memcache的时候,请切换为root用户 root@centos # wget http://www.memcached.org/files/memcach ...

  8. STL函数适配器

    一:适配器简介 C++中有三类适配器,分别是容器适配器,迭代器适配器和函数适配器,这里主要介绍函数适配器. (一)函数适配器简介 STL中已经定义了大量的函数对象,但是有时候需要对函数返回值进行进一步 ...

  9. javascript中的Error对象

    在javascript中一旦代码解析或运行时发生错误,javascript引擎就会自动产生并抛出一个Error对象的实例,然后整个程序就中断在发生错误的地方. Error对象的实例有三个基本的属性: ...

  10. windows 10 enterprize LTSC

    to avtivate the windows 10 enterprize LTSC version, do the following command every 6 months. slmgr - ...