datasheet

Cortex‐M3和Cortex‐M0是否都能位带操作

2019-07-12来源: eefocus关键字:Cortex‐M3  Cortex‐M0  位带操作

最近在进行stm32l011f4的编程,想到stm32有位带操作,便想试一试,但是事与愿违,先贴下位带操作代码


Cortex‐M0的位带操作代码


//IO输出方向设置

#define SDA_IN()  {GPIOA->MODER&=0XFFF1FFFF;}        //PA_10设置成输入

#define SDA_OUT() {GPIOA->MODER&=0XFFF5FFFF;}       //PA_10设置成输出

 

// SDA = PA_10;SCL = PA_9

#define IIC_SCL    PAout(9)

#define IIC_SDA    PAout(10)

#define READ_SDA   PAin(10)

MODER寄存器为IO端口功能寄存器


Cortex‐M3的位带操作代码


//IO输入输出设置

#define SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}

#define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}

 

//SDA=PB_11;SCL=PB_10  

#define IIC_SCL    PBout(10) //SCL

#define IIC_SDA    PBout(11) //SDA  

#define READ_SDA   PBin(11)  //SDA设为输入 

CRH为Cortex‐M3的端口功能寄存器


但是Cortex‐M0编译一直有问题,经过查阅资料,Cortex‐M0芯片不支持位带操作

Cortex‐M3存在端口映射区,所以支持位带操作。


Cortex‐M0不存在端口映射区,所以不支持位带操作。


所以同学们在编写Cortex‐M0的程序时,可以不考虑位带操作。


关键字:Cortex‐M3  Cortex‐M0  位带操作

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/ic467562.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:LPC54100 LPC54101 LPC54102 LPC541xx系列串口用法
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Cortex-M3内核之位带操作

       位带操作(Bit-Band Operations ),顾名思义,就是开发人员可以单独对CPU寄存器的某一位进行读写操作,这无疑将会简化我们开发代码的难度。我们也许已经在8051单片机中体会到了这种位带操作带来的好处,比喻说我要点亮一盏LED灯(假设这里LED灯的阴极已接地),通常只需要下面两行代码就可以完全搞定:       sbit LED=PX^n;     LED=1;       //X的取值范围为0-3,取0时外部加上拉电阻。n的取值范围是0-7。 
发表于 2019-07-12
Cortex-M3内核之位带操作

STM32F1(Cortex M3内核)位带操作

 本文参考《STM32_参考手册》2.3.2 位段               《CM3权威指南》第五章 存储器系统Cortex M3内核有两个位带区,对应的是片上RAM区和片上外设的最低的1MB地址范围,而位带别名区里面的每个字对应位带区的一个比特,也就是对位带别名区的一个字的操作相当于对位带区对应一个位的置零或者置一。Cortex M3的位带区和位带别名区如下图所示。从位带区到位带别名区有如下的映射关系:bit_word_addr =bit_band_base + (byte_offset×32) + (bit_number
发表于 2019-07-12
STM32F1(Cortex M3内核)位带操作

Keil IAR - Cortex M3 调试问题及解决方法(1)

stm32f10x_nvic.o).main.axf: Error: L6218E: Undefined symbol __SETPRIMASK (referred from stm32f10x_nvic.o).解决办法:工程缺少“cortexm3_macro.s”文件,把cortexm3_macro.s和STM3210x.s全部添加到工程即可。Jacob注:注意官方提供的那几个.s,主要是一些内核文件。三、调试器不能连接到STM32的问题与解决办法很多人都碰到过调试器不能连接到STM32的问题,不管是IAR的J-Link还是Keil的ULink,或者是ST的ST-Link。出现这个问题时,调试软件会提示不能建立与Cortex-M3的连接
发表于 2019-05-14

Keil IAR - Cortex M3 调试问题及解决方法(2)

,要注意的是flash 的容量: low density, low density value line, medium density, medium density value line,  Connectivity line, high density, High Density Value Line,  xl density, 分别对应STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm启动文件。具体的对应关系为Low-density Value line devices are
发表于 2019-05-14
Keil IAR - Cortex M3 调试问题及解决方法(2)

Keil IAR - Cortex M3 调试问题及解决方法(3)

上次谈到由于stm32官方库和iar ew arm 的不断升级, 多出配置都发生了 变化,1在使用 ewarm 6.30 升级stm32 stdlib 3.5 出现了这个错误Error(Pe47)   declaration is incompatible with "__interwork__softfp unsigned long __get_PSP(void)", ”declaration “ 说明有文件中定义冲突。查了一下,IAR自己带了CMSIS的库文件,而我们本地工程下也有CMSIS,因此我们选择IAR自带的就没有问题了。步骤如下:Please follow the
发表于 2019-05-14

STM32总结一 STM32三种点亮LED灯方式的不同之处

灯。在GPIO每个端口的某个引脚输出电平时,其实可以在输入端测出到底输出的是高电平还是低电平(测的原理就和输入原理一样)。第二种方式用的是固件库模板点亮LED。这种方法的本质和第一种是一样的都是操作寄存器的位从而实现对应引脚输出不同的电平。使用这种方法首先需要创建一个模板,创建方式可以参考中文参考手册和开发攻略。然后再自己新定义一个函数,将用到的函数从已经定义好的库文件中调用出来即可。再在main.c函数中调用新定义的函数初始化寄存器即可。虽然与第一种方式不同,但实际上达到的效果是一样的(也就是说最后实现的配置结构是一样的,只是配置的方式并不相同)。第三种方法是位带操作。STM32所基于的ARM Cortex-M3内核引入了一种新颖
发表于 2019-07-12
STM32总结一 STM32三种点亮LED灯方式的不同之处

小广播

何立民专栏

单片机及嵌入式宝典

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

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