这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32实现GPIO位操作的编程技巧

共6条 1/1 1 跳转至

STM32实现GPIO位操作的编程技巧

工程师
2021-01-13 21:27:11     打赏

传统的51单片机中,对位bit操作和IO位操作是很简单的,但ARM芯片(比如:STM32)那样操作就比较麻烦,采用如下的软件编程技巧,就可以达到类似的效果!


 1 typedef struct _16_Bits_Struct

 2 {

 3     u16 bit0 : 1;

 4     u16 bit1 : 1;

 5     u16 bit2 : 1;

 6     u16 bit3 : 1;

 7     u16 bit4 : 1;

 8     u16 bit5 : 1;

 9     u16 bit6 : 1;

10     u16 bit7 : 1;

11     u16 bit8 : 1;

12     u16 bit9 : 1;

13     u16 bit10 : 1;

14     u16 bit11 : 1;

15     u16 bit12 : 1;

16     u16 bit13 : 1;

17     u16 bit14 : 1;

18     u16 bit15 : 1;

19 } Bits_16_TypeDef;


20 #define LED_GPIO_CLK   RCC_AHBPeriph_GPIOA 

21 #define LED_PORT       GPIOA

22 #define LED_PIN        GPIO_Pin_4


23 //使用结构体的位段操作, 兼容Cortex-M3的位带操作.


24 #define LED_PORT_OUT    ((Bits_16_TypeDef *)(&(LED_PORT->ODR)))

25 #define LED             (LED_PORT_OUT->bit4) 


备注说明:

24行就比较关键了:先取出GPIOA->ODR的地址,然后再将它强制转化为Bits_16_TypeDef * 类型(注意,是指针类型)。转化为


此类型后,ODR就有位域的特性了,因此就可以对它进行位操作。25行就是将接在PA.4的LED定义为GPIOA->ODR的第4位。


有了这样的操作后,想要我们的LED亮灭,就很容易了,代码如下:


LED = 0;  //LED亮

LED = 1;  //LED灭


搞定~




关键词: GPIO     位操作     bit    

工程师
2021-01-13 21:42:49     打赏
2楼

GET! 学习了! 这个操作不错~


工程师
2021-01-13 21:47:44     打赏
3楼

这样也行啊!

明天我试试!


工程师
2021-01-13 23:42:11     打赏
4楼

技巧总结的不错


工程师
2021-01-13 23:58:01     打赏
5楼

总结的很棒


专家
2021-01-20 12:09:50     打赏
6楼
非常感谢!

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]