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

NUCLEO-G071 硬件I2C发送

[复制链接]
电子星辰 发布时间:2021-1-18 14:59
最近需要用到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 1捕获.JPG " 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
  1. MX_GPIO_Init();% f0 Y. X/ c5 y7 x, a0 y
  2.   MX_I2C1_Init();+ I& l4 `! ?: N" M
  3.   /* USER CODE BEGIN 2 */
    & l0 L: ]1 m3 f+ |+ x) X
  4.         OLED_Init();
    8 e" W0 O  i3 N7 `
  5.   /* USER CODE END 2 */
    6 y. ?$ p. i. c! o5 {. o% N; ?
  6. 1 S% ?5 I' I$ ~! E/ H5 m
  7.   /* Infinite loop */8 l- q" o8 g$ \" S' H% E: W- v
  8.   /* USER CODE BEGIN WHILE */: H0 R5 V! l/ e8 O* W
  9.   while (1)5 T' f% T2 Y* t/ l
  10.   {
    0 Q0 }! i5 Y2 |1 K( F. Q) o1 E2 ?
  11.                 HAL_Delay(10);//延时10毫秒
    & v3 R8 L( w# H
  12.                 OLED_ItoC_Show(34,5,debug1,16);//显示获取的I2C数据; n4 p$ D. ?5 j
  13.                 debug1++;) V5 o7 ^5 G, Z& \7 `( r" ^  [# U
  14.     /* USER CODE END WHILE */2 ?& l; C# N+ D7 _8 m

  15. 5 S: h  I/ p  m9 u$ \+ V
  16.     /* USER CODE BEGIN 3 */0 t7 B- _; r0 e6 }
  17.   }
复制代码
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
  1. //初始化SSD1306                                            4 H7 C: K- W, d& w$ R; z
  2. void OLED_Init(void)
    6 |. Q9 O& Y! H0 |
  3. {        
    3 [  z( n4 M0 h& _) i# v
  4.   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
  5.         ) g6 E2 Z& P2 ^4 w$ j3 Q' i' t
  6.         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
  1. /*! L$ t0 Y  j9 L5 s
  2. * 函数功能: 通过硬件I2C向OLED写入命令或数据* J0 g1 q1 }3 w* m6 m
  3. * 输入参数: dat 数据,cmd 命令) |& ~* g  K0 w* \. K8 C4 }' z
  4. * 返 回 值: 无  s( b$ L) C; r: X. [# z4 X  V
  5. * 说    明:无) f0 ]2 x/ t1 J& t$ v
  6. */1 {5 _: `5 W4 p
  7. void OLED_WR_Byte(unsigned char dat,unsigned char cmd)
    ( ?, m' y$ _# G9 ]$ C) g( k
  8. {$ I+ ?$ |; ?( w* o& _. i2 |/ r
  9.         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
  10.         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
  11. }
复制代码

$ 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

NUCLEO-G071_I2C.rar

下载

5.12 MB, 下载次数: 3

赞 收藏 评论1 发布时间:2021-1-18 14:59

举报

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