完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用的是 Psoc4 Creator4.4 在 ide 和 CY8C4247AZI-M485(CY8CKIT-044 PSOC 4 M 系列)开发套件中,我使用了 EEPROM 示例代码,而根据 CY8C4247AZI-M485 数据表,mcu 中没有 EEPROM。
能否告诉我 EEPROM 在哪里,我的代码在哪个位置写入和读取等。 示例代码 : #include"rtc.h"#include // 包括用于字符串操作的字符串库 /* 处理错误的函数原型 */ void HandleError(void); /* Em_EEPROM 的逻辑大小 */ #define LOGICAL_EEPROM_SIZE 15u #define LOGICAL_EEPROM_START 0u /* 复位计数器在 Em_EEPROM 中的位置 */ #define RESET_COUNT_LOCAtiON 13u #define RESET_COUNT_SIZE 2u /* ASCII"9" */ #define ASCII_NINE 0x39 /* ASCII"0" */ #define ASCII_ZERO 0x30 /* ASCII"P" */ #define ASCII_P 0x50 /* EEPROM 和 UART 的返回状态 */ cy_en_em_eeprom_status_t eepromReturnValue; /* 工作闪存中的 EEPROM 存储,在 Em_EEPROM.c 中定义 */ #if defined (__ICCARM__) #pragma data_alignment = CY_FLASH_SIZEOF_ROW const uint8_t Em_EEPROM_em_EepromStorage[Em_EEPROM_PHYSICAL_SIZE] = {0u}; #else const uint8_t Em_EEPROM_em_EepromStorage[Em_EEPROM_PHYSICAL_SIZE] __ALIGNED(CY_FLASH_SIZEOF_ROW) = {0u}; #endif /* defined (__ICCARM__) */ /* 用于保存 EEPROM 读写数据的 RAM 数组 */ uint8_t eepromArray[LOGICAL_EEPROM_SIZE]; char stringToWrite[] ="Hello World"; // 定义要写入的字符串 int main(void) { __enable_irq(); /* 使用内存位置的起始地址初始化 EEPROM */ eepromReturnValue = Em_EEPROM_Init((uint32_t)Em_EEPROM_em_EepromStorage); if(eepromReturnValue != CY_EM_EEPROM_SUCCESS) { HandleError(); } UART_PutString("EmEEPROM demo nr"); /* 从 EEPROM 存储器中读取 */ eepromReturnValue = Em_EEPROM_Read(LOGICAL_EEPROM_START, eepromArray, LOGICAL_EEPROM_SIZE); if(eepromReturnValue != CY_EM_EEPROM_SUCCESS) { HandleError(); } /* 如果 EEPROM 的第一个字节不是 "P",则写入数据 */ if(eepromArray[0] != ASCII_P) { /* 将字符串写入 EEPROM */ eepromReturnValue = Em_EEPROM_Write(LOGICAL_EEPROM_START, (uint8_t*)stringToWrite, strlen(stringToWrite)); if(eepromReturnValue != CY_EM_EEPROM_SUCCESS) { HandleError(); } } /* 否则,更新计数器 */ else { /* 读取 EEPROM 内容 */ eepromReturnValue = Em_EEPROM_Read(LOGICAL_EEPROM_START, eepromArray, LOGICAL_EEPROM_SIZE); if(eepromReturnValue != CY_EM_EEPROM_SUCCESS) { HandleError(); } /* 计数器递增 1 */ eepromArray[RESET_COUNT_LOCATION+1]++; /* Counter is in ASCII, handle overflow */ if(eepromArray[RESET_COUNT_LOCATION+1]> ASCII_NINE) { /* 设置低位数字为 0 */ eepromArray[RESET_COUNT_LOCATION+1] = ASCII_ZERO; */ eepromArray[RESET_COUNT_LOCATION]++; /* 只递增到 99 */ if(eepromArray[RESET_COUNT_LOCATION]> ASCII_NINE) { eepromArray[RESET_COUNT_LOCATION] = ASCII_NINE; eepromArray[RESET_COUNT_LOCATION+1] = ASCII_NINE; } } /* 更新 EEPROM 中的计数器值 */ eepromReturnValue = Em_EEPROM_Write(RESET_COUNT_LOCATION, eepromArray[RESET_COUNT_LOCATION], RESET_COUNT_SIZE); if(eepromReturnValue != CY_EM_EEPROM_SUCCESS) { HandleError(); } } /* 读取写入后 EEPROM 的内容 */ eepromReturnValue = Em_EEPROM_Read(LOGICAL_EEPROM_START, eepromArray, LOGICAL_EEPROM_SIZE); if(eepromReturnValue != CY_EM_EEPROM_SUCCESS) { HandleError(); } /* 打印 EEPROM 内容到控制台 */ UART_PutArray(eepromArray, LOGICAL_EEPROM_SIZE); UART_PutString("nr"); for (;;) { } } /* 处理错误的函数 */ void HandleError(void) { UART_PutString("Error! nr"); /* 禁用所有中断 */ __disable_irq(); /* 无限循环 */ while(1u) {} } |
|
相关推荐
1个回答
|
|
PSoC4 MCU 不使用 EEPROM,而是使用 FLASH 存储器。 FLASH 和 EEPROM 在实际操作中类似,但 FLASH 需要块读/写,而 EEPROM 需要字节读/写。
|
|
|
|
只有小组成员才能发言,加入小组>>
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5453 浏览 2 评论
4076 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3593 浏览 9 评论
1204 浏览 8 评论
3496 浏览 7 评论
414浏览 2评论
246浏览 2评论
354浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5472浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
418浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 09:11 , Processed in 1.043939 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号