这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» 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 跳转至

回复

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