数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3946|回复: 11

[STM] IO输出速度跟不上内核,那内核会怎么办,先跑还是干等

[复制链接]
发表于 2020-11-13 13:55:57 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
本帖最后由 南天音乐 于 2020-11-13 13:57 编辑

如题,我们都知道STM32F103的内核时钟有72M,但IO却不可能达到一样的速度进行输出。如要控制一个IO输出,以寄存器操作为例,控制PC2输出高电平
GPIOC->BSRR=(u16)0x0004;
这条语句编译为汇编时可能就2条指令,应该在几个指令周期就执行完了,内核执行完这些指令之后,是不管IO口是否输出了想要的电平继续往下执行其它指令,还是在等待IO输出到想要的电平才继续往下执行?
目前来看,应该是会等待的,但从汇编指令上来是看不出的,应该是硬件完成的。具体等待多长时间,是否与配置GPIO的输出速度有关联呢,这个没测试过,手册貌似也没找到相应的说明。
可以确定的是,程序没事不要总去设置GPIO,即使是输出相同的状态,尽量能用变量就用变量,想想我之前有贪图方便直接类似如下直接操作GPIO
while(1)
{
        ....
        if(a)
        {
                GPIOC->BSRR=(u16)0x0004;
        }
        else
        {
                GPIOC->BRR=(u16)0x0004;
        }
        ....
}
其实无形之中已经等效为
while(1)
{
        ....
        if(a)
        {
                GPIO_Out_1;
                Delay(0xffffff);//夸张的延时
        }
        else
        {
                GPIO_Out_0;
                Delay(0xffffff);
        }
        ....
}
触目惊心的延时直接拖慢了系统的整体运行。可能普通应用每什么关系,可对于要实时信号处理的来说,这就要命了。
以上仅为个人观点,有啥不正确的地方欢迎指教。

打赏

参与人数 1家元 +20 收起 理由
家睦 + 20

查看全部打赏

发表于 2020-11-13 17:25:59 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +6 收起 理由
家睦 + 6

查看全部打赏

回复 支持 2 反对 0

使用道具 举报

发表于 2020-11-13 17:49:56 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +10 收起 理由
家睦 + 10

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-14 15:08:47 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-14 17:11:24 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 2 反对 0

使用道具 举报

发表于 2020-11-15 12:14:24 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2020-11-15 12:20:16 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2020-11-16 10:04:53 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2020-11-16 16:48:22 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2020-11-16 20:50:28 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 21:14:26 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-12-3 02:17 , Processed in 0.109200 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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