OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 1329|回复: 2

STM8的SPI

[复制链接]

  离线 

6

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2016-11-1
在线时间
64 小时
发表于 2017-3-24 14:59:24 | 显示全部楼层 |阅读模式
本帖最后由 fankai 于 2017-3-24 15:04 编辑

有一块Nokia 5110的屏,想弄到我的小板子上,显示信息,调试程序方便些,于是根据买的5110的资料开始移植程序,资料给的是51的模拟SPI方式,挺简单的,暂时先没用,stm8自带有SPI外设,操作起来也方便,于是就开始设置SPI外设,如下,LCD只用到写MOSI就可以了,本以为这样就完成,显示字符、数字,字符串等,结果时钟不显示任何信息,然后拿示波器测CLK,MOSI,都有波形产生,这里还没产生太大怀疑,但LCD时钟显示不出来,折腾了好久,没办法,用模拟SPI试试,结果一次通过,真让人气愤啊,看了一下模拟SPI和硬件SPI的波形,有些不一样,好好的硬件SPI怎么就不能工作呢,又在网上找了好多类似的硬件SPI的操作,检查到底哪里写的不对,查了好久也没发现有什么不对,昨天也比较晚了,心想就算了吧,结果突然想起一个事,那就是LCD我只用到了MOSI,由于不用MISO,我心里原本想,既然不用,那就不用设置了,问题就出在这里,加上一句话,设置MISO的引脚为输入状态,一次通过,我想了一下,是不是这样,SPI是一个完成的硬件外设,不设置MISO的话,移位寄存器不能正常工作,所以尽管有输出,但输出不正常,这样的话,即使不用MISO,这个引脚也不能用作别的用途,白白浪费了,索性最后直接用模拟方式吧,一个MOSI就够了,不知道大家有没有遇到过这种STM8或STM32只需要MOSI,不需要MISO的情况,不设置MISO引脚位输入,SPI能否正常工作???

[C] 纯文本查看 复制代码
void spi_init(void)
{
  	//初始化SPI
	CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);			//开启SPI时钟
	GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast);		//PB6   MOSI		不需要MISO
	GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast);		//PB5   CLK	
//	GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT); 
	SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_4, SPI_Mode_Master, SPI_CPOL_Low, SPI_CPHA_2Edge, SPI_Direction_2Lines_FullDuplex, SPI_NSS_Soft, 0x07);
	SPI_Cmd(SPI1, ENABLE);											//使能SPI1      
}

void n5110_write_byte(u8 dat, u8 command)
{
  	u8 i = 0;
    LCD_CE_LOW;
    if (command == 0)
	{
		LCD_DC_LOW;			//写命令
	}
    else
	{
     	LCD_DC_HIGH;		//写数据	
	}
	
	//模拟方式
	
	for(i=0;i<8;i++)
	{
		if(dat&0x80)
		  	LCD_DIN_HIGH;
		else
		  	LCD_DIN_LOW;
		
		LCD_CLK_LOW;
		dat <<= 1;
		LCD_CLK_HIGH;
	}
}
	
//	while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);		//等待,确保发送之前,发送缓存区是空的
//	SPI_SendData(SPI1, dat);
//	while(SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);		//等待发送完成,发送缓存区空,否则连续传输会有问题
	LCD_CE_HIGH;
}
回复

使用道具 举报

  离线 

16

主题

345

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2017-5-21
在线时间
331 小时
发表于 2017-12-20 08:05:32 来自手机 | 显示全部楼层
没有做过5110我前几天做的硬件ht1621一开始也是各种不行,后来发现是spi极性设置不对
回复 支持 反对

使用道具 举报

  离线 

0

主题

30

帖子

0

精华

高级会员

Rank: 4

积分
992
金钱
992
注册时间
2013-12-27
在线时间
138 小时
发表于 2018-1-12 10:06:47 | 显示全部楼层
四线制SPI是输入和输出同时进行的,硬件SPI的 MISO在输入的时候MOSI才能输出
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-17 13:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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