完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
不知是哪里没设置,640*480的65K的屏,刷屏(全屏显某一种颜色)一次竟然要150ms。。。。
代码是参考原子的,请各位代为分析是什么原因导致的呢? 相关的代码如下: void MYRCC_DeInit(void) //初始化时钟系列。{ RCC->APB1RSTR = 0x00000000;//复位结束 RCC->APB2RSTR = 0x00000000; RCC->AHBENR = 0x00000014; //睡眠模式闪存和SRAM时钟使能.其他关闭. RCC->APB2ENR = 0x00000000; //外设时钟关闭. RCC->APB1ENR = 0x00000000; RCC->CR |= 0x00000001; //使能内部高速时钟HSION RCC->CFGR &= 0xF8FF0000; //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0] // RCC->CFGR = 0xF0F0F0AA; //TestRCC->CR &= 0xFEF6FFFF; //复位HSEON,CSSON,PLLONRCC->CR &= 0xFFFBFFFF; //复位HSEBYP RCC->CFGR &= 0xFF80FFFF; //复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE RCC->CIR = 0x00000000; //关闭所有中断//配置向量表 #ifdef VECT_TAB_RAMMY_NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);#else MY_NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);#endif}void STM32_Clock_Init(u8 PLL) //初始化时钟的函数{unsigned char temp=0; MYRCC_DeInit(); //复位并配置向量表RCC->CR|=0x00010000; //外部高速时钟使能HSEONwhile(!(RCC->CR>>17));//等待外部时钟就绪RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;PLL-=2;//抵消2个单位RCC->CFGR|=PLL<<18; //设置PLL值 2~16RCC->CFGR|=1<<16; //PLLSRC ON FLASH->ACR|=0x32; //FLASH 2个延时周期 RCC->CR|=0x01000000; //PLLONwhile(!(RCC->CR>>25));//等待PLL锁定RCC->CFGR|=0x00000002;//PLL作为系统时钟 while(temp!=0x02) //等待PLL作为系统时钟设置成功{ temp=RCC->CFGR>>2;temp&=0x03;} } void RA8875_Init(void){RCC->AHBENR|=1<<8; //使能FSMC时钟 RCC->APB2ENR|=1<<3; //使能PORTB时钟RCC->APB2ENR|=1<<5; //使能PORTD时钟RCC->APB2ENR|=1<<6; //使能PORTE时钟RCC->APB2ENR|=1<<7; //使能PORTF时钟 RCC->APB2ENR|=1<<8; //使能PORTG时钟RCC->APB2ENR|=1<<0; //使能AFIO时钟 GPIOB->CRL&=0XFFFFFFF0; //PB0 推挽输出 背光 这个作为RSTGPIOB->CRL|=0X00000003; //PORTD复用推挽输出 GPIOF->CRH&=0X0FFFFFFF; //使用PF15GPIOF->CRH|=0XB0000000; GPIOD->CRH&=0X00FFF000; //8 9 10 14 15 GPIOD->CRH|=0XBB000BBB; GPIOD->CRL&=0XFF00FF00; // 0 1 4 5GPIOD->CRL|=0X00BB00BB; //PORTE复用推挽输出 GPIOE->CRH&=0X00000000; //7 8 9 10 11 12 13 14 15 GPIOE->CRH|=0XBBBBBBBB; GPIOE->CRL&=0X0FFFFFFF;//7 GPIOE->CRL|=0XB0000000; //PORTG12复用推挽输出 作为片选信号 GPIOG->CRH&=0XFFF0FFFF; // 12GPIOG->CRH|=0X000B0000; GPIOG->CRL&=0XFFFFFFF0;//PG0->RS //0 GPIOG->CRL|=0X0000000B; //寄存器清零//bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。//这里我们使用NE4 ,也就对应BTCR[6],[7]。 FSMC_Bank1->BTCR[6]=0X00000000;FSMC_Bank1->BTCR[7]=0X00000000;FSMC_Bank1E->BWTR[6]=0X00000000;//操作BCR寄存器使用异步模式FSMC_Bank1->BTCR[6]|=1<<12;//存储器写使能FSMC_Bank1->BTCR[6]|=1<<4; //存储器数据宽度为16bit //操作BTR寄存器 //3个HCLK(HCLK=72M)因为液晶驱动IC的写信号脉宽,最少也得50ns。72M/3=24M=42ns,已经超频了。 FSMC_Bank1->BTCR[7]|=1<<9; //数据保存时间为3个HCLK //闪存写时序寄存器 FSMC_Bank1E->BWTR[6]=0x0FFFFFFF;//默认值//使能BANK4(PC卡设备)FSMC_Bank1->BTCR[6]|=1<<0; DelayMs(50); // delay 50 ms //LCD_WriteReg(0x0000,0x0001);DelayMs(50); // delay 50 ms //因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。FSMC_Bank1->BTCR[7]|=0XF<<8; //数据保存时间为16个HCLK FSMC_Bank1->BTCR[7]|=1<<28; //用B模式 //DeviceCode = LCD_ReadReg(0x0000); FSMC_Bank1->BTCR[7]&=~(0XF<<8); //数据保存时间为0//因为液晶驱动IC的写信号脉宽,最少也得50ns。72M/3=24M=42ns,已经超频了。 //FSMC_Bank1->BTCR[7]|=3<<8; //数据保存时间为3个HCLK FSMC_Bank1->BTCR[7]&= 0xFFFF00FF;FSMC_Bank1->BTCR[7]|= 0x00000100; RST=1; DelayMs(2); //上电延时100ms RST=0; DelayMs(10); RST=1; DelayMs(10); //在上升沿的10才进行其他动作 LCD_OneCommand(PLLC1,0x05); // DelayMs(10); LCD_OneCommand(PLLC2,0x02); // system clock = 25MHz DelayMs(10); //更改PLL参数后要延时1ms LCD_OneCommand(PWRR,0x0001); DelayMs(10); LCD_OneCommand(PWRR,0x0000); //完成复位并关掉显示 DelayMs(10); //延时10ms LCD_OneCommand(SYSR,0x000F);//设置色彩深度、选择16bit的数据接口 DelayMs(1); LCD_OneCommand(SFCLR,0x0000); //Serail Flash/ROM频率设置,此处将Serial Flash/ROM频率设置与system clock一样 DelayUs(1); LCD_OneCommand(P1CR,0x85); LCD_OneCommand(P1DCR,0x0010); //频率约为305Hz,占空比为50% DelayMs(1); LCD_OneCommand(PCSR,0x0003); LCD_OneCommand(HDWR,79); //水平方向的像素点= (79+1)*8 LCD_OneCommand(HNDFTR,0x0005); //水平非显示的像素(微调) LCD_OneCommand(HNDR,0x000F); //水平非显示的像素 LCD_OneCommand(HSTR,0x0001); //水平同步信号起始宽度 LCD_OneCommand(HPWR,0x0000); //水平同步信号脉冲宽度 LCD_OneCommand(VDHR0,0x00DF); LCD_OneCommand(VDHR1,0x0001); //以上两句为设置垂直方向的像素 LCD_OneCommand(VNDR0,0x000A); LCD_OneCommand(VNDR1,0x0000); //以上两句为设置垂直非显示的像素 LCD_OneCommand(VSTR0,0x001F); LCD_OneCommand(VSTR1,0x0000); //以上两句为设置垂直同步信号起始像素 LCD_OneCommand(VPWR, 0x0001); //设置垂直同步脉冲信号宽度 LCD_OneCommand(DPCR,0x0000); //设置单图层、扫描方向等 LCD_OneCommand(MWCR0,0x0000); //选择绘图模式、光标显示 LCD_OneCommand(MWCR1,0x0000); } |
|
相关推荐
2个回答
|
|
|
怎么你的界面风格这么乱>
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
4130 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
3221 浏览 1 评论
2747 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
2175 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
14939 浏览 2 评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
3084浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
1894浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
2064浏览 3评论
1976浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
2165浏览 3评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 23:56 , Processed in 0.835279 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1429