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

STM32G0-Platformio+libopencm3-EEPROM M24C02使用

[复制链接]
STMCU小助手 发布时间:2023-2-22 17:27
使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为EEPROM M24C02的使用方法。

1 新建项目
  • 建立eeprom项目

在PIO的Home页面新建项目,项目名称eeprom,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3;

  • 项目建立完成后在src目录下新建main.c主程序文件;
  • 修改下载和调试方式,这里开发板使用的是DAPLink仿真器,因此修改platformio.ini文件如下:

  1. 1upload_protocol = cmsis-dap
  2. 2debug_tool = cmsis-dap
复制代码


2 编写程序
首先从之前的I2C项目中拷贝sw_i2c库文件夹到当前项目的lib目录下:

微信图片_20230222172701.png


本次不使用串口打印,直接使用SEGGER rtt打印,因此将SEGGER RTT也放置在lib目录下,便于调试打印:
  1. 1void log(const char* fmt, ...)
  2. 2{
  3. 3    va_list va;
  4. 4    va_start(va, fmt);
  5. 5    SEGGER_RTT_vprintf(0,fmt,&va);
  6. 6    va_end(va);
  7. 7}
复制代码

2.1 EEPROM 写数据
  1. 1static inline bool m24cxx_write_one_byte(uint8_t addr, uint8_t data)
  2. 2{
  3. 3    uint8_t buffer[2];
  4. 4
  5. 5    buffer[0] = addr;
  6. 6    buffer[1] = data;
  7. 7    return sw_i2c_transfer(M24CXX_DEVICE_ADDR, buffer, 2, 0, 0);
  8. 8}
复制代码


2.2 EEPROM 读数据
  1. 1static inline bool m24cxx_read_one_byte(uint8_t addr, uint8_t *ptr)
  2. 2{
  3. 3    return sw_i2c_transfer(M24CXX_DEVICE_ADDR, &addr, 1, ptr, 1);
  4. 4}
复制代码


3 连接硬件进行测试
将EEPROM模块与开发的I2C引脚连接好:

微信图片_20230222172654.png


先执行程序进行写入:
  1. 1int main(void)
  2. 2{
  3. 3    sys_clock_setup();
  4. 4
  5. 5    log("init sw i2c.\r\n");
  6. 6
  7. 7    sw_i2c_init();
  8. 8
  9. 9    log("eeprom read testing.\r\n");
  10. 10
  11. 11    uint8_t addr = 0x01;
  12. 12    uint8_t read_data=0;
  13. 13    uint8_t write_data = 0x88;
  14. 14
  15. 15    #if 0
  16. 16        m24cxx_read_one_byte(addr,&read_data);
  17. 17
  18. 18        if(read_data == write_data){
  19. 19            log("eeprom write ok\r\n");
  20. 20        }else{
  21. 21            log("ERR:EEPROM write failed.\r\n");
  22. 22        }
  23. 23
  24. 24    #endif
  25. 25
  26. 26    log("eeprom write.\r\n");
  27. 27
  28. 28    m24cxx_write_one_byte(addr, write_data);
  29. 29
  30. 30    delay_ms(5);//wait write done
  31. 31
  32. 32    while(1){/*do nothing*/}///!!!not go here.
  33. 33    return 0;
  34. 34}
复制代码

然后将读取部分的程序注释打开:
  1. 1    #if 1
  2. 2        m24cxx_read_one_byte(addr,&read_data);
  3. 3
  4. 4        if(read_data == write_data){
  5. 5            log("eeprom write ok\r\n");
  6. 6        }else{
  7. 7            log("ERR:EEPROM write failed.\r\n");
  8. 8        }
  9. 9
  10. 10    #endif
复制代码
将开发板断电后重新上电可以看到测试正确:


微信图片_20230222172648.png

注:写入数据根据M24C02的数据手册,其 Write time 为5ms,因此写入后要进行等待其写入完成;


收藏 评论0 发布时间:2023-2-22 17:27

举报

0个回答

所属标签

相似分享

官网相关资源

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