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

NUCLEO-G071 硬件I2C发送

[复制链接]
电子星辰 发布时间:2021-1-18 14:59
最近需要用到I2C控制OLED,想先用硬件I2C试试,这样方便一点。用的是OLED商家的代码,比较简单。6 Q. @* R2 f* b# a
: @' C! A* X5 K7 g1 i' O' z% v
I2C1设置为快速模式,400K。
2 _. j# _3 ]5 T" O 1捕获.JPG
" W: B8 x8 d' q& C7 f
  Y$ Z) ?1 ?% t1 cmain函数里只写了初始化和一个显示代码。! V" \( N; ~. m0 _+ s# |/ N1 d
' T/ _: L- A- ?# f. A0 _' O
  1. MX_GPIO_Init();* m" X* ]6 T1 @3 A6 e
  2.   MX_I2C1_Init();
    % x9 o! F1 g2 W+ {
  3.   /* USER CODE BEGIN 2 */
    0 {9 O" w, |1 R2 S
  4.         OLED_Init();) |( C  |$ ?/ a( ?. ~; K" p( i+ e
  5.   /* USER CODE END 2 */9 _' H3 e" d# p+ {$ n

  6. 3 M9 b& o  f, ?- R  r8 a
  7.   /* Infinite loop */
    & Z$ ?( V5 W+ L2 r& ^3 {! ]0 O3 I
  8.   /* USER CODE BEGIN WHILE */
    7 p8 s0 X7 l' r9 E  Y$ I* o
  9.   while (1)
    % |+ g" A( E( ~2 @
  10.   {) a/ d! w/ d2 ^
  11.                 HAL_Delay(10);//延时10毫秒9 L. J* R9 e5 u0 Z4 i; S7 a" o4 U( ~
  12.                 OLED_ItoC_Show(34,5,debug1,16);//显示获取的I2C数据
    1 |; [" g) q* u* ?! B
  13.                 debug1++;( }8 `3 [' G9 U9 L/ j% C- |
  14.     /* USER CODE END WHILE */6 u6 z0 m2 o, L# j

  15. ' B- m4 Q% p0 I, ?2 _9 _
  16.     /* USER CODE BEGIN 3 */4 v% ^2 a/ e" h% ?1 D
  17.   }
复制代码
& A9 x8 k, |* D" P  J/ \2 T% l

8 l  C/ e4 ~- t要注意I2C的SCL,SDA IO口是否一致
% X9 e& k  x% Z; ~+ a0 W( v9 Z4 k
- q- g! i& a/ u2 ~* f# c2 m
  1. //初始化SSD1306                                            ( I: y) M9 G5 d4 O( g; [& d
  2. void OLED_Init(void)
    3 L) T# X( \+ L8 c( u; V
  3. {        
    5 g: g: M' }6 O+ B/ ^. G  S
  4.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);
    & V6 c! \3 j% W
  5.         2 t, t1 N7 Z2 k8 M! s4 l
  6.         HAL_Delay(800);//必须要延时
复制代码

( ]' @$ k- T* f: c
# @0 [5 F, M0 m( Z8 z$ u用这个HAL库函数(HAL_I2C_Mem_Write)进行I2C的写入操作
, E$ d8 s! s" Y+ a0 J$ n
  1. /*8 [5 z1 K3 w" S- s4 N8 k% H/ y
  2. * 函数功能: 通过硬件I2C向OLED写入命令或数据: M7 z2 z8 t* h/ `* b5 \/ R2 n7 @) K
  3. * 输入参数: dat 数据,cmd 命令
    " w$ O* V* j! r  Q, f
  4. * 返 回 值: 无
    & X# T7 W' n, Y. O+ m: |7 @8 {
  5. * 说    明:无
    ' H7 c& t2 B( ?( ~- @
  6. */3 ^$ d" f8 z; Y5 Z0 z. f: \
  7. void OLED_WR_Byte(unsigned char dat,unsigned char cmd)
    " B7 n8 L, b: {! m  U' ?
  8. {
    % B9 ?$ R1 [" P6 T* P  J4 L
  9.         if(cmd) {HAL_I2C_Mem_Write(&hi2c1,OLED_SLAVE_ADDRESS,OLED_dat_ADDRESS,I2C_MEMADD_SIZE_8BIT,&dat,1,I2C2_TIMEOUT_MAX);}& J, R$ i: q' c9 }( o6 L: M8 Y3 m
  10.         else                 {HAL_I2C_Mem_Write(&hi2c1,OLED_SLAVE_ADDRESS,OLED_cmd_ADDRESS,I2C_MEMADD_SIZE_8BIT,&dat,1,I2C2_TIMEOUT_MAX);}5 J8 g& K1 y. M8 b  H9 L& n* n
  11. }
复制代码
. D0 X: H# k1 r+ Z- C8 w

7 X3 @  F' U8 h5 V% [
# b2 {# B5 H& S3 _+ U. ]

NUCLEO-G071_I2C.rar

下载

5.12 MB, 下载次数: 3

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

举报

1个回答
sincomaster 回答时间:2021-1-18 21:44:23
谢谢分享

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版