最近需要用到I2C控制OLED,想先用硬件I2C试试,这样方便一点。用的是OLED商家的代码,比较简单。2 p( @0 Q2 k9 A9 L
+ @. {9 X2 ^, q% n8 e
I2C1设置为快速模式,400K。
( H; S9 h# p$ o$ @5 }' a( v
" X8 L4 C' k9 p; P& }! `: T
P6 `4 D" e* w. Y5 `8 kmain函数里只写了初始化和一个显示代码。
a6 S1 q7 J7 p, F) O& K" m) u+ t @8 P3 y6 L
- MX_GPIO_Init();% f0 Y. X/ c5 y7 x, a0 y
- MX_I2C1_Init();+ I& l4 `! ?: N" M
- /* USER CODE BEGIN 2 */
& l0 L: ]1 m3 f+ |+ x) X - OLED_Init();
8 e" W0 O i3 N7 ` - /* USER CODE END 2 */
6 y. ?$ p. i. c! o5 {. o% N; ? - 1 S% ?5 I' I$ ~! E/ H5 m
- /* Infinite loop */8 l- q" o8 g$ \" S' H% E: W- v
- /* USER CODE BEGIN WHILE */: H0 R5 V! l/ e8 O* W
- while (1)5 T' f% T2 Y* t/ l
- {
0 Q0 }! i5 Y2 |1 K( F. Q) o1 E2 ? - HAL_Delay(10);//延时10毫秒
& v3 R8 L( w# H - OLED_ItoC_Show(34,5,debug1,16);//显示获取的I2C数据; n4 p$ D. ?5 j
- debug1++;) V5 o7 ^5 G, Z& \7 `( r" ^ [# U
- /* USER CODE END WHILE */2 ?& l; C# N+ D7 _8 m
5 S: h I/ p m9 u$ \+ V- /* USER CODE BEGIN 3 */0 t7 B- _; r0 e6 }
- }
复制代码 8 Q7 ^' S1 o4 M9 u% ^8 H9 Q
, x" j+ I3 @% u8 W要注意I2C的SCL,SDA IO口是否一致+ S3 _5 O; }: ~% a
0 ~2 S* w8 z/ a" Z
- //初始化SSD1306 4 H7 C: K- W, d& w$ R; z
- void OLED_Init(void)
6 |. Q9 O& Y! H0 | - {
3 [ z( n4 M0 h& _) i# v - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);
8 P5 E2 j. E' U/ l5 l4 [# M5 Z( z" i2 w - ) g6 E2 Z& P2 ^4 w$ j3 Q' i' t
- HAL_Delay(800);//必须要延时
复制代码
6 r! d% K) Z* O- w0 |& K/ ^& P
( p' Z! b% @2 G( A7 M5 Z用这个HAL库函数(HAL_I2C_Mem_Write)进行I2C的写入操作6 s/ v9 Z7 g& e# T5 y
- /*! L$ t0 Y j9 L5 s
- * 函数功能: 通过硬件I2C向OLED写入命令或数据* J0 g1 q1 }3 w* m6 m
- * 输入参数: dat 数据,cmd 命令) |& ~* g K0 w* \. K8 C4 }' z
- * 返 回 值: 无 s( b$ L) C; r: X. [# z4 X V
- * 说 明:无) f0 ]2 x/ t1 J& t$ v
- */1 {5 _: `5 W4 p
- void OLED_WR_Byte(unsigned char dat,unsigned char cmd)
( ?, m' y$ _# G9 ]$ C) g( k - {$ I+ ?$ |; ?( w* o& _. i2 |/ r
- if(cmd) {HAL_I2C_Mem_Write(&hi2c1,OLED_SLAVE_ADDRESS,OLED_dat_ADDRESS,I2C_MEMADD_SIZE_8BIT,&dat,1,I2C2_TIMEOUT_MAX);}
/ l1 y9 a' W- t4 g - else {HAL_I2C_Mem_Write(&hi2c1,OLED_SLAVE_ADDRESS,OLED_cmd_ADDRESS,I2C_MEMADD_SIZE_8BIT,&dat,1,I2C2_TIMEOUT_MAX);}
4 V3 |% P4 C, {$ s - }
复制代码
$ p- X1 I0 Z0 `& b% k2 k0 a9 u
& C( i/ X* t K( w' l: v% o0 `, c% Z8 h" p* n* z- J3 m
|