使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为EEPROM M24C02的使用方法。
1 新建项目在PIO的Home页面新建项目,项目名称eeprom,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3;
- 1upload_protocol = cmsis-dap
- 2debug_tool = cmsis-dap
复制代码
2 编写程序首先从之前的I2C项目中拷贝sw_i2c库文件夹到当前项目的lib目录下:
本次不使用串口打印,直接使用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引脚连接好:
先执行程序进行写入: - 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
复制代码将开发板断电后重新上电可以看到测试正确:
注:写入数据根据M24C02的数据手册,其 Write time 为5ms,因此写入后要进行等待其写入完成;
|