完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
看了代码,有点疑问。
if(DeviceCode==0x9325||DeviceCode==0x9328)//ILI9325 else …… 这样是为了支持更多的不同的TFT。 而在其他的代码中。譬如LCD_WriteReg(R80, 0x0000); //水平方向GRAM起始地址 这样是不是说明R80这个#define R80 0x50 符合任何的TFT驱动。 如果我要移植原子的TFT代码的话,只需知道我的DeviceCode就可以了? 然后修改里面的初始化程序就可以了? 还是按照完全手册描述那样,只支持优异特、STMSKY、火牛呢? |
|
相关推荐
13个回答
|
|
估计代码移植有问题了。
刚看了下我的HX8312的程序。 ILI9320 #define R80 0x50 水平方向GRAM起始地址 #define R80 0x50 水平方向GRAM结束地址 HX8312 #define R80 0x45 水平方向GRAM起始地址 #define R81 0x46 水平方向GRAM结束地址 那么说,如果我需要代码移植的话,只需要修改2个地方即可了。 一是DeviceCode。 二是那些宏定义指令集了。唉,又要看英文版本的HX8312了,百度了一天没有发现中文的。 |
|
|
|
回复【2楼】 wolfdong7 :
------------------------------- 请下载我的最新代码看。在这里。 你说的,大体正确了。不同LCD驱动IC之间的设置基本是差不多的(初始化除外),所以只要在初始化正确了之后,基本上其他的设置就差不多类似了,就算不同也差不了太远,这就给我们兼容不同LCD提供了保证,而我们的代码就是利用这一点。 另外还值得注意的就是,比如显示方式,就是扫描方式,不同液晶差别可能会比较大,不过我就用一个扫描方式,然后其他的旋转屏幕之类的工作,就让画点函数来完成,这样更可以提高兼容性。 |
|
|
|
回复【3楼】发烧友:
------------------------------- 恩,谢了。 以前我一直很反感用寄存器操作方式,觉得STM32都有库了,干嘛没事找事做用寄存器。 现在在初步学习ARM11的时候,发现都是用寄存器。 所以,正好拿你的例程,改装到我另外一个开发板去,权当练练手。呵呵! |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
回复【8楼】发烧友:
------------------------------- 噢。我懂了。 就是我分批赋值。 比如:GPIOC->ODR=1<<3; GPIOD->ODR=4<<2; |
|
|
|
|
|
TFT的问题解决了。
现在我又在移植FLASH了。 查看了不少的FLASH的资料,发现大部分的FLASH的指令都一样。不相同好像只有ID号。 我屏蔽掉了实验17SPI_FLASH其它的程序,只留下串口和FLASH的程序。 结果,在查看检测W25P16这个检测ID函数时,过不去,就是不等于0XEF14。这个在我意料之中。但是串口提示的ID一直为0,这个我就想不通了,求解!PS:我用的是M25P16 再想顺便问一下,新的开发板什么时候出呀? 以前帮同学买过你的板子,所以自己就不买了,免得资料冲突。结果没想到,移植资料这么麻烦。。。 |
|
|
|
回复【11楼】wolfdong7:
------------------------------- 你看看MP25P16的时序是不是和W25X16的一模一样。 另外,看看SPI口是否和其他外设公用了,如果共用,你必须把其他外设的CS 拉高。否则会干扰的。 |
|
|
|
再次请问下:
原子你的实验SPI_FLASH中,函数SPIx_ReadWriteByte() static u8 SPI_Read_Byte(void) { while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); SPI_I2S_SendData(SPI1, 0x00); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) return SPI_I2S_ReceiveData(SPI1); } static void SPI_Write_Byte(u8 byte) { while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); SPI_I2S_SendData(SPI1, byte)/* Send byte through the SPI2 peripheral; while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); SPI_I2S_ReceiveData(SPI1); } 是在对使用库函数这两个函数合体的吗? 下面是我开发板的例程读取ID的程序 void M25P16_Read_Id(u8 * id) { u8 i; Select_Flash(); SPI_Write_Byte(0X9F); for(i=0;i<20;i++) { id = SPI_Read_Byte();} NotSelect_Flash(); } 然后我在你的程序里读取ID的程序修改为: u16 SPI_Flash_ReadID(void) { u16 Temp = 0; SPI_FLASH_CS=0; delay_ms(500); SPIx_ReadWriteByte(0x9F);//发送读取ID命令 Temp|=SPIx_ReadWriteByte(0xFF)<<8; Temp|=SPIx_ReadWriteByte(0xFF); //不明白为什么你的程序读取前加三个SPIx_ReadWriteByte(0x00),查看了下W25X16,只需加一个 //读取的时候指令时 又是用SPIx_ReadWriteByte(0xFF),我把0XFF这个指令改为任意一个比如0X00,0XFD等,都行。求解! SPI_FLASH_CS=1; delay_ms(500); return Temp; } 结果:成功读取ID了,并且在串口提示上看见了MiniSTM32 SPI TEST,好开心! 有时候我觉得自己好奇怪。明明有个现成的程序在面前,自己非要去为难自己,喜欢去拆东墙补西墙。把这个A开发板的程序,移植到B开发板跑起来。然后再B开发板的程序,移植到A开发板跑起来。 |
|
|
|
SPI_FLASH解决了,接着再请问下TFT的问题。
目前我发现接TFT的开发板,只有两种接法。 一种是像原子你那种的,一个端口解决TFT数据转送。 另外一种是用FSMC接法,我看了6种开发板的原理图和程序。数据接口完全一样。 查看程序,都没有像外部中断那样,有映射管脚那种,估计FSMC数据口是限定的。不知道这样理解错了没? 不知道原子哥,你有没有用寄存器操作过FSMC? |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1592 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1531 浏览 1 评论
965 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
679 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1574 浏览 2 评论
1859浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
632浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
512浏览 3评论
522浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
497浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-18 07:16 , Processed in 0.834562 second(s), Total 101, Slave 84 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号