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

关于ST NUCLEO-U575ZI-Q的测评—软件SPI驱动ST7735

[复制链接]
STMCU小助手 发布时间:2023-1-9 14:00

硬件平台:1.8寸128x160 TFT屏(st7735驱动)

连线:

/*, l  c8 _& Q0 m) N
* BL - PC8  D0- M/ C7 w1 j. T: S1 A! A9 E' N
* CS - PC9  D1
) w& X! f; O3 a3 t; E * DC - PC11 D3
3 p0 F+ T' M3 A( V! @ * RS - PD2  CMD' H- a* f# \2 _1 e- |
* SCL -PC10 D2/ ?" Q2 f9 ~5 P# Q. l/ b5 e/ ~
* SDA -PC12 CK
; ]% ?# D  [" \$ t */

由于用spi硬件调试了好几次,要么SCK,不上拉就没有波形等。退而求次之用软件spi驱动。


, d" h2 F4 m* J: h. m1 q* E) P

一、配置IO

122111pxahikl1oxobiaid.png.thumb.png

( f% M! G; Q6 a6 s0 a  Z

二、由stm32cubeIde生成工程后,加入st7735.h、st7735.c以及font.h" D3 O( g4 U' J; B, h+ C

122235dxkonlkxnixlql2k.png.thumb.png

* k8 h1 B4 z+ h9 A- o
  3、宏定义,在stm7735.h中定义屏的6个引脚的高底电平:+ n! H$ u9 q' M# ~4 R: o
  1. //LCD片选脚# r% _% L0 V- i  m, I$ I
  2. #define CS_HIGH   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET)
    6 m; N" j7 B% r  d; i% {+ ]  l0 m
  3. #define CS_LOW   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET)7 Q* X; ?( p4 x, R' w

  4. + N/ ?5 B5 v; y
  5. //指令数据选择脚   对应屏幕上面的a0脚  输出低电平,代表命令,高电平,代表数据
    9 `& J9 Y0 z; W0 F$ w
  6. #define COMMAND  HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_RESET)/ T  R" O, a/ h) Z. N9 B
  7. #define DATA     HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET)
    0 G2 M0 x% I! n2 R; f) O/ T

  8. 6 n' @% ^0 q5 `% W) I* L9 ~4 p7 v  _
  9. //复位脚' b3 ?* a3 w8 W0 ?: v+ G
  10. #define reset_high  HAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_SET)  x1 [: }# u$ l
  11. #define reset_low  HAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_RESET)
    : `# f# J4 j4 X& t8 @
  12. //背光脚6 _- d6 y. d( \& v9 ?
  13. #define  led_high HAL_GPIO_WritePin(ST7735_BL_GPIO_Port,ST7735_BL_Pin,GPIO_PIN_SET)
    ) t$ a5 t# h6 k% ?
  14. #define  led_low HAL_GPIO_WritePin(ST7735_BL_GPIO_Port,ST7735_BL_Pin,GPIO_PIN_RESET)
    7 `- [' l. x: r5 h+ E3 v$ x3 f
  15. // SCL4 u" @1 R4 H) X' a2 A- p
  16. : x& l2 Z1 q6 D) V  o
  17. #define LCD_SCLK_LOW HAL_GPIO_WritePin(ST7735_SCL_GPIO_Port, ST7735_SCL_Pin, GPIO_PIN_RESET)
    : t1 _  |% u) X$ w
  18. #define LCD_SCLK_HIGH HAL_GPIO_WritePin(ST7735_SCL_GPIO_Port, ST7735_SCL_Pin, GPIO_PIN_SET); F  V7 m  k& }7 J
  19. + a- l6 _3 ]: ]1 u$ G
  20. // SDA
    6 y% L6 g! z' Q$ l3 M: F" @

  21. ) X0 }7 w/ j3 C
  22. #define LCD_SDA_LOW HAL_GPIO_WritePin(ST7735_SDA_GPIO_Port, ST7735_SDA_Pin, GPIO_PIN_RESET)
    8 Q( }9 T: Y8 |0 n# {
  23. #define LCD_SDA_HIGH HAL_GPIO_WritePin(ST7735_SDA_GPIO_Port, ST7735_SDA_Pin, GPIO_PIN_SET)
