[应用相关] NUCLEO串口屏显示

[复制链接]
1080|3
 楼主| 500days 发表于 2016-4-23 22:10 | 显示全部楼层 |阅读模式
今天来做个比较复杂一点的。
用到的硬件如下:





这是个串口屏,需要用到SPI接口。
SPI外设
SPI是串行通信的一种,与UART类似。不过SPI一般是同步的,而UART可以是同步,也可以是异步。与UART一样,它也可以有效的节省通信线路。
MOSI 主设备输出/从设置输入管脚,该管脚在主模式下发送数据,在从模式下接受数据主设备输入/从设备输出管脚,该管脚在从模式下发送数据,在主模式下接收数据
MISO 主设备输入/从设备输出管脚,该管脚在从模式下发送数据,在主模式下接收数据
SCK 同步时钟
NSS 从设置选择,这是一个可选的管脚,用来选择主/从设置,他的功能是用来作为片选管脚,让主设备可以单独的与特定从设备通讯,避免数据线上的冲突,从设备的NSS管脚可以由主设备当做一个标准的IO来驱动。可以是硬件或软件来实现。
用来控制LCD的话,一般我们主要用于向LCD输出信息,所以只要用到MOSI即可。下面是配置信息:
接下来配置SPI的工作参数:





这样,SPI的配置就差不多了。
LCD控制器
一般来说,点屏的话需要参考如下资料
数据手册
硬件原理图
 楼主| 500days 发表于 2016-4-23 22:10 | 显示全部楼层
下面语句指明了各引脚的连接方式:
  1. #define LCD_RESET_CLEAR HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET)
  2. #define LCD_RESET_SET HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET)

  3. #define LCD_CS_CLEAR HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET)
  4. #define LCD_CS_SET HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET)

  5. #define LCD_DC_CLEAR HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET)
  6. #define LCD_DC_SET HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET)
向控制器写入数据分为两种:命令及参数。当然有些命令还带返回值,这里都忽略了。
需要注意的是ILI9341中的数据,一般都是8位的,但是颜色数据都是16位的。
LCD命令及数据函数如下:
  1. void LCD_Write_Cmd(uint8_t cmd)
  2. {
  3. LCD_CS_CLEAR;
  4. LCD_DC_CLEAR;

  5. HAL_SPI_Transmit(&hspi1, &cmd, 1, 500);

  6. LCD_CS_SET;

  7. }


  8. void LCD_Write_Dat(uint8_t dat)
  9. {
  10. LCD_CS_CLEAR;
  11. LCD_DC_SET;

  12. HAL_SPI_Transmit(&hspi1, &dat, 1, 500);

  13. LCD_CS_SET;
  14.   

  15. }

  16. void LCD_Write_Color(uint16_t color)
  17. {
  18. uint8_t dat;

  19. LCD_CS_CLEAR;
  20. LCD_DC_SET;

  21. dat = color >> 8;
  22. HAL_SPI_Transmit(&hspi1, &dat, 1, 50);

  23. dat = color & 0xFF;
  24. HAL_SPI_Transmit(&hspi1, &dat, 1, 50);

  25. LCD_CS_SET;
  26.   

  27. }


 楼主| 500days 发表于 2016-4-23 22:11 | 显示全部楼层
有了这几个基本的函数,就可以来操控LCD了,如初始化、写入文本、图形等信息。详情请参考代码。
显示效果
下面有几张显示效果。






                    

cnb12345 发表于 2016-4-24 09:40 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

120

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部