你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败

[复制链接]
wenyangzeng 提问时间:2013-12-12 23:01 /
本帖最后由 wenyangzeng 于 2016-12-16 11:46 编辑


使用STM32F030的SPI驱动ST7565的12864LCD,用串行方式控制只要使用4条I/O线,接线方法见图1。STM32F030的PA7接MOSI,PA5接SPI_CLK,PA2接RS,PA1接RESET。该方案在STM32F1系列已经成功应用,调试前胸有成竹:用SPI方式控制LCD的底层函数无非是每次发送8位的命令或数据,应该没有什么困难。
图2.jpg
                                    
                                                      图1
不料,费了九牛二虎之力,LCD屏幕丝毫无动静。临时做了一个小循环,从SPI不断发送0x55数据,用示波器测试SPI时钟信号和数据信号,见图2。从图2可以看到二进制0101( 0x55)的MOSI数据与每一位SCK时钟上升沿都能准确对应,只不过在8位数据送出后SCK信号多出了8个。这8个时钟脉冲让ST7565LCD多接收了一次错误的(0xff或0x00)数据,难怪LCD屏幕毫无动静。

无标题.jpg

                                       图2
仔细阅读用户手册,发现STM32F0系列对SPI模块进行了改进,新增了FIFO功能,而该功能在缓冲器装满2个字节数据后能自动发送,加快了传输速度尽管我们在配置中每次只发送1个字节数据,在启动发送后,SPI就自动一次发送2个字节了。而使用来控制ST7565LCD就出现一个问题,由于送给LCD的既有命令也有数据,RS信号电平要随时改变,如果每次发送2个字节数据,我们无法判断在这2个字节到底是命令还是数据,就无法控制RS口的电平,从而发送了错误的数据给LCD了。
该问题还请高手专家指教。
附:SPI配置部分代码

GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
      
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);  
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);
      
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 |GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
      
SPI_Cmd(SPI1, DISABLE);                                                                              
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx ;  
SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                                                                                                                                      
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;  
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                                   
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;   
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                                                          SPI_InitStructure.SPI_CRCPolynomial = 7;
       SPI_Init(SPI1, &SPI_InitStructure);
       SPI_Cmd(SPI1, ENABLE);
1 收藏 6 评论21 发布时间:2013-12-12 23:01

举报

21个回答
wenyangzeng 回答时间:2013-12-13 17:51:45

RE:【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD(问题已解决)失败

根据3楼的例程运行后结果未改变。
根据4楼的建议,发送数据时使用官方的函数:
SPI_SendData8(SPI1, 0x55);

运行结果正常:

而原先发送是语句是:
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET){}
  
 SPI1->DR = byte;
 
照片.jpg
 
LCD7565.rar (3.64 KB, 下载次数: 696)
fengye5340 回答时间:2013-12-13 09:41:42

RE:【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败

参考这个代码,试试
/* SPI配置参数 */
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;  
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;   
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SD_SPI, &SPI_InitStructure);
  
  SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);
  
  SPI_Cmd(SPI1, ENABLE); /* SD_SPI enable */
wenyangzeng 回答时间:2014-12-5 22:29:46
本帖最后由 wenyangzeng 于 2014-12-5 22:35 编辑

年初的贴,一段时间没有翻过来看,今天才看到,赶紧贴上,仅供消化。

LCD7565.rar

下载

1.94 KB, 下载次数: 301, 下载积分: ST金币 -1

部分代码

feiante-155820 回答时间:2013-12-13 08:52:50

RE:【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败

我在进行SPI读取flash ID时也发现这个问题,和103芯片不一样,我的做法是增加了一个
有缘于你 回答时间:2013-12-13 09:59:50

RE:【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败

void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize)
void SPI_SendData8(SPI_TypeDef* SPIx, uint8_t Data)
void SPI_RxFIFOThresholdConfig(SPI_TypeDef* SPIx, uint16_t SPI_RxFIFOThreshold)
试试这3个函数
wenyangzeng 回答时间:2013-12-13 10:26:28

RE:【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败

谢谢2楼3楼4楼,我会试看看
青檬 回答时间:2013-12-13 14:26:00

RE:【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败

查看写命令写数据后的时间间隔,也许液晶屏的反应时间没那么快
James1980 回答时间:2013-12-25 09:37:10

RE:【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败(已解决)

经验啊,mark一下
沐紫 回答时间:2014-1-7 10:12:53

回复:【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败(已解决)

Johnson Cao 回答时间:2014-1-9 10:33:46

RE:【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败(已解决)

经验呀.我也调了半天.怎么总收不到.
djshtxp 回答时间:2014-5-11 13:18:45

回复:【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败(已解决)

求驱动代码!~
milesx 回答时间:2014-12-5 10:32:32
呵呵,楼主共享的是hex文件啊
wait-129259 回答时间:2015-4-3 10:34:08
这个驱动能在stm32cube生成的工程里用吗?
wyxy163@126.com 回答时间:2015-4-3 12:24:52
提示: 作者被禁止或删除 内容自动屏蔽
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版