STM32位带操作总结---2018/4/20

寒假做东西时,发现了这个骚操作,现在整理的时候发现有点忘了,故写下此总结备着。

主要讲两个问题:


1.什么是位带操作


2.怎么操作


1.1  在51单片机中假如P1.1口有一个LED灯那么对led的操作就是P1.1=0或P1.1=1。而stm32是做不到这样的,它是用两个函数来置位的:

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

那么为了像51单片机一样能够单独的对某个端的某一个IO单独操作,就引入了位带操作这样的概念,简而言之,言而总之,就是为了去单独操作32里面PA端的第1个IO口,所以才有了位带这样的操作机制。

1.2  在我浅显的理解中,控制GPIO的寄存器有32位,可以映射到32个地址上去,改变对应地址的值就可以了改变寄存器对应位。那么只要改变控制置0置1的那一位控制字就可以让单片机置0置1了。

1.3 STM32不允许对某个端的某一个IO口进行操作,PA.1 = 0或者PA.1 = 1这样的操作是非法的那就给PA.1起个小号,将原来PA.1的地址扩展成一个32位的字地址一个小号对应相应控制字。其实STM32对所有的寄存器配置,都是对某个32位地址的操作,因此说白了,就是某个IO端口进行操作,这就是位带操作。


2.1  使用位带操作需要加入sys.h头文件

2.2  来些代码

      #define LED0 PBout(5)// 配置PB.5可以输出高低电平,我试了一下也可以读取电平状态(if(LED0==1))

      #define LED1 PEout(5)// PE.5输出

      #define LED0 PBin(5)// 配置PB.5可以读取高低电平,设置之后就不能给它置位了
      #define LED1 PEin(5)// 


参考文章:https://www.cnblogs.com/szhb-5251/p/6662417.html

发布了13 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lblmlms/article/details/80023716