OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3560|回复: 5

stm32f207使用SPI1连接液晶,但是液晶一直无数据

[复制链接]

30

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-6-14
在线时间
206 小时
发表于 2015-8-13 17:25:03 | 显示全部楼层 |阅读模式
5金钱
本人使用的是stm32f207的100管脚芯片,使用SPI1连接华远公司的液晶UC1698u,代码如下:
SPI1的初始化
[mw_shl_code=c,true]void stm32_SPISetup (void) { /*---------SPI1----------------*/ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; RCC->APB2RSTR |= RCC_APB2RSTR_SPI1; // 复位外设为默认值 RCC->APB2RSTR &= ~RCC_APB2RSTR_SPI1; // 复位外设为默认值 SPI1->CR1 = 0x033f; //时钟为60M/64,模式3,先传高位,使内部NSS管脚为高电平,SCK空闲为高 SPI1->SR = 0; //清中断标志 SPI1->CR2 = 0x0000; //禁止发送接收中断 SPI1->CR1 |=SPI_Device_En; //使能设备 // NVIC->ISER[SPI1_IRQn >> 0x05] =(u32)0x01 << (SPI1_IRQn & (uint8_t)0x1F); // Enable the Selected IRQ Channels }[/mw_shl_code]
管脚初始化(SPI1管脚在其他地方已经设置为复用,这里就不复述),使用PE2作为液晶复位脚。PE3作为液晶的数据/命令功能脚,PE4为液晶片选脚,PE5为液晶背光
[mw_shl_code=c,true]static unsigned char UC1698IOConfigure_FUN(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOs clocks */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE| RCC_AHB1Periph_GPIOB , ENABLE); /* Configure GPIOE */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOE, &GPIO_InitStructure); return UC1698_SUCCESS; }[/mw_shl_code]
所需要考虑的管脚为:



操作函数为:
[mw_shl_code=c,true]unsigned char UC1698WriteOneByteToLCD_FUN(unsigned char cDataType,unsigned char cData) { UC1698_XCS_CLEAR; //片选UC1698 // os_dly_wait(1); UC1698_nop_FUN(10); if(cDataType==UC1698_COMMAND_TYPE) //表明操作的是命令 { UC1698_A0_CLEAR; //写命令 SPI_I2S_SendData(SPI1,cData); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)==RESET); UC1698_nop_FUN(10); //延时 UC1698_A0_SET; //命令发完后恢复到数据发送状态 } else if(cDataType==UC1698_DATA_TYPE) //表明操作的是数据 { UC1698_A0_SET; SPI_I2S_SendData(SPI1,cData); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)==RESET); } UC1698_nop_FUN(10); //延时 UC1698_XCS_SET; //取消片选UC1698 return UC1698_SUCCESS; }[/mw_shl_code]
但是发现,检测后,SPI输出的波形是正确的,但是液晶无显示,请问有做过这方面的人吗?搞了两三天了,一直没有结果
1.png

最佳答案

查看完整内容[请看2#楼]

回复【3楼】jiafangshi: --------------------------------- 如果真如你所说,那就是现场问题,比如虚焊、短路之类,别人不会知道了。 但一般是波形、软件有问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11553
金钱
11553
注册时间
2014-4-1
在线时间
1317 小时
发表于 2015-8-13 17:25:04 | 显示全部楼层
回复【3楼】jiafangshi:
---------------------------------

如果真如你所说,那就是现场问题,比如虚焊、短路之类,别人不会知道了。

但一般是波形、软件有问题。
回复

使用道具 举报

30

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-6-14
在线时间
206 小时
 楼主| 发表于 2015-8-13 17:25:04 | 显示全部楼层
结贴:
这个测试问题中,程序,硬件方面都是没有问题的,而且确实,SPI1只要配置好了,波形方面正确基本就没有什么问题,问题还是出在其他的管脚对其的影响,可以从其他的管脚来查找问题即可
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11553
金钱
11553
注册时间
2014-4-1
在线时间
1317 小时
发表于 2015-8-13 17:27:40 | 显示全部楼层
首先要保证波形正确,但这只是一个方面;

还需要了解控制命令、显示命令。
回复

使用道具 举报

30

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-6-14
在线时间
206 小时
 楼主| 发表于 2015-8-13 17:32:57 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
波形没有问题,用示波器都看过,控制和显示命令是移植过来的,在老产品上面,这个控制和显示指令没有什么问题
回复

使用道具 举报

30

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-6-14
在线时间
206 小时
 楼主| 发表于 2015-8-14 09:54:47 | 显示全部楼层
回复【4楼】xuande:
---------------------------------
好的,谢谢了哈,到时候找到问题了,我在上来说说,防止以后也有人犯类似问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 11:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表