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

STM32G431RBT6笔记之IIC总线

[复制链接]
STMCU小助手 发布时间:2023-3-2 11:32
一、EEPROM24C02
IIC的文件不需要CubeMX配置,官方已经给了.c文件,只需要复制过去就行

d81a877abbd44dc0af7052c48bb4acf6.png

31044936e11a4de187196436312b53b4.png

I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。IIC是半双工通信方式。

在上一个模板的基础上添加iic的模板,首先还是建立文件夹、添加文件、编译链接,头文件的添加

846647620b4e4dcc898fb1e1defed5a3.png

c4be7c9b7a7a47c7b3c2dfeadc4e9a73.png

自己写read和write的代码
  1. //24C02的代码
  2. void i2c_24c02_write(unsigned char *pucBuf,unsigned char ucAddr,unsigned char ucNum)
  3. {
  4.         I2CStart();
  5.         I2CSendByte(0xa0);//器件地址
  6.         I2CWaitAck();
  7.        
  8.         I2CSendByte(ucAddr);
  9.         I2CWaitAck();
  10.        
  11.         while(ucNum--)
  12.         {
  13.                 I2CSendByte(*pucBuf++);
  14.                 I2CWaitAck();
  15.         }
  16.         I2CStop();
  17.         delay1(500);
  18. }
复制代码
  1. void i2c_24c02_read(unsigned char *pucBuf,unsigned char ucAddr,unsigned char ucNum)
  2. {
  3.         I2CStart();
  4.         I2CSendByte(0xa0);//器件地址
  5.         I2CWaitAck();
  6.        
  7.         I2CSendByte(ucAddr);
  8.         I2CWaitAck();
  9.        
  10.         I2CStart();
  11.         I2CSendByte(0xa1);//器件地址
  12.         I2CWaitAck();
  13.        
  14.         while(ucNum--)
  15.         {
  16.                 *pucBuf++ = I2CReceiveByte();
  17.                 if(ucNum)
  18.                         I2CSendAck();
  19.                 else
  20.                         I2CSendNotAck();
  21.                 I2CWaitAck();
  22.         }
  23.         I2CStop();
  24. }
复制代码

void i2c_24c02_write(unsigned char *pucBuf,unsigned char ucAddr,unsigned char ucNum)
参数解释:*pucBuf:写的内容所在地;ucAddr:要写进哪里去;ucNum:要写的个数
void i2c_24c02_read(unsigned char *pucBuf,unsigned char ucAddr,unsigned char ucNum)
参数解释:*pucBuf:读到哪里去;ucAddr:从哪里读;ucNum:要读的个数

21b7376230e5489e8843ee41955ef7ba.png

7907668187c34f6facdb2807d4924186.png

接下来就借助LCD屏幕显示出来读出来的内容 。

7ffd926206e047cb9c4f362bcd8b1f64.png

b264510015094ad5b5f8a775c5cbf98b.png

f7218915bdc74195901bd2ef84528c1d.png

实验结果:

ef7c258cc11a4c0188be771e391a8e10.png

二、可编程电阻:通过软件的方式改变电阻:

238cebb9ee564cf3b88fea7519e863d7.png

dc4af04fc30449159b0bba4a0515c1b6.png

ce95643e07c0424ebb52491dff57cd3f.png

bda9e16ace5b4acf8e92e2e93b1ec967.png

  1. //MCP4017可编程电阻相关代码可编程
  2. void write_resistor(uint8_t value)
  3. {
  4.         I2CStart();
  5.         I2CSendByte(0x5E);//器件地址
  6.         I2CWaitAck();
  7.        
  8.         I2CSendByte(value);
  9.         I2CWaitAck();
  10.         I2CStop();
  11. }
  12. uint8_t read_resistor(void )
  13. {
  14.         uint8_t value;
  15.         I2CStart();
  16.         I2CSendByte(0x5F);//器件地址
  17.         I2CWaitAck();
  18.        
  19.         value = I2CReceiveByte();
  20.         I2CSendNotAck();
  21.         I2CStop();
  22.        
  23.         return value ;
  24. }
复制代码

71ea6f0b34444d56bd7ef8e165b1d5f1.png

e8ac5ed9985d4508af2b62b0a265a8cb.png

5074b056b264465c91526718bc02e86b.png

1a5cc70c2394447f8241a774a0800900.png

  1. void Lcd_Proc(void )//显示部分用到的东西
  2. {
  3.         if((uwTick-uwTick_Lcd_Set_Point)<500) return ;
  4.         uwTick_Lcd_Set_Point = uwTick;
  5.        
  6.         i++;
  7. //        sprintf((char *)Lcd_Disp_String,"    i num:%03d      ",i);
  8.         sprintf((char *)Lcd_Disp_String,"EE:%x%x%x%x%x R:%x",EEPROM_String_1[0],EEPROM_String_1[1],EEPROM_String_1[2],EEPROM_String_1[3],EEPROM_String_1[4],RES_4017);
  9.         LCD_DisplayStringLine(Line2, Lcd_Disp_String);
  10.         sprintf((char *)Lcd_Disp_String,"RES_4017:%5.2fK",0.7874*RES_4017);
  11.         LCD_DisplayStringLine(Line3, Lcd_Disp_String);
  12.         sprintf((char *)Lcd_Disp_String,"VOLTAGE:%6.3fV",3.3*((0.7874*RES_4017)/(0.7874*RES_4017+10)));
  13.         LCD_DisplayStringLine(Line4, Lcd_Disp_String);
  14.        
  15. }
复制代码


bb9ccfcf730f4fdaa4a8cc25bfd0a30f.png

用万用表的时候,一头接GND,一头接J15上。大致是一样的电压
————————————————
版权声明:想要优秀点儿


收藏 评论0 发布时间:2023-3-2 11:32

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版