【STM32】STM32位带操作

一、与以前51代码的区别

回想以前写51代码

P0=0x10	//将P0端口设置为0x10
P1_0=1	//将P1端口0号引脚设置为高电平
a=P2_2;	//获取P2端口2号引脚的电平

根据上述的方法,我们可以发现快速定位修改某个引脚的电平还有获取引脚的状态。

二、什么是位带操作

将APB1、APB2和AHB1这些外设的每一位寄存器都映射到一个32位地址中去,映射过去的目标地址就是外设位带别名区地址。然后对这些别名地址进行操作就可以设置对应的位了。

三、为什么使用位带操作?

GPIO_SetBits、GPIO_ResetBits、GPIO_WriteBit操作IO口的性能没有达到极致,因为这些函数都需要进行现场保护的现场恢复的动作,比较耗时间,没有进行一步到位,使用位带操作则没有上述的烦恼,简单快速。
示例:

GPIO_SetBits(GPIOF,GPIO_Pin_9);
修改为
PFout(9)=1

四、映射表

在这里插入图片描述

五、映射公式

寄存器的位带别名=0x42000000+(寄存器的地址-0x40000000)32+引脚编号4
在这里插入图片描述

六、代码示例

int main(void )
{
	
	uint32_t *pf9  = (uint32_t *)(0x42000000+((uint32_t)(&GPIOF->ODR)-0x40000000)*32+9*4);
	uint32_t *pf10 = (uint32_t *)(0x42000000+((uint32_t)(&GPIOF->ODR)-0x40000000)*32+10*4);	
	
	//打开端口F的硬件时钟,等同于对端口F供电
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE );
	
	//初始化对应端口的引脚 
	GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_9|GPIO_Pin_10;//指定第9根引脚 
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT ;//配置为输出模式
	GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz ;//配置引脚的响应时间=1/100MHz .
	//从高电平切换到低电平1/100MHz,速度越快,功耗会越高
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP ;//推挽的输出模式,增加输出电流和灌电流的能力
	GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_NOPULL ;//不使能内部上下拉电阻
	GPIO_Init(GPIOF ,&GPIO_InitStruct);

	
	
	while(1)
	{
		*pf9=0;
		delay();
		
		*pf9=1;
		delay();

		*pf10=0;
		delay();
		
		*pf10=1;
		delay();		

	}
	
	
	return 0 ;

}
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32F103C8T6芯片中,可以通过位带操作来实现对IO口或特殊寄存器的按位操作位带操作是在8051单片机中首先出现的,而在STM32中,它是对8051位寻址区的进一步加强。具体来说,位带操作可以通过映射一个内存地址到一个特定的位来实现对该位的直接操作。 举例来说,如果我们想要在STM32F103C8T6中对某个IO口的某一位进行操作,我们可以使用位带操作来实现。首先,我们需要将该IO口对应的内存地址映射到一个位带别名区域。然后,我们可以直接对位带别名区域中的位进行读写操作,而不需要再使用位操作的方式。这样可以提高代码的可读性和执行效率。 要使用位带操作,在STM32F103C8T6中,你可以参考《ARM Cortex-M3权威指南》中关于位带操作的介绍。该指南可以提供关于位带操作的详细说明和示例代码。通过阅读该指南,你可以了解如何在STM32F103C8T6芯片上实现位带操作,并且可以根据自己的需求进行相应的编程。 总结起来,位带操作是一种在STM32F103C8T6中实现按位操作的方法,可以提高代码的可读性和执行效率。你可以参考《ARM Cortex-M3权威指南》中的介绍来了解如何在该芯片上实现位带操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STM32 进阶教程 8 - 位带操作](https://blog.csdn.net/zhanglifu3601881/article/details/94902480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢仕冲的一亩三分地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值