搜索
查看: 909|回复: 1

[原创] NUCLEO-G071 硬件I2C发送

[复制链接]

该用户从未签到

26

主题

565

帖子

85

蝴蝶豆

金牌会员

最后登录
2021-3-19
发表于 2021-1-18 14:59:59 | 显示全部楼层 |阅读模式
最近需要用到I2C控制OLED,想先用硬件I2C试试,这样方便一点。用的是OLED商家的代码,比较简单。

I2C1设置为快速模式,400K。
1捕获.JPG

main函数里只写了初始化和一个显示代码。

  1. MX_GPIO_Init();
  2.   MX_I2C1_Init();
  3.   /* USER CODE BEGIN 2 */
  4.         OLED_Init();
  5.   /* USER CODE END 2 */

  6.   /* Infinite loop */
  7.   /* USER CODE BEGIN WHILE */
  8.   while (1)
  9.   {
  10.                 HAL_Delay(10);//延时10毫秒
  11.                 OLED_ItoC_Show(34,5,debug1,16);//显示获取的I2C数据
  12.                 debug1++;
  13.     /* USER CODE END WHILE */

  14.     /* USER CODE BEGIN 3 */
  15.   }
复制代码


要注意I2C的SCL,SDA IO口是否一致

  1. //初始化SSD1306                                            
  2. void OLED_Init(void)
  3. {        
  4.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);
  5.        
  6.         HAL_Delay(800);//必须要延时
复制代码


用这个HAL库函数(HAL_I2C_Mem_Write)进行I2C的写入操作
  1. /*
  2. * 函数功能: 通过硬件I2C向OLED写入命令或数据
  3. * 输入参数: dat 数据,cmd 命令
  4. * 返 回 值: 无
  5. * 说    明:无
  6. */
  7. void OLED_WR_Byte(unsigned char dat,unsigned char cmd)
  8. {
  9.         if(cmd) {HAL_I2C_Mem_Write(&hi2c1,OLED_SLAVE_ADDRESS,OLED_dat_ADDRESS,I2C_MEMADD_SIZE_8BIT,&dat,1,I2C2_TIMEOUT_MAX);}
  10.         else                 {HAL_I2C_Mem_Write(&hi2c1,OLED_SLAVE_ADDRESS,OLED_cmd_ADDRESS,I2C_MEMADD_SIZE_8BIT,&dat,1,I2C2_TIMEOUT_MAX);}
  11. }
复制代码



NUCLEO-G071_I2C.rar

5.12 MB, 下载次数: 3, 下载积分: ST金币 -1

回复

使用道具 举报

该用户从未签到

34

主题

867

帖子

90

蝴蝶豆

论坛元老

最后登录
2021-4-4
发表于 2021-1-18 21:44:23 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-20 12:42 , Processed in 1.148187 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表