ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM32F1] 请问这样是正确的吗

[复制链接]
612|35
 楼主 | 2019-12-13 21:03 | 显示全部楼层 |阅读模式
我现在是 用BIT9来设置高低电平,这样的话每次都要给BSRR 写0x0100来置位!!假如我要发送0x01,那就得先或一个16位的0,再左移7位来跟写入BSRR的0x0100来按位与!!!

使用特权

评论回复
| 2019-12-13 21:06 | 显示全部楼层
对于发送一个字节,操作就麻烦点

使用特权

评论回复
 楼主 | 2019-12-13 21:08 | 显示全部楼层
还有STM32F103,单独操作一位,必须给BSRR写一个16位的数吗?

使用特权

评论回复
| 2019-12-13 21:11 | 显示全部楼层
能不能单独操作,比如直接就PA9=1,这样设置

使用特权

评论回复
| 2019-12-13 21:16 | 显示全部楼层
首先定义位变量结构体
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;

使用特权

评论回复
| 2019-12-13 21:19 | 显示全部楼层
可以用逻辑位的运算操作,也可以用楼上那种,实际上PA9,后面已经通过宏替换了。

使用特权

评论回复
| 2019-12-13 21:23 | 显示全部楼层

直接用库操作就ok啦,搞这么复杂干嘛呢

使用特权

评论回复
| 2019-12-13 21:25 | 显示全部楼层
不是有位带操作嘛

使用特权

评论回复
| 2019-12-13 21:29 | 显示全部楼层
可以STM32的位操作函数啊;

使用特权

评论回复
 楼主 | 2019-12-13 21:32 | 显示全部楼层

那我如果要用第九位来做模拟串行输出,我发一个一节0x45,都要移位再与0x0100来相或吧,跟我前面说的意思一样啊

使用特权

评论回复
| 2019-12-13 21:34 | 显示全部楼层
不对是相与

使用特权

评论回复
 楼主 | 2019-12-13 21:36 | 显示全部楼层
还有个问题,比如我只需要用这一位,并且这16位都设置为输出,我要输出串行数据而不影响其他位。如果按我那种移位相与,就有可能改变其他位的输出,因为每次都是赋的是十六位值

使用特权

评论回复
| 2019-12-13 21:41 | 显示全部楼层
位带没用过,一般用宏定义。

使用特权

评论回复
| 2019-12-13 21:43 | 显示全部楼层
与或针对某一位进行修改好了,又不会影响其它引脚

使用特权

评论回复
| 2019-12-13 21:47 | 显示全部楼层
你不改其他脚怎么会影响其他脚,你右移n位又不是每移一次都刷新一次IO口,而是你移位完成后才赋值!还不明白吗?

使用特权

评论回复
 楼主 | 2019-12-13 21:50 | 显示全部楼层
我的意思是,每次都是给BSRR;或者ODR赋的16位值啊,操作第九位的时候,其他15位也一并操作了啊

使用特权

评论回复
 楼主 | 2019-12-13 21:53 | 显示全部楼层

但是我要用其他位啊,我就是想在改变第九位输出状态的时候,不影响第八位的任何输出状态

使用特权

评论回复
| 2019-12-13 22:00 | 显示全部楼层

楼主的思维已经进入死胡同

使用特权

评论回复
 楼主 | 2019-12-13 22:03 | 显示全部楼层
帮我看看这个模拟发送8位,数据位会不会影响时钟,谢谢
for(i=1;i<=8i++)
GPIO_SetBit(GPIOB,GPIO_Pin_5);
GPIO_SetBit(GPIOB,(0x0100&(DATA<<I);
GPIO_Reset(GPIOB,GPIO_Pin_5);

使用特权

评论回复
| 2019-12-13 22:06 | 显示全部楼层


看看,楼主可以说下自己是怎么想的吗?

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表