
151楼
硬件iic弄eeprom,跟踪调试一次,出现问题断电重来。死锁太正常的事情了!断电重新上电就死锁不了了。

152楼
完整的FSMC驱动LCD程序
今天本来想把SPI驱动LCD触摸屏整下,搞了半天没眉目。就整理了了下LCD。
一直想把FSMC驱动的程序发出来,今天才有空。比GPIO快不少。
本来想连着SRAM驱动一起发上来,有点事没整完。
实现的功能只是初始化LCD,之后将屏刷成黑色的。
只是演示下LCD的FSMC驱动方法。没别的作用。
至于画点画图什么的,程序中包含这些东西。你可以自己试试
另:我的晶振是12M的,使用8M晶振的童鞋需要改改。方法jobs的帖子里边有,我的帖子里边讲的比较麻烦。
下边是代码链接:
http://share.eepw.com.cn/share/download/id/75286
今天本来想把SPI驱动LCD触摸屏整下,搞了半天没眉目。就整理了了下LCD。
一直想把FSMC驱动的程序发出来,今天才有空。比GPIO快不少。
本来想连着SRAM驱动一起发上来,有点事没整完。
实现的功能只是初始化LCD,之后将屏刷成黑色的。
只是演示下LCD的FSMC驱动方法。没别的作用。
至于画点画图什么的,程序中包含这些东西。你可以自己试试
另:我的晶振是12M的,使用8M晶振的童鞋需要改改。方法jobs的帖子里边有,我的帖子里边讲的比较麻烦。
下边是代码链接:
http://share.eepw.com.cn/share/download/id/75286



有个贴在115网盘里下载的,很大的,我用了一天一夜色才下载完,里面资料很不错,有我想学的Laview
找不算是那个人的贴了,下拉连接
http://115.com/file/be6xatff
http://115.com/file/be6xaghh
http://115.com/file/be6xad72
http://115.com/file/dpdfs8mm
http://115.com/file/c2urv71j
http://115.com/file/be6xa5i5


160楼
硬件SPI方式读取触屏数据
感谢Rancho的提示。我在弄触屏的时候有一个小错误,片选触屏后没有等待直接就去读数据了。
读出的数据一直都是1006.Rancho提示后,我在片选后给了10us的延时,触屏数据就出来了。
1、SPI初始化
前面已经给出了,使用的是硬件SPI方式读取数据
2、触屏初始化
完成触屏片选信号初始化,并调用SPI1初始化代码完成SPI初始化
void touchInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//初始化LCD_CS(PF10)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
SPI1_Init();
}
3、从触屏读数据函数
初始化之后就可以从触屏读出数据了(原始的触屏AD转换值)。
向触屏写写0X90 读x坐标数据,写0xD0 读Y坐标数据
u16 read_trouch (u8 cmd)
{
u16 temp=0;
u8 i;
//片选LCD触屏
SetTouchCS();
//片选之后一定要延时。否则读不出数据
delay_us(10);
SPI1_ReadWriteByte(cmd); //SPI写命令
temp=SPI1_ReadWriteByte(0); //读数
i=SPI1_ReadWriteByte(0);
temp<<=8;
temp|=i;
temp>>=3;
//清楚片选
ClrTouchCS();
return temp;
}
//读出数据
void touch_GetAdXY(u16 *x,u16 *y)
{
*x=read_trouch(CHX); //写0X90 读x坐标
*y=read_trouch(CHY); //写0xD0 读Y坐标
}
注意:读出的数据并不是对应于LCD像素的。需要进行一定的转换后才能使用。读出的数据没有消抖,不是很稳定
4、主函数中调用
touchInit();
printf("触摸屏初始化完成\r\n");
while(1)
{
touch_GetAdXY(&x,&y);
if(x!=0)
printf("%d,%d \r\n",x,y);
delay_ms(100);
}
从LCD触屏读数据的图:

5、触屏校准
待续
6、将触屏读出的数据转换成与LCD像素对于的数据
待续
感谢Rancho的提示。我在弄触屏的时候有一个小错误,片选触屏后没有等待直接就去读数据了。
读出的数据一直都是1006.Rancho提示后,我在片选后给了10us的延时,触屏数据就出来了。
1、SPI初始化
前面已经给出了,使用的是硬件SPI方式读取数据
2、触屏初始化
完成触屏片选信号初始化,并调用SPI1初始化代码完成SPI初始化
void touchInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//初始化LCD_CS(PF10)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
SPI1_Init();
}
3、从触屏读数据函数
初始化之后就可以从触屏读出数据了(原始的触屏AD转换值)。
向触屏写写0X90 读x坐标数据,写0xD0 读Y坐标数据
u16 read_trouch (u8 cmd)
{
u16 temp=0;
u8 i;
//片选LCD触屏
SetTouchCS();
//片选之后一定要延时。否则读不出数据
delay_us(10);
SPI1_ReadWriteByte(cmd); //SPI写命令
temp=SPI1_ReadWriteByte(0); //读数
i=SPI1_ReadWriteByte(0);
temp<<=8;
temp|=i;
temp>>=3;
//清楚片选
ClrTouchCS();
return temp;
}
//读出数据
void touch_GetAdXY(u16 *x,u16 *y)
{
*x=read_trouch(CHX); //写0X90 读x坐标
*y=read_trouch(CHY); //写0xD0 读Y坐标
}
注意:读出的数据并不是对应于LCD像素的。需要进行一定的转换后才能使用。读出的数据没有消抖,不是很稳定
4、主函数中调用
touchInit();
printf("触摸屏初始化完成\r\n");
while(1)
{
touch_GetAdXY(&x,&y);
if(x!=0)
printf("%d,%d \r\n",x,y);
delay_ms(100);
}
从LCD触屏读数据的图:

5、触屏校准
待续
6、将触屏读出的数据转换成与LCD像素对于的数据
待续
回复
打赏帖 | |
---|---|
C语言函数宏的三种封装方式被打赏50分 | |
【STM32F769】记一次由于开启D-Cache之后DMA数据传输出错的问题查找与解决被打赏35分 | |
嵌入式LinuxC语言程序调试和宏使用技巧被打赏50分 | |
让代码中包含最新的编译时间信息被打赏50分 | |
【分享开发笔记,赚取电动螺丝刀】STM32F769LVGL优化显示被打赏26分 | |
rtthread硬件加密--2crc加密分析被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】STM32F769驱动ST7789以及显示优化被打赏36分 | |
【分享开发笔记,赚取电动螺丝刀】S32K146 PAL模拟I2C驱动适配被打赏23分 | |
我想要一部加热台+电源硬件设计规范被打赏16分 | |
我想要一部加热台+LED背光驱动芯片RT9293知识被打赏18分 |