使用Platformio平臺(tái)的libopencm3開(kāi)發(fā)框架來(lái)開(kāi)發(fā)STM32G0,以下為EEPROM M24C02的使用方法。
1 新建項(xiàng)目
- 建立eeprom項(xiàng)目
在PIO的Home頁(yè)面新建項(xiàng)目,項(xiàng)目名稱(chēng)eeprom,選擇開(kāi)發(fā)板為 MonkeyPi_STM32_G070RB,開(kāi)發(fā)框架選擇libopencm3;
- 項(xiàng)目建立完成后在src目錄下新建main.c主程序文件;
- 修改下載和調(diào)試方式,這里開(kāi)發(fā)板使用的是DAPLink仿真器,因此修改platformio.ini文件如下:
1upload_protocol = cmsis-dap
2debug_tool = cmsis-dap
2 編寫(xiě)程序
首先從之前的I2C項(xiàng)目中拷貝sw_i2c庫(kù)文件夾到當(dāng)前項(xiàng)目的lib目錄下:
image-20220925192507020
本次不使用串口打印,直接使用SEGGER rtt打印,因此將SEGGER RTT也放置在lib目錄下,便于調(diào)試打?。?/p>
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 寫(xiě)數(shù)據(jù)
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 讀數(shù)據(jù)
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 連接硬件進(jìn)行測(cè)試
將EEPROM模塊與開(kāi)發(fā)的I2C引腳連接好:
image-20220925192735228
先執(zhí)行程序進(jìn)行寫(xiě)入:
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}
然后將讀取部分的程序注釋打開(kāi):
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
將開(kāi)發(fā)板斷電后重新上電可以看到測(cè)試正確:
image-20220927211659396
注:寫(xiě)入數(shù)據(jù)根據(jù)M24C02的數(shù)據(jù)手冊(cè),其 Write time 為5ms,因此寫(xiě)入后要進(jìn)行等待其寫(xiě)入完成。
-
STM32
+關(guān)注
關(guān)注
2295文章
11032瀏覽量
365223 -
仿真器
+關(guān)注
關(guān)注
14文章
1039瀏覽量
85442 -
EEPROM
+關(guān)注
關(guān)注
9瀏覽量
83802 -
串口
+關(guān)注
關(guān)注
15文章
1588瀏覽量
79992 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5687瀏覽量
104947
發(fā)布評(píng)論請(qǐng)先 登錄
幫忙解釋下M24C02 PRE腳是干什么用的!
STM32G0開(kāi)發(fā)筆記:FreeRTOS和FreeModbus庫(kù)使用

STM32G0開(kāi)發(fā)筆記:FreeRTOS和CLI組件使用

STM32G0開(kāi)發(fā)筆記:使用FreeRTOS系統(tǒng)的隊(duì)列Queue
STM32G0開(kāi)發(fā)筆記:使用FreeRTOS系統(tǒng)

STM32G0開(kāi)發(fā)筆記:使用ADC進(jìn)行NTC溫度采集

STM32G0開(kāi)發(fā)筆記:用PWM來(lái)實(shí)現(xiàn)LED呼吸燈效果

STM32G0開(kāi)發(fā)筆記:SD卡模塊的使用方法

STM32G0開(kāi)發(fā)筆記:SPI接口的基本使用

STM32G0開(kāi)發(fā)筆記:多通道ADC與DMA的使用

STM32G0開(kāi)發(fā)筆記:定時(shí)器timer的基本使用方法

STM32G0開(kāi)發(fā)筆記:串口中斷的使用
STM32G0開(kāi)發(fā)筆記:GPIO接按鍵的使用方式
STM32G0開(kāi)發(fā)筆記:LED燈示例

STM32G0開(kāi)發(fā)筆記:使用libopencm3庫(kù)

評(píng)論