打印
[STM32F1]

请问这样是正确的吗

[复制链接]
657|42
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kangzj|  楼主 | 2021-12-7 20:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在是 用BIT9来设置高低电平,这样的话每次都要给BSRR 写0x0100来置位!!假如我要发送0x01,那就得先或一个16位的0,再左移7位来跟写入BSRR的0x0100来按位与!!!

使用特权

评论回复
沙发
pangb| | 2021-12-7 20:23 | 只看该作者
对于发送一个字节,操作就麻烦点

使用特权

评论回复
板凳
kangzj|  楼主 | 2021-12-7 20:25 | 只看该作者
还有STM32F103,单独操作一位,必须给BSRR写一个16位的数吗?

使用特权

评论回复
地板
zyf部长| | 2021-12-7 20:29 | 只看该作者
能不能单独操作,比如直接就PA9=1,这样设置

使用特权

评论回复
5
xxmmi| | 2021-12-7 20:30 | 只看该作者
首先定义位变量结构体
typedef union
{
        unsigned int ALL;
        struct
        {
                unsigned int LED01        :1;
                unsigned int LED01        :1;
                unsigned int LED02        :1;
                unsigned int LED03        :1;
                unsigned int LED04        :1;
                unsigned int LED05        :1;
                unsigned int LED06        :1;
                unsigned int LED07        :1;
                unsigned int LED08        :1;
                unsigned int LED09        :1;
                unsigned int LED10        :1;
                unsigned int LED11        :1;
                unsigned int LED12        :1;
                unsigned int LED13        :1;
                unsigned int LED14        :1;
                unsigned int LED15        :1;
                unsigned int reserver :16;
        }BIT;
}LEDbits_t;

使用特权

评论回复
6
dingy| | 2021-12-7 20:32 | 只看该作者
可以用逻辑位的运算操作,也可以用楼上那种,实际上PA9,后面已经通过宏替换了。

使用特权

评论回复
7
supernan| | 2021-12-7 20:34 | 只看该作者
直接用库操作就ok啦,搞这么复杂干嘛呢

使用特权

评论回复
8
jlyuan| | 2021-12-7 20:36 | 只看该作者

不是有位带操作嘛

使用特权

评论回复
9
supernan| | 2021-12-7 20:38 | 只看该作者
可以STM32的位操作函数啊;

使用特权

评论回复
10
kangzj|  楼主 | 2021-12-7 20:40 | 只看该作者
那我如果要用第九位来做模拟串行输出,我发一个一节0x45,都要移位再与0x0100来相或吧,跟我前面说的意思一样啊

使用特权

评论回复
11
chuxh| | 2021-12-7 20:42 | 只看该作者
不对是相与

使用特权

评论回复
12
kangzj|  楼主 | 2021-12-7 20:44 | 只看该作者
还有个问题,比如我只需要用这一位,并且这16位都设置为输出,我要输出串行数据而不影响其他位。如果按我那种移位相与,就有可能改变其他位的输出,因为每次都是赋的是十六位值

使用特权

评论回复
13
stly| | 2021-12-7 20:46 | 只看该作者
位带没用过,一般用宏定义。

使用特权

评论回复
14
kangzj|  楼主 | 2021-12-7 20:50 | 只看该作者
与或针对某一位进行修改好了,又不会影响其它引脚

使用特权

评论回复
15
heweibig| | 2021-12-7 20:52 | 只看该作者
你不改其他脚怎么会影响其他脚,你右移n位又不是每移一次都刷新一次IO口,而是你移位完成后才赋值!还不明白吗?

使用特权

评论回复
16
kangzj|  楼主 | 2021-12-7 20:54 | 只看该作者

我的意思是,每次都是给BSRR;或者ODR赋的16位值啊,操作第九位的时候,其他15位也一并操作了啊

使用特权

评论回复
17
kangzj|  楼主 | 2021-12-7 20:56 | 只看该作者
但是我要用其他位啊,我就是想在改变第九位输出状态的时候,不影响第八位的任何输出状态

使用特权

评论回复
18
pengf| | 2021-12-7 20:59 | 只看该作者
楼主的思维已经进入死胡同

使用特权

评论回复
19
kangzj|  楼主 | 2021-12-7 21:01 | 只看该作者
帮我看看这个模拟发送8位,数据位会不会影响时钟,谢谢
for(i=1;i<=8i++)
GPIO_SetBit(GPIOB,GPIO_Pin_5);
GPIO_SetBit(GPIOB,(0x0100&(DATA<<I);
GPIO_Reset(GPIOB,GPIO_Pin_5);

使用特权

评论回复
20
lizye| | 2021-12-7 21:02 | 只看该作者
看看,楼主可以说下自己是怎么想的吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

672

主题

7007

帖子

2

粉丝