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

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

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

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

连线:

/*
! M* h# t/ R) Q% `: h; H1 v * BL - PC8  D0& v% q: V6 t0 J* D; k6 R
* CS - PC9  D1/ u2 k- U/ i( `% U; z7 K" ?
* DC - PC11 D3
' k) r" [5 x. E& _/ t4 @7 f+ v4 @, G6 ` * RS - PD2  CMD
6 H2 A, M) n; Z( [- _2 M/ n * SCL -PC10 D2
3 c3 S9 {& X& G0 q3 Z/ L * SDA -PC12 CK
  j5 v4 G4 ?3 Z# b0 @ */

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


8 ~) K9 u5 r' j, O( n

一、配置IO

122111pxahikl1oxobiaid.png.thumb.png


& I9 C4 f6 R% s1 F

二、由stm32cubeIde生成工程后,加入st7735.h、st7735.c以及font.h* ^: K# Q2 X2 q& N! w7 {

122235dxkonlkxnixlql2k.png.thumb.png

. k9 h4 S( n7 ?) m$ Z* A1 K& b
  3、宏定义,在stm7735.h中定义屏的6个引脚的高底电平:
3 \( e% X; L! p$ E8 o+ {  n
  1. //LCD片选脚& f- ^# ~& I2 r
  2. #define CS_HIGH   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_SET)! t" a0 d' j8 z
  3. #define CS_LOW   HAL_GPIO_WritePin(ST7735_CS_GPIO_Port, ST7735_CS_Pin, GPIO_PIN_RESET): \/ G$ F0 \' `
  4. & p3 U. C7 O# \4 w3 ^. V1 l
  5. //指令数据选择脚   对应屏幕上面的a0脚  输出低电平,代表命令,高电平,代表数据) {6 ~& J( u4 P3 ~4 d$ B" [. r2 n
  6. #define COMMAND  HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_RESET)
    ( J; q5 {+ z: ~/ |4 w8 f7 [5 h2 v, ?9 P
  7. #define DATA     HAL_GPIO_WritePin(ST7735_DC_GPIO_Port, ST7735_DC_Pin, GPIO_PIN_SET)
    , `/ }  y6 o! V' I! w
  8. ' Z# }# R1 J: R7 G  ~$ H
  9. //复位脚
    3 B6 V5 y/ x6 M& P: F, q
  10. #define reset_high  HAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_SET)
    " z$ F, k$ d; v( _  `
  11. #define reset_low  HAL_GPIO_WritePin(ST7735_RES_GPIO_Port, ST7735_RES_Pin, GPIO_PIN_RESET)" w* M8 z) w3 e  a
  12. //背光脚
    0 N( p) L1 F- y0 t: f1 d; M7 [
  13. #define  led_high HAL_GPIO_WritePin(ST7735_BL_GPIO_Port,ST7735_BL_Pin,GPIO_PIN_SET)
    ) a! U2 y+ L0 G( U
  14. #define  led_low HAL_GPIO_WritePin(ST7735_BL_GPIO_Port,ST7735_BL_Pin,GPIO_PIN_RESET)
    . [. f; a+ r' N/ |# Q- ?/ O
  15. // SCL
    * @1 C/ ^, |) E& n0 w
  16. 4 d) b) c3 Y/ |
  17. #define LCD_SCLK_LOW HAL_GPIO_WritePin(ST7735_SCL_GPIO_Port, ST7735_SCL_Pin, GPIO_PIN_RESET)
    0 ]6 C7 Q8 D/ |6 m
  18. #define LCD_SCLK_HIGH HAL_GPIO_WritePin(ST7735_SCL_GPIO_Port, ST7735_SCL_Pin, GPIO_PIN_SET)  t* b( R2 r, l) a) w# c

  19. 7 D: w1 v5 g& O$ C' g
  20. // SDA
    + H: {" K( M" U# t9 f
  21. 6 f' l8 c( M; f
  22. #define LCD_SDA_LOW HAL_GPIO_WritePin(ST7735_SDA_GPIO_Port, ST7735_SDA_Pin, GPIO_PIN_RESET)4 H) n6 \3 Z4 s5 @) X- c
  23. #define LCD_SDA_HIGH HAL_GPIO_WritePin(ST7735_SDA_GPIO_Port, ST7735_SDA_Pin, GPIO_PIN_SET)
复制代码
; i, a8 M3 `/ s+ a2 w


1 b5 i; l# q, P7 Z8 k7 X6 [' n

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

  1. void st7735_write(uint8_t data)
    ! s3 v  [( [5 G& D+ X) G; j3 k
  2. {( [3 _& f% T2 d  \* X& }1 a4 s, Q3 T
  3.         uint8_t i;# \2 N4 |: [4 u" F
  4.         for(i=0;i<8;i++)4 Y. A0 H* b* w% {# n
  5.         {
    8 W$ n5 w4 G! P' @! {, P
  6.                 LCD_SCLK_LOW;4 j( @; i( z: L$ i+ Q4 l( n
  7.                 if(data&0x80)% ^7 a; R1 q  C6 o9 z
  8.                 {  t/ |$ y  n8 P  |
  9.                         LCD_SDA_HIGH;$ J0 y1 l2 A. N; l& y) [
  10.                 }
    8 e8 p# A$ y' T, s8 m
  11.                 else
    , }- T: T) Q# i' a
  12.                 {$ Q: n2 f. F; L
  13.                         LCD_SDA_LOW;
    8 i, a7 D* M, d
  14.                 }
    - Y; q$ B: L( q
  15.                 LCD_SCLK_HIGH;
    3 h6 k8 k, `1 ^. X0 S
  16.                 data<<=1;
    & i( k7 x% g5 n( U: D6 O- {+ h
  17.         }$ o4 W5 o, h9 H' _6 x5 l
  18. }, e/ K2 A" d: I$ {" |
  19. //LCD屏幕写指令
    $ s4 s( H1 i; t4 r
  20. void TFT_WRITE_DATA(uint8_t data)" _% O4 w& E4 H4 h4 T! k* [( f( s
  21. {
    % ~! S" P3 m/ m8 m; Z
  22.         CS_LOW;) w" F% Q3 {) E: b% L5 s
  23.         DATA;4 Z) a; a8 G2 D  s( ]8 Y
  24.         st7735_write(data);' |) D6 x$ ^) G4 Y* M
  25.         //HAL_SPI_Transmit(&hspi3, &data, 2, 20);
    , }4 v+ n8 a5 W, m8 w
  26.         //HAL_SPI_Transmit_DMA(&hspi1,&data,1);
    8 w8 R0 O: u/ `" m
  27.         CS_HIGH;& ]- p8 w& e% y5 r; {3 _
  28. , p  Z1 B' ~7 {) J5 w, J1 R" ]# @
  29. }0 m0 A2 R2 g) r
  30. //  LCD屏幕写指令
    ' s: i0 U6 t) z8 ~
  31. void TFT_WRITE_COMMAND(uint8_t command)
    2 s5 n* C# ]6 M  J1 [$ p
  32. {
    8 ?& w3 H/ @) Q- P% `
  33.         CS_LOW;
    * H: U7 B3 N2 ~: b0 g( |$ [
  34.         COMMAND;+ {; c! P0 G" n, t2 j; D
  35.         st7735_write(command);
    , H4 U4 W1 i# C6 w
  36.         //HAL_SPI_Transmit(&hspi3, &command, 2, 20);, ^8 I+ ^3 z. \& T( ^
  37.         //HAL_SPI_Transmit_DMA(&hspi1,&command,1);
    ' F5 s3 n# J" S9 m  W
  38.         CS_HIGH;( s5 o; ?! v2 D" b" t! p- w' i% i
  39. }
    8 h' D$ B7 K/ d, @

  40. + v" P8 v: L4 M
  41. //  向对应的寄存机写入单个数�?
    ; g# {3 E; s7 s0 z
  42. void TFT_WRITE_REG(uint8_t reg,uint16_t reg_value): x( ]- O/ h& f
  43. {% @" E  i( K7 D! F. k
  44.         TFT_WRITE_COMMAND(reg);% R0 e! _% w8 \/ Z
  45.         TFT_WRITE_DATA(reg_value);
    + p1 s/ c5 L  }& Q  c6 V
  46. 4 l, r0 E! K$ X" z3 f2 H' e7 y

  47. 5 z3 b& e6 h% _# q; ?: ?; `$ g! Z8 n+ |
  48. }
    1 R) `: F: x, B9 c
  49. // 写入一个16位的数据
    * O7 J( g, W. W% u- @- v
  50. void TFT_WRITE_u16_DATA(uint16_t temp)! {! J; R2 ], p+ t
  51. {7 I; y+ t2 T, X  c
  52. ' Q& X: C  I. f" o) h3 J1 a0 w
  53.                 uint8_t tempBuf[2];
    7 c9 U) `' J* m& Y9 ]
  54.                 tempBuf[0] = temp>>8;. [2 [  }8 X4 Y6 V( R
  55.                 tempBuf[1] = temp;
    * V8 |* F3 `, P* H; z/ l7 X
  56.                 CS_LOW ;. o) h- V' k  Q$ G1 S; E
  57.                 DATA ;
    4 s$ k4 d; Z- x8 h% G' I
  58.                 st7735_write(tempBuf[0]);
    2 s/ q' N7 d* L9 J3 i% T

  59. . S; A* T  y& P9 K! p. }
  60.                 //HAL_SPI_Transmit(&hspi3, &tempBuf, 4, 20);
    * e. M) J3 w6 J- A$ u5 @, k
  61.                 //HAL_SPI_Transmit_DMA(&hspi1,tempBuf, 2);3 q, `, a* o, Y/ i7 T

  62. . J3 n- U7 m, t% O' r
  63.                 st7735_write(tempBuf[1]);* o, c% o' s% v+ S
  64. ' e9 @+ {, d3 M( ^* F
  65.                 CS_HIGH ;
    ; Y5 X( s' R1 Y  J  W
  66. }
复制代码

+ b! t; X  V) ^( }- K# l

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

  1. /* USER CODE BEGIN 2 *// R4 R4 _0 f& W. _! m* v1 m. z

  2. 3 p, R' t# ?6 ~1 D
  3.   printf("start U7575!\r\n");$ n/ t4 t& W3 R  u
  4.   tft_init();3 B" d) J. a9 V, w
  5.         TFT_ShowChar(0,0,'A',WHITE,YELLOW,32);
    0 p$ J& O5 e3 l9 v) b7 ^% K
  6.         LCD_ShowCharStr(0,32,128,(char *)str,WHITE,BLUE,32);3 e+ M4 c: x0 P" O& q
  7.         LCD_ShowCharStr(0,64,128,(char *)str3,WHITE,BLUE,24);5 O# y  q, G8 A: }# |3 D$ z
  8.         LCD_ShowCharNumber(0,96,128,number,WHITE,RED,32);3 z9 g6 r+ t+ Y1 }
  9.         LCD_ShowCharStr(0,128,128,(char *)str2,RED,WHITE,16);
    & l5 o. V4 }0 g4 W+ H) K, f, o
  10.   /* USER CODE END 2 */
    ) Q; R2 w. ?2 E; \! X8 _+ b
复制代码


3 x* `% Z; O/ I7 m. l) ]" T

测试效果如图:

) J* D" x. J5 |3 q/ s

122914a5jj7q2wj98j6wjk.jpg.thumb.jpg
5 v2 r4 u2 T/ \! G, p6 B7 P8 t) U& S% b/ d% O  S8 }; H+ t
出处:社区用户:lugl发布
' O% L" S) a- _8 D- T4 g
9 G$ w$ V% A, Y- [
: r. P4 v5 J8 z. X( c) x
赞 收藏 评论0 发布时间:2023-1-9 14:00

举报

0个回答

所属标签

相似技术帖

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