【蓝桥杯嵌入式】8_IIC-eeprom读写(16位有/无符号数的存储)

[复制链接]
发表于 2025-11-2 21:56:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
全部代码网盘自取
  链接:
提取码:3ii2
  1、电路图


这个电路允许通过I2C总线与EEPROM(M24C02-WMN6TP)和数字电位器(MCP4017T-104ELT)举行通讯。EEPROM用于存储数据,而数字电位器可以用于调治模拟电压输出。通过I2C总线,微控制器可以读取EEPROM中的数据或设置数字电位器的电阻值。

2、Cube设置

将PB7和PB6设置为output

将官方提供的I2C底层代码放到工程目次下


3、代码

3.1 存储16位无符号数(0~65535)

我们在前面输入捕捉频率的底子上,增长按键功能,并用eeprom存储频率(整型数据)
修改i2c_hal.h和i2c_hal.c文件
i2c_hal.h
  1. #ifndef __I2C_HAL_H
  2. #define __I2C_HAL_H
  3. #include "main.h"
  4. void I2CStart(void);
  5. void I2CStop(void);
  6. unsigned char I2CWaitAck(void);
  7. void I2CSendAck(void);
  8. void I2CSendNotAck(void);
  9. void I2CSendByte(unsigned char cSendByte);
  10. unsigned char I2CReceiveByte(void);
  11. void I2CInit(void);
  12. uchar eeprom_read(uchar addr);
  13. void eeprom_write(uchar addr,uchar data);
  14. #endif
复制代码
i2c_hal.c
  1. /*
  2.   ����˵��: CT117E-M4Ƕ��ʽ������GPIOģ��I2C������������
  3.   ��������: MDK-ARM HAL��
  4.   Ӳ������: CT117E-M4Ƕ��ʽ������
  5.   ��    ��: 2020-3-1
  6. */
  7. #include "i2c_hal.h"
  8. #define DELAY_TIME        20
  9. /**
  10.   * @brief SDA������ģʽ����
  11.   * @param None
  12.   * @retval None
  13.   */
  14. void SDA_Input_Mode()
  15. {
  16.     GPIO_InitTypeDef GPIO_InitStructure = {0};
  17.     GPIO_InitStructure.Pin = GPIO_PIN_7;
  18.     GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
  19.     GPIO_InitStructure.Pull = GPIO_PULLUP;
  20.     GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
  21.     HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
  22. }
  23. /**
  24.   * @brief SDA�����ģʽ����
  25.   * @param None
  26.   * @retval None
  27.   */
  28. void SDA_Output_Mode()
  29. {
  30.     GPIO_InitTypeDef GPIO_InitStructure = {0};
  31.     GPIO_InitStructure.Pin = GPIO_PIN_7;
  32.     GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_OD;
  33.     GPIO_InitStructure.Pull = GPIO_NOPULL;
  34.     GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
  35.     HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
  36. }
  37. /**
  38.   * @brief SDA�����һ��λ
  39.   * @param val ���������
  40.   * @retval None
  41.   */
  42. void SDA_Output( uint16_t val )
  43. {
  44.     if ( val )
  45.     {
  46.         GPIOB->BSRR |= GPIO_PIN_7;
  47.     }
  48.     else
  49.     {
  50.         GPIOB->BRR |= GPIO_PIN_7;
  51.     }
  52. }
  53. /**
  54.   * @brief SCL�����һ��λ
  55.   * @param val ���������
  56.   * @retval None
  57.   */
  58. void
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表