位带操作—GPIO输出和输入
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输出和输入的更多相关文章
- 玩转X-CTR100 | STM32F4 l GPIO位带操作
更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] STM32F4位带概念,及位带的GPIO操作实践应用. 原理介 ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源 ...
- STM32之GPIO端口位带操作
#ifndef __SYS_H #define __SYS_H #include "stm32f10x.h" //位带操作 //把“位带地址+位序号”转换别名地址宏 #define ...
- 第13章 GPIO—位带操作
第13章 GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- (stm32学习总结)—GPIO位带操作
本章参考资料:<STM32F10X-中文参考手册>存储器和总线构架章节.GPIO 章节,<CM3 权威指南 CnR2>存储器系统章节. 位带简介 位操作就是可以单独的对一个比特 ...
- GPIO—位带操作
GPIO—位带操作本章参考资料:< STM32F4xx 中文参考手册>存储器和总线构架章节. GPIO 章节,< Cortex®-M4 内核编程手册> 2.2.5 Bit-ba ...
- 关于STM32位带操作随笔
以前在学习STM32时候关注过STM32的位带操作,那时候只是知道位带是啥,用来干嘛用,说句心里话,并没有深入去学习,知其然而不知其所以然.但一直在心中存在疑惑,故今日便仔细看了一下,写下心得供日后参 ...
- 东芝MCU实现位带操作
位带操作简介 位带操作的概念其实30年前就有了,那还是 8051单片机开创的先河,如今ARM CM3 将此能力进化,可以说,这里的位带操作是8051 位寻址区的威力大幅加强版.即如果要改写某个寄存器的 ...
- STM32位带操作总结---浅显易懂
正在准备做毕业设计,配置LED_Config()的时候,又看到了位带操作的宏定义,我又嘀咕了,什么是位带操作,一年前在使用位带操作的时候,就查阅过好多资料,Core-M3也看过,但是对于博主这种“低能 ...
随机推荐
- PHP fopen/file_get_contents与curl性能比较
PHP中fopen,file_get_contents,curl 函数的区别: 1.fopen/file_get_contents 每次请求都会重新做 DNS 查询,并不对 DNS 信息进行缓存. 但 ...
- P5658 括号树
P5658 括号树 题解 太菜了啥都不会写只能水5分数据 啥都不会写只能翻题解 题解大大我错了 我们手动找一下规律 我们设 w[ i ] 为从根节点到结点 i 对答案的贡献,也就是走到结点 i ,合 ...
- python 经典排序算法
python 经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算 ...
- JSP页面中如何注入Spring容器中的bean
第一步在JSP页面中导入下面的包: <%@page import="org.springframework.web.context.support.WebApplicationCont ...
- MySQL批量导入Excel、txt数据
MySQL批量导入Excel.txt数据 我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQ ...
- labelimg data
<annotation> <folder>img_data_box_1500</folder> <filename>798.jpg</filena ...
- Linux -- 如何减少IO过程中的CPU copy
四种I/O方式的对比 1. Buffered I/O read(file, tmp_buf, len); write(socket, tmp_buf, len); 上下文切换:4次 CPU copy: ...
- iOS 百度地图报私有api的解决方案
1.Build Settings-->搜索other linker Flags-->将other linker Flags设置为-objc 2.用2.1.1的版本的百度地图 3.换高德地图
- SecureCRT 8.1破解方式
百度网盘下载,里面有破解程序和破解方式. 链接: https://pan.baidu.com/s/1wlhqnn-TE_mcOXOLljP-zg 密码: 3ffj
- Paper Mark2
论文:CBAM: Convolutional Block Attention Module 论文链接 pytorch代码 论文:Approach for Fashion Style Recogniti ...