复制代码
" Z& K) b3 L7 S+ p+ r& k


/ T7 N# s: H# F

4、定义spi向st7735发送命令的几个重要函数:

  1. void st7735_write(uint8_t data)
    . I8 {5 A; H: x) M( {7 v
  2. {* f" w, C8 A9 {! D  j5 t& y
  3.         uint8_t i;
    7 `) @7 `' `: {7 O7 l& u4 A
  4.         for(i=0;i<8;i++)4 w, }) \- p. q4 Y- z  w
  5.         {
    " K$ ]/ c5 L" ?
  6.                 LCD_SCLK_LOW;
    . c! Q) u* y1 ^, V, P7 ]
  7.                 if(data&0x80)
    ' L' L6 u! x6 r8 Q3 v! a: \( ?
  8.                 {
    % r4 C# t9 H7 \
  9.                         LCD_SDA_HIGH;8 t( Y6 x0 d6 l" z7 d
  10.                 }
    1 p9 F  G4 u; W. l. s, `
  11.                 else
    ; q8 r5 f+ l; }1 ]+ B9 T9 S/ x9 l
  12.                 {* S/ k; I' A( ~( \8 i0 U
  13.                         LCD_SDA_LOW;2 s5 n6 |0 o8 i" C
  14.                 }
    : e* T& V( }- t9 }1 @! s/ m( a) w
  15.                 LCD_SCLK_HIGH;* z* H( h" u1 ~
  16.                 data<<=1;
    % g7 N& q. z! L& E/ T! t
  17.         }
    7 ^- Y: {4 K' o3 U; U  v
  18. }
      x% K9 l" ]) U  [' N/ l0 B, D8 o. m
  19. //LCD屏幕写指令5 P% l" G. i8 ~* A4 ^
  20. void TFT_WRITE_DATA(uint8_t data)
    7 i0 E, z$ B4 L5 G! J3 T
  21. {/ s: A& v; _' T) Z; Q0 w) e
  22.         CS_LOW;
    ' W$ q7 t1 l. x+ s5 ^; m: l
  23.         DATA;
    ( q6 H" K/ W9 q) x- o) c5 A2 A
  24.         st7735_write(data);
    " `, C' u0 F- E* [
  25.         //HAL_SPI_Transmit(&hspi3, &data, 2, 20);$ ~7 ?, j8 }( X' F
  26.         //HAL_SPI_Transmit_DMA(&hspi1,&data,1);
    + f+ m& y  Y& p& F6 M! p
  27.         CS_HIGH;
    3 S) W2 I1 ?& |. R0 K

  28. 9 U  T/ M, W: f. M' L, b  u8 R, J
  29. }& L( B! O  h$ @, S! M# m4 }
  30. //  LCD屏幕写指令) q+ `: ]6 m6 i/ X
  31. void TFT_WRITE_COMMAND(uint8_t command)7 s  a; Q5 K1 }
  32. {
    ! M: H4 F: a. @# \6 P' E
  33.         CS_LOW;0 Z8 s/ W6 z/ m; _7 R+ }5 D
  34.         COMMAND;
    & p; I1 H/ U1 H. L- D0 Q
  35.         st7735_write(command);8 ?$ q' [9 r" F; D- D" E
  36.         //HAL_SPI_Transmit(&hspi3, &command, 2, 20);& p! g( @& w4 x
  37.         //HAL_SPI_Transmit_DMA(&hspi1,&command,1);
    0 L# r0 c! k/ D' R$ l, M1 w
  38.         CS_HIGH;& `7 ^$ Z) s# d6 B
  39. }# |( A: ]5 v/ b" i  l6 c8 E: A
  40. ! w* q$ K. S2 V6 D
  41. //  向对应的寄存机写入单个数�?
    5 I" D' O7 ~- p4 }$ o# s' l
  42. void TFT_WRITE_REG(uint8_t reg,uint16_t reg_value)$ |0 p0 I2 k. [; |+ v' b) _
  43. {4 v. N+ H, ]* l1 g7 H8 |
  44.         TFT_WRITE_COMMAND(reg);0 {; Q* D. c! Z* u" w2 H7 L( [
  45.         TFT_WRITE_DATA(reg_value);
    . Z0 q( x3 s5 A. Y/ g

  46. ; x  E4 G: I& b+ y& S, Y

  47. + f0 l8 d# O! s4 G. n
  48. }
    , x" D5 v& ~2 W$ h% B! J) @
  49. // 写入一个16位的数据
    - f7 F2 g7 t( K. Q$ w7 `$ E& U  r
  50. void TFT_WRITE_u16_DATA(uint16_t temp)
    ' I3 \' L/ S7 S6 B4 z7 o! M
  51. {3 \8 o0 K* g9 {4 {2 d4 J

  52. 1 D) w4 ~1 X4 }* Z  f
  53.                 uint8_t tempBuf[2];
    ! M! H) b, j  `; c7 t
  54.                 tempBuf[0] = temp>>8;
    , _, ?) N5 t- s+ |8 W( u$ U0 c
  55.                 tempBuf[1] = temp;
    ) k4 |8 v; E, e' Q3 d5 Z
  56.                 CS_LOW ;+ F+ H. d# K% b0 p9 _6 Y' q2 w6 B
  57.                 DATA ;
    ) Z- T* O8 T) t# N/ Y' |2 T% L, j/ M
  58.                 st7735_write(tempBuf[0]);
    8 v& n7 A2 Q! q3 [! X

  59. + u" T4 s7 c8 G' t; P5 k1 J( M
  60.                 //HAL_SPI_Transmit(&hspi3, &tempBuf, 4, 20);
    % B5 }7 _( |( l" e: I# B: Z: Y6 E3 k, L
  61.                 //HAL_SPI_Transmit_DMA(&hspi1,tempBuf, 2);
    2 h4 J: x! W2 ~

  62. 5 s( |( G1 c6 k+ S
  63.                 st7735_write(tempBuf[1]);5 }9 u& x( C8 g  u
  64. 2 U8 K7 d& t/ D* M
  65.                 CS_HIGH ;, j" P- I5 @7 {5 K4 m9 G7 g
  66. }
复制代码


  L9 a: D' ]' B7 [; o

定义好这些参数后,在main.c中初始化st7735,然后写测试显示:

  1. /* USER CODE BEGIN 2 */4 E& s" s) w; v6 D

  2. ) k9 {7 G! ?; L. y
  3.   printf("start U7575!\r\n");$ ?* ]9 z+ |0 |) Z$ {) e* ~
  4.   tft_init();+ @7 S) f5 _' k% I$ U& X
  5.         TFT_ShowChar(0,0,'A',WHITE,YELLOW,32);
    , C0 U# f4 u" y$ y/ H4 [3 `# Y. |) F
  6.         LCD_ShowCharStr(0,32,128,(char *)str,WHITE,BLUE,32);
      ~) j, Q! b: a0 N8 K8 z. q! a
  7.         LCD_ShowCharStr(0,64,128,(char *)str3,WHITE,BLUE,24);
    ( _. [2 {* V, W  ^
  8.         LCD_ShowCharNumber(0,96,128,number,WHITE,RED,32);2 G% L" r$ e: `; Z  d
  9.         LCD_ShowCharStr(0,128,128,(char *)str2,RED,WHITE,16);
    7 c( O# o. b* D
  10.   /* USER CODE END 2 */
    4 w, E' E& _/ \4 H; I* p( Y# ^' ]
复制代码


& H! i4 M- n% n4 a% S( r

测试效果如图:


1 G) R% s& _$ X

122914a5jj7q2wj98j6wjk.jpg.thumb.jpg
0 ?' @. K& I- b# [9 a
+ [+ D; K3 C2 ^  A出处:社区用户:lugl发布8 `0 G* z+ j0 I) f  [

. s: u5 {) S* E
: s; f3 f" w) ~- i& V
收藏 评论0 发布时间:2023-1-9 14:00

举报

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