/ Q( U3 q5 Q7 [3 r
- HAL_StatusTypeDef HAL_I2C_Mem_Read_AT24CM02(I2C_HandleTypeDef *hi2c, uint32_t MemAddress18bit, uint8_t *pData, uint16_t Size, uint32_t Timeout); // 根据AT24CM02重新封装读取函数
3 p+ T; c s0 W7 x0 P - HAL_StatusTypeDef HAL_I2C_Mem_Write_AT24CM02(I2C_HandleTypeDef *hi2c, uint32_t MemAddress18bit, uint8_t *pData, uint16_t Size, uint32_t Timeout); // 根据AT24CM02重新封装写入函数/ Q N; d8 y' b: ~) }4 R+ J
复制代码
; c0 D' b% v2 ?; H: ]- I' u% z U! u# l/ n. Y0 v
上面两个函数声明放在下面两行中间,避免重新配置STM32CubeMX后被覆盖删除。
, ~9 R7 X- d- K/* USER CODE BEGIN PFP */
" b& `) P J' S3 j2 V8 r/* USER CODE END PFP */ " ~% ?; {* l% j! y
6 F' U" K7 ~& Q7 D" m- HAL_StatusTypeDef HAL_I2C_Mem_Read_AT24CM02(I2C_HandleTypeDef *hi2c, uint32_t MemAddress18bit, uint8_t *pData, uint16_t Size, uint32_t Timeout) // 根据AT24CM02重新封装读取函数. p; ` x2 B3 d5 {
- {
v) G, P' L4 |# x - //" q% ]2 N m$ A+ \
- return HAL_I2C_Mem_Read(hi2c,(((MemAddress18bit/65536)<<1)+0xA0),(MemAddress18bit%65536),I2C_MEMADD_SIZE_16BIT,pData,Size,Timeout);
% A4 O' b6 ?# L - }
: N1 W$ G6 }& N+ p4 ? - O* K7 g% i% F9 e, v* `
- HAL_StatusTypeDef HAL_I2C_Mem_Write_AT24CM02(I2C_HandleTypeDef *hi2c, uint32_t MemAddress18bit, uint8_t *pData, uint16_t Size, uint32_t Timeout) // 根据AT24CM02重新封装写入函数
! F' B4 |" G$ f6 v - {5 N* ~# v7 C0 n
- //
7 x8 r" c$ J# q! ^ s" ^ - return HAL_I2C_Mem_Write(hi2c,(((MemAddress18bit/65536)<<1)+0xA1),(MemAddress18bit%65536),I2C_MEMADD_SIZE_16BIT,pData,Size,Timeout);! D5 j" {! a" Q* r7 m1 [
- }
复制代码 1 |3 s, D9 E$ w( w
' w* {; I: S! U f) e! W
: A$ Q% N6 Y. t# K6 @1 [9 p后面两个函数放在“/* USER CODE END 4 */”上面,“/* USER CODE BEGIN 4 */”下面,避免重新配置STM32CubeMX后被覆盖删除。 7 T. k) E1 r! B
使用前提是: 软件上用 STM32CubeMX 配置工程,选择HAL库。 硬件上芯片的A2引脚不接入IO脚使用,如果需要用到2片AT24CM02的同学当是留家庭作业自己回家做了,这里就不讲了^_^
: ^8 _7 e3 x) M! B5 Q
之前发了个求助贴,得到大佬们的提示,终于明白是怎么回事了。所以做好分享出来,让同行少折腾。
! @, h; c0 K! Y9 l; j |
& u+ {* S% q- H) W
- Z J% O$ k" m* m( I
然后打印输出的结果是:: A8 o" }+ v9 l% i! m. p" x
* @; B! _7 A# o5 s0 a G" K+ i
AT24CM02 第262144个字节中的数据是:0xff, }! k3 _% ?- h' A
AT24CM02 第131072个字节中的数据是:0xff
AT24CM02 第65536个字节中的数据是:0xff
AT24CM02 第262144个字节中的数据是:0xab
AT24CM02 第131072个字节中的数据是:0xff! D% {- B, Y; w
AT24CM02 第65536个字节中的数据是:0xff% D2 L' N2 i% `( a# A8 _" ]
AT24CM02 第262144个字节中的数据是:0xab
AT24CM02 第131072个字节中的数据是:0xcd
AT24CM02 第65536个字节中的数据是:0xff: Q, n" w% U4 \
AT24CM02 第262144个字节中的数据是:0xab
AT24CM02 第131072个字节中的数据是:0xcd3 c. ^/ C' I; _7 F* w$ M+ d
AT24CM02 第65536个字节中的数据是:0xef
AT24CM02 第262144个字节中的数据是:0xff, k+ V% _5 y0 B1 {
AT24CM02 第131072个字节中的数据是:0xff
AT24CM02 第65536个字节中的数据是:0xff
补充说明一下,上面我开启了看门狗,所以用了喂狗处理,不用看门狗的话用 __nop(); 也是一样的! m: t, Z! B) }+ [( }, P/ l
1.代码太累赘,重复的太多 封装性太差
2.代码不规范,格式上实在不敢恭维0 F7 z2 ]) `3 H: E
3 Z# G6 c( F( G+ P8 C4 I* R
让我评价打分10分给3分
有请这位大佬展示一下要是你怎么封装?
注意一下 沙发里的代码作用是演示怎样代入使用,并且通过打印证实了并没有只用到低16位地址的存储空间,8 _& R5 A8 L: H1 j+ S
主贴上的无论是 读取 还是 写入 函数 都只有 return 一行代码,并且保持HAL官方库的风格。
所以把可以直接替换的改了一下封装函数的入口形参,保持与官方一致,方便已有工程的EEPROM读写代码直接替换函数名0 G5 a+ n' r( w0 b' i3 m
8 c0 L" s; B8 o, L9 q* L