硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1172|回复: 3
收起左侧

[GPIO] STM32 IO操作

[复制链接]

2

主题

49

回帖

55

积分

初级会员

积分
55
发表于 2021-12-18 16:04:50 | 显示全部楼层 |阅读模式
看了硬汉哥的一篇文章 《位带bitband操作方法让变量寄存器控制IO访问更便捷无需用户计算位置》。
突发奇想不使用位带操作也可以实现。
typedef struct
{
    uint16_t bit0 : 1;
    uint16_t bit1 : 1;
    uint16_t bit2 : 1;
    uint16_t bit3 : 1;
    uint16_t bit4 : 1;
    uint16_t bit5 : 1;
    uint16_t bit6 : 1;
    uint16_t bit7 : 1;
    uint16_t bit8 : 1;
    uint16_t bit9 : 1;
    uint16_t bit10 : 1;
    uint16_t bit11 : 1;
    uint16_t bit12 : 1;
    uint16_t bit13 : 1;
    uint16_t bit14 : 1;
    uint16_t bit15 : 1;
    uint16_t Reserved : 16;
} GPIO_BIT_TYPE;

#define GPIOA_ODR ((GPIO_BIT_TYPE *)0x40020014)
#define GPIOB_ODR ((GPIO_BIT_TYPE *)0x40020414)
其他IO依次类推

GPIOA_ODR - > bit1 = 1;
没有使用位带操作,鄙人认为这样操作虽然语法上简洁,但程序内部依然进行的 读-改-写 操作。
欢迎大家在此讨论。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2021-12-18 16:15:11 | 显示全部楼层
此贴,看反汇编。

芯片外设使用硬件位带,如果没有起作用的话,注意使用__attribute__((bitband))的正确姿势即可
https://www.armbbs.cn/forum.php? ... 0029&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2021-12-19 08:25:44 | 显示全部楼层
今天再读楼主的消息,楼主是想表C语言的位域操作,
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2021-12-24 09:14:42 | 显示全部楼层
没看懂。。。你这个定义结构体的时候,也是用的是冒号位域的方式啊?  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 16:40 , Processed in 0.223278 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表