使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为EEPROM M24C02的使用方法。
1 新建项目
- 建立eeprom项目
在PIO的Home页面新建项目,项目名称eeprom,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3;
1upload_protocol = cmsis-dap
2debug_tool = cmsis-dap
2 编写程序
首先从之前的I2C项目中拷贝sw_i2c库文件夹到当前项目的lib目录下:
image-20220925192507020
本次不使用串口打印,直接使用SEGGER rtt打印,因此将SEGGER RTT也放置在lib目录下,便于调试打印:
1void log(const char* fmt, ...)
2{
3 va_list va;
4 va_start(va, fmt);
5 SEGGER_RTT_vprintf(0,fmt,&va);
6 va_end(va);
7}
2.1 EEPROM 写数据
1static inline bool m24cxx_write_one_byte(uint8_t addr, uint8_t data)
2{
3 uint8_t buffer[2];
4
5 buffer[0] = addr;
6 buffer[1] = data;
7 return sw_i2c_transfer(M24CXX_DEVICE_ADDR, buffer, 2, 0, 0);
8}
2.2 EEPROM 读数据
1static inline bool m24cxx_read_one_byte(uint8_t addr, uint8_t *ptr)
2{
3 return sw_i2c_transfer(M24CXX_DEVICE_ADDR, &addr, 1, ptr, 1);
4}
3 连接硬件进行测试
将EEPROM模块与开发的I2C引脚连接好:
image-20220925192735228
先执行程序进行写入:
1int main(void)
2{
3 sys_clock_setup();
4
5 log("init sw i2c.\\r\\n");
6
7 sw_i2c_init();
8
9 log("eeprom read testing.\\r\\n");
10
11 uint8_t addr = 0x01;
12 uint8_t read_data=0;
13 uint8_t write_data = 0x88;
14
15 #if 0
16 m24cxx_read_one_byte(addr,&read_data);
17
18 if(read_data == write_data){
19 log("eeprom write ok\\r\\n");
20 }else{
21 log("ERR:EEPROM write failed.\\r\\n");
22 }
23
24 #endif
25
26 log("eeprom write.\\r\\n");
27
28 m24cxx_write_one_byte(addr, write_data);
29
30 delay_ms(5);//wait write done
31
32 while(1){/*do nothing*/}///!!!not go here.
33 return 0;
34}
然后将读取部分的程序注释打开:
1 #if 1
2 m24cxx_read_one_byte(addr,&read_data);
3
4 if(read_data == write_data){
5 log("eeprom write ok\\r\\n");
6 }else{
7 log("ERR:EEPROM write failed.\\r\\n");
8 }
9
10 #endif
将开发板断电后重新上电可以看到测试正确:
image-20220927211659396
注:写入数据根据M24C02的数据手册,其 Write time 为5ms,因此写入后要进行等待其写入完成。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
STM32
+关注
关注
2265文章
10870浏览量
354682 -
仿真器
+关注
关注
14文章
1016浏览量
83621 -
EEPROM
+关注
关注
9文章
1010浏览量
81395 -
串口
+关注
关注
14文章
1543浏览量
76157 -
开发板
+关注
关注
25文章
4933浏览量
97157
发布评论请先 登录
相关推荐
帮忙解释下M24C02 PRE脚是干什么用的!
ST M24C02 PRE脚是干什么用的?我这样对吗?地址A0。用at24c02 程序读写都没问题,但是用M24C02地址都写不进去。M24C02
发表于 02-06 15:38
STM32G0开发笔记:FreeRTOS和FreeModbus库使用
使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为FreeRTOS和FreeModbus库使用。
STM32G0开发笔记:使用FreeRTOS系统的队列Queue
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为使用FreeRTOS系统的队列Queue。
STM32G0开发笔记:GPIO接按键的使用方式
使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
评论