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像素对于的数据
待续
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |