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

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

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

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

连线:

/*
0 _- ?8 V  [: p5 N! J, _ * BL - PC8  D0
& F# [4 I8 v: x* g6 m. _. d; R7 _2 P * CS - PC9  D1( U# X2 f4 w3 w7 r) ?6 t
* DC - PC11 D3
- |0 z8 `$ x2 T; K * RS - PD2  CMD
2 j) H9 [" z0 e+ R. _ * SCL -PC10 D2
- [0 v$ M: l. y4 o. w; z * SDA -PC12 CK. B; O) S6 P% v4 k
*/

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


6 b* Q3 D; I$ \0 f' \6 B

一、配置IO

122111pxahikl1oxobiaid.png.thumb.png


1 u* D5 B" W9 B% T  l

二、由stm32cubeIde生成工程后,加入st7735.h、st7735.c以及font.h
5 W& F) H( y4 i0 i% z0 @1 h

122235dxkonlkxnixlql2k.png.thumb.png

# f  r  m7 j0 J7 `
  3、宏定义,在stm7735.h中定义屏的6个引脚的高底电平:4 M! M/ l2 p" I1 F
  1. //LCD片选脚! S, Z6 a' ^9 s$ ~6 e
  2. #define CS_HIGH   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET)# k. D. K8 p0 Q5 I: m7 O7 V
  3. #define CS_LOW   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET)
    $ z" H3 z3 u  u& X8 m. i& [. P

  4. " O! w7 J& p, |' z: _7 i
  5. //指令数据选择脚   对应屏幕上面的a0脚  输出低电平,代表命令,高电平,代表数据
    $ Q; w* t# Y1 Y5 v! H5 W) ?1 {5 l
  6. #define COMMAND  HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_RESET)6 M0 E  j1 ?7 v6 d+ f- h
  7. #define DATA     HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET)
    - M  g+ C- w. p
  8. 6 J  c" Z/ c4 @" N
  9. //复位脚
    ! C1 r/ i; z8 k2 I4 @
  10. #define reset_high  HAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_SET)  m7 Q0 V- w# K: S' H% |; o7 u. d
  11. #define reset_low  HAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_RESET)* b, M$ O9 J: l8 S. q& @6 I
  12. //背光脚" N3 u$ s3 x; ~1 }; B, g' |: ^4 e
  13. #define  led_high HAL_GPIO_WritePin(ST7735_BL_GPIO_Port,ST7735_BL_Pin,GPIO_PIN_SET)
    3 @  A& a! {1 l+ r  \% N8 r: A! {
  14. #define  led_low HAL_GPIO_WritePin(ST7735_BL_GPIO_Port,ST7735_BL_Pin,GPIO_PIN_RESET)
    ) e2 V% V. ]& q2 O# V- T
  15. // SCL& {# \3 b. d" u- i! H6 n
  16. + A, y7 o+ j9 [5 q1 [6 U
  17. #define LCD_SCLK_LOW HAL_GPIO_WritePin(ST7735_SCL_GPIO_Port, ST7735_SCL_Pin, GPIO_PIN_RESET)+ e. z# b' t4 K7 `$ |5 c
  18. #define LCD_SCLK_HIGH HAL_GPIO_WritePin(ST7735_SCL_GPIO_Port, ST7735_SCL_Pin, GPIO_PIN_SET)
    : H9 r) }; t- [7 K1 h; z
  19. 6 I" w$ |* \% P9 K% a6 h" w
  20. // SDA
    . y/ i8 G4 i  O+ B2 D& d

  21. 4 H! A. L: x3 R, T
  22. #define LCD_SDA_LOW HAL_GPIO_WritePin(ST7735_SDA_GPIO_Port, ST7735_SDA_Pin, GPIO_PIN_RESET)* u. p% @8 S9 @& s
  23. #define LCD_SDA_HIGH HAL_GPIO_WritePin(ST7735_SDA_GPIO_Port, ST7735_SDA_Pin, GPIO_PIN_SET)
复制代码
2 ]0 K. n# L1 F2 k$ h- j: T( {


2 @6 r3 H3 ^, {

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

  1. void st7735_write(uint8_t data)) p- y! n# E! v9 I; ]4 }
  2. {
    1 U: {" i. Z) D: I
  3.         uint8_t i;8 `4 [  P5 |; m3 l6 |: @( S% g2 C3 n: \3 R
  4.         for(i=0;i<8;i++)
    2 B3 D2 ^2 A  I% S4 O
  5.         {! T+ d+ @3 ^& u' E
  6.                 LCD_SCLK_LOW;8 O4 H% H3 K5 D9 O% E1 m1 T
  7.                 if(data&0x80)& @0 c" a* g! d9 q' y% T! p# k
  8.                 {
    $ u0 U1 o' \# r
  9.                         LCD_SDA_HIGH;
    , P2 U: w3 p0 o. Z, k3 Z/ l7 \
  10.                 }
    3 n" h! s: U0 c# u
  11.                 else
    - N9 f6 t. Z+ D. `5 O: \; O! o5 P9 T
  12.                 {* w  H5 E* K' Q2 i& X
  13.                         LCD_SDA_LOW;
    - ~9 B5 L/ v$ G9 _; K/ k2 a" F8 S+ H
  14.                 }4 [0 d. p4 H/ I4 j5 J
  15.                 LCD_SCLK_HIGH;+ y  Y8 H0 e6 k$ c
  16.                 data<<=1;% R/ _( y& }! T) T2 J
  17.         }
    0 O6 {8 E$ V, g/ {
  18. }
    1 f! |: W5 f% H
  19. //LCD屏幕写指令$ R6 w' ^( U. B" c3 \
  20. void TFT_WRITE_DATA(uint8_t data)6 D) I8 R/ B! z7 W% o5 C
  21. {
    & Y* B: K: C5 V1 }; z1 }, D. u
  22.         CS_LOW;  s1 R7 }. O: `3 M/ L
  23.         DATA;- t6 b; t: k$ ?5 K8 }
  24.         st7735_write(data);, ?0 t8 S7 k: K% {* F3 t
  25.         //HAL_SPI_Transmit(&hspi3, &data, 2, 20);
    + V$ R: X- ~7 ?8 i" L
  26.         //HAL_SPI_Transmit_DMA(&hspi1,&data,1);; x- u) B$ z  b- l
  27.         CS_HIGH;
    4 w7 G4 [7 B8 C, G
  28. : W4 }( W2 P' E+ q3 Z! E0 i
  29. }
    , \* a. `9 A+ {& J$ V) O, Q( d+ Q
  30. //  LCD屏幕写指令0 Q0 h8 S% O* a; n: l
  31. void TFT_WRITE_COMMAND(uint8_t command)
    # Q; X$ [. _6 K3 ^9 @0 W
  32. {
    " s2 X$ x  S) G
  33.         CS_LOW;6 p" Q! ]: G  J
  34.         COMMAND;
    3 w5 r6 S$ r: S  i- o) E6 u1 d9 g
  35.         st7735_write(command);* c; o  M. k: l% C9 \7 u
  36.         //HAL_SPI_Transmit(&hspi3, &command, 2, 20);
    8 @" [1 U( B' j- `! y
  37.         //HAL_SPI_Transmit_DMA(&hspi1,&command,1);
    ; B* C4 m! i& M. k, q( I
  38.         CS_HIGH;; o) v1 a8 V) {
  39. }
    - u' z0 u- e1 L& L" a# s. t- E3 _  Y

  40. & n4 f. l0 m# g) k
  41. //  向对应的寄存机写入单个数�?
    ! q9 I. D! I0 G' n9 ^
  42. void TFT_WRITE_REG(uint8_t reg,uint16_t reg_value)0 N6 Q1 [/ a6 ^$ j4 Y
  43. {
    + h# h- q$ _# N$ [# l' ?5 i5 w" B
  44.         TFT_WRITE_COMMAND(reg);
    ( n) M) }! y4 W1 M) a: `
  45.         TFT_WRITE_DATA(reg_value);( A1 O6 [' }" G% o$ v7 o

  46. # e. n2 L6 o- R6 O1 ?0 I8 B$ _, S1 Z: k

  47. 4 ]$ G+ D* z  G
  48. }
    ; g& ]2 s% w  {( `- Z
  49. // 写入一个16位的数据6 C. K; g4 H! f) ]: o% }
  50. void TFT_WRITE_u16_DATA(uint16_t temp)
    , i$ S. `# A, T3 X
  51. {2 t, h9 V, g. V
  52. & q% g& Y( x1 v, v
  53.                 uint8_t tempBuf[2];
    ! Y4 y5 f" x& _  Y8 R5 a
  54.                 tempBuf[0] = temp>>8;
    & V8 j8 n; x/ C3 s+ q
  55.                 tempBuf[1] = temp;( _  O/ x6 p7 |/ n" Q1 E4 _: j% B6 p
  56.                 CS_LOW ;8 E$ i  p& M6 z! o! b
  57.                 DATA ;% i% F. d! e4 ]) ]3 u; D3 Y
  58.                 st7735_write(tempBuf[0]);
    & U8 d5 |" o  r# v
  59. : e: E3 D( m' i0 d
  60.                 //HAL_SPI_Transmit(&hspi3, &tempBuf, 4, 20);
    4 c1 t* E4 K$ g1 `% b9 j
  61.                 //HAL_SPI_Transmit_DMA(&hspi1,tempBuf, 2);2 S* `1 W" R) t9 {6 I0 E5 d5 K4 n+ n

  62. : q3 W5 P1 T7 r( I& f: H: A
  63.                 st7735_write(tempBuf[1]);. ?9 W8 a7 L8 \  k! \' n
  64. ( A+ I9 ^6 z, C
  65.                 CS_HIGH ;
    ; ~2 E6 _5 V9 L! H$ _
  66. }
复制代码


6 g( F. [: v; u! f5 T

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

  1. /* USER CODE BEGIN 2 */) }( f% J; r+ N6 [, I

  2.   z) b* N+ i# T
  3.   printf("start U7575!\r\n");
    ' Z6 O3 x5 u9 [8 ]8 V
  4.   tft_init();
    " _9 _9 D3 s' a$ ^
  5.         TFT_ShowChar(0,0,'A',WHITE,YELLOW,32);' n* R) K  [7 {8 a
  6.         LCD_ShowCharStr(0,32,128,(char *)str,WHITE,BLUE,32);
      r" p* C3 h9 J4 w
  7.         LCD_ShowCharStr(0,64,128,(char *)str3,WHITE,BLUE,24);; w+ O- l9 Z2 c  _4 B5 A  {
  8.         LCD_ShowCharNumber(0,96,128,number,WHITE,RED,32);
    $ [* z7 v' N; A8 I
  9.         LCD_ShowCharStr(0,128,128,(char *)str2,RED,WHITE,16);
    ) u. H) B4 D: v
  10.   /* USER CODE END 2 */
    4 Z' J; f1 x2 l( ]. T
复制代码

+ u  r5 E" Q) b& @

测试效果如图:

4 E7 [8 l/ y0 _. w, y  B2 d

122914a5jj7q2wj98j6wjk.jpg.thumb.jpg . g; q6 a4 G5 C( J5 E* Z
. y* S6 d' r& U* r9 ^! x. L
出处:社区用户:lugl发布8 e( V) B8 d$ M# X4 y# D6 x
6 y. U( ]# q( r

: p4 v8 B# P* _; s7 M4 ^3 q+ i0 {
赞 收藏 评论0 发布时间:2023-1-9 14:00

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版