打印
[STM32F1]

为什么F1跑GUI_Init();这个函数需要很长时间

[复制链接]
741|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
renyaq|  楼主 | 2021-11-13 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么F1跑GUI_Init();这个函数需要很长时间

使用特权

评论回复
沙发
supernan| | 2021-11-13 21:59 | 只看该作者

什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
板凳
renyaq|  楼主 | 2021-11-13 22:04 | 只看该作者
目前我使用STM32F103跑UCOSIII和STEMWIN的库,但是在执行这个函数GUI_Init();的时候特别耗时间,需要近3S。然后我程序创建任务和初始化就花了接近1S,然后创建第一个界面花了近1S。

使用特权

评论回复
地板
jiahy| | 2021-11-13 22:06 | 只看该作者
整个程序花了5S的时间启动

使用特权

评论回复
5
renyaq|  楼主 | 2021-11-13 22:08 | 只看该作者
有谁知道什么方法可以缩减时间的吗?

使用特权

评论回复
6
renyaq|  楼主 | 2021-11-13 22:11 | 只看该作者
特别是GUI_Init();这个函数,有谁知道怎么缩短运行时间吗?

使用特权

评论回复
7
wyjie| | 2021-11-13 22:14 | 只看该作者
跟你的屏底层驱动有关系吧,检查下看看

使用特权

评论回复
8
renyaq|  楼主 | 2021-11-13 22:16 | 只看该作者
ST7789V的驱动,然后使用的FSMC的方式。这个是一个Lib文件,咋搞?能说详细一点儿吗?非常感谢
更多操作

使用特权

评论回复
9
renyaq|  楼主 | 2021-11-13 22:18 | 只看该作者

屏的驱动不是开放用户自己写的嘛
你检查你自己的屏初始化代码

使用特权

评论回复
10
renyaq|  楼主 | 2021-11-13 22:20 | 只看该作者
可是屏的初始化程序跑完只需要很短的时间,我测试了一下,就这句花的时间比较多。
//////////////////////////////
CMD->LCD_REG=(0x11);

Delayms(120);        
CMD->LCD_REG=(0x36);  
DATA->LCD_RAM=(0x00); //设置坐标原点,RGB顺序(0x08:BGR)
        
CMD->LCD_REG=(0x3A);
DATA->LCD_RAM=(0x55); // 18bit  /16bit 55
        
CMD->LCD_REG=(0xB2);  
DATA->LCD_RAM=(0x0C);
DATA->LCD_RAM=(0x0C);
DATA->LCD_RAM=(0X00);
DATA->LCD_RAM=(0x33);
DATA->LCD_RAM=(0X33);

CMD->LCD_REG=(0xB7);  // VGH and VGL setting
DATA->LCD_RAM=(0x75);

CMD->LCD_REG=(0xBB);  //VCOMS setting
DATA->LCD_RAM=(0x2C);

CMD->LCD_REG=(0xC0);  
DATA->LCD_RAM=(0x2C);

CMD->LCD_REG=(0xC2);  
DATA->LCD_RAM=(0x01);
DATA->LCD_RAM=(0xFF);

CMD->LCD_REG=(0xC3);  //GVDD, GVCL setting
DATA->LCD_RAM=(0x20);

CMD->LCD_REG=(0xC4);  
DATA->LCD_RAM=(0x20);

CMD->LCD_REG=(0xC6);  
DATA->LCD_RAM=(0x0F);

CMD->LCD_REG=(0xD0);  
DATA->LCD_RAM=(0xA4);
DATA->LCD_RAM=(0xA1);

CMD->LCD_REG=(0xE0);    //Set Gamma
DATA->LCD_RAM=(0xD0);
DATA->LCD_RAM=(0x16);
DATA->LCD_RAM=(0x1B);
DATA->LCD_RAM=(0x0B);
DATA->LCD_RAM=(0x0B);
DATA->LCD_RAM=(0x26);
DATA->LCD_RAM=(0x3C);
DATA->LCD_RAM=(0x43);
DATA->LCD_RAM=(0x4F);
DATA->LCD_RAM=(0x28);
DATA->LCD_RAM=(0x13);
DATA->LCD_RAM=(0x13);
DATA->LCD_RAM=(0x2E);
DATA->LCD_RAM=(0x33);

CMD->LCD_REG=(0xE1);    //Set Gamma
DATA->LCD_RAM=(0xD0);
DATA->LCD_RAM=(0x16);
DATA->LCD_RAM=(0x1B);
DATA->LCD_RAM=(0x0B);
DATA->LCD_RAM=(0x0A);
DATA->LCD_RAM=(0x26);
DATA->LCD_RAM=(0x3B);
DATA->LCD_RAM=(0x44);
DATA->LCD_RAM=(0x4E);
DATA->LCD_RAM=(0x27);
DATA->LCD_RAM=(0x13);
DATA->LCD_RAM=(0x12);
DATA->LCD_RAM=(0x2E);
DATA->LCD_RAM=(0x33);


上面就是初始化的指令。

          FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; //指定使用的内存库
          FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;//指定地址和数据线是否多路复用
          FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;//链接到内存库的外部内存的类型
          FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; //外部存储设备位宽
          FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;//禁止突发访问模式
          FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;//指定等待信号极性
          FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;//禁止打包突发访问模式
               
                //指定等待信号由内存的断言时间(在等待状态前一个时钟周期)
          FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
               
          FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;//打开SMC的写操作
          FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; //禁用等待状态插入
          FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; //禁用扩展模式
          FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;//异步期间禁用等待信号
          FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;//禁用突发操作
          FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
          FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

          FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  
          FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);

这个有什么问题吗?

使用特权

评论回复
11
renyaq|  楼主 | 2021-11-13 22:22 | 只看该作者
这个和驱动的关系,我不太明白,您能详细说明一下吗?

使用特权

评论回复
12
zhenykun| | 2021-11-13 22:24 | 只看该作者
也许跟Delayms(120);   这句有关系,你可以确认下

使用特权

评论回复
13
renyaq|  楼主 | 2021-11-13 22:26 | 只看该作者
这个没确认过,我试试。谢谢您

使用特权

评论回复
14
renyaq|  楼主 | 2021-11-13 22:28 | 只看该作者
长知识了 谢谢

使用特权

评论回复
15
wangzsa| | 2021-11-13 22:34 | 只看该作者
楼主最后找到问题了吗

使用特权

评论回复
16
chenjunt| | 2021-11-13 22:44 | 只看该作者
底层里面不要用delay这种玩意儿。

使用特权

评论回复
17
stly| | 2021-11-13 22:46 | 只看该作者
你可以用while判断某个调试是否成立

使用特权

评论回复
18
llljh| | 2021-11-13 22:47 | 只看该作者
比如某个标志位是否完成设置或者置位。

使用特权

评论回复
19
renyaq|  楼主 | 2021-11-13 22:51 | 只看该作者

哦,那我就知道怎么回事了,多谢大家

使用特权

评论回复
20
aoyi| | 2021-12-7 19:38 | 只看该作者
实测大概是多长时间啊

使用特权

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

本版积分规则

700

主题

10138

帖子

4

粉丝