【STM32】STM32位带操作

简介: 【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 ;

}
相关文章
|
缓存
STM32使用HAL库实现串口通讯——实战操作
STM32使用HAL库实现串口通讯——实战操作
262 0
STM32使用HAL库操作外部中断——实战操作
STM32使用HAL库操作外部中断——实战操作
196 0
STM32使用HAL库操作外部中断——理论讲解
STM32使用HAL库操作外部中断——理论讲解
208 0
|
移动开发 API
STM32使用HAL库操作GPIO
使用HAL库的优点在于不用手动添加初始化的代码了,CubeMX会根据软件设置自动生成
196 0
【STM32】引脚GPIO输出操作点亮一颗LED
【STM32】引脚GPIO输出操作点亮一颗LED
123 0
STM32 下的库函数和寄存器操作比较
<p>以 led闪烁中的flashLed函数例子:</p> <p></p> <pre id="best-content-772498845" accuse="aContent" class="best-text mb-10" style="margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: arial, 'couri
2599 0
|
3月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
419 0
|
4月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
244 2
|
4月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
430 4
|
4月前
|
传感器
【经典案例】STM32F407使用HAL库配置I2C详解
STM32F407是一个强大的微控制器,广泛应用于嵌入式系统中。在许多应用中,我们需要使用I2C总线来与传感器、EEPROM、显示屏等外设进行通信。本文将详细介绍如何使用STM32 HAL库来配置和使用I2C接口。
417 2