OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6587|回复: 2

eeprom I2C dma读写error

[复制链接]

0

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-5-17
在线时间
3 小时
发表于 2021-5-30 17:23:12 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 Audience80 于 2021-5-30 17:25 编辑

普通阻塞MEM读写ok
mem dma就读写错误

代码:
main.c > main()
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4.         uint8_t wirte_data[10] = "222";
  5.         uint8_t read_data[10];
  6.   /* USER CODE END 1 */

  7.   /* MCU Configuration--------------------------------------------------------*/

  8.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  9.   HAL_Init();

  10.   /* USER CODE BEGIN Init */

  11.   /* USER CODE END Init */

  12.   /* Configure the system clock */
  13.   SystemClock_Config();

  14.   /* USER CODE BEGIN SysInit */

  15.   /* USER CODE END SysInit */

  16.   /* Initialize all configured peripherals */
  17.   MX_GPIO_Init();
  18.   MX_DMA_Init();
  19.   MX_SPI2_Init();
  20.   MX_USART1_UART_Init();
  21.   MX_I2C1_Init();
  22.   MX_I2C3_Init();
  23.   MX_ADC1_Init();
  24.   /* USER CODE BEGIN 2 */
  25.         gui_init();
  26.         
  27.         eeprom_write(0x0aa0, wirte_data, 10);
  28.         
  29.         HAL_Delay(100);
  30.         
  31.         eeprom_read(0x0aa0, read_data, 10);
  32.         
  33.         printf("wirte_data: %s\n", wirte_data);
  34.         printf("read_data: %s\n", read_data);
  35.         
  36.   /* USER CODE END 2 */

  37.   /* Infinite loop */
  38.   /* USER CODE BEGIN WHILE */
  39.   while (1)
  40.   {
  41.     /* USER CODE END WHILE */

  42.     /* USER CODE BEGIN 3 */
  43.                
  44.                 gui_start(); // 界面轮循
  45.                 key_start(); // 按键扫描
  46.   }
  47.   /* USER CODE END 3 */
  48. }
复制代码


eeprom.c
  1. #include "eeprom.h"
  2. #include "i2c.h"

  3. #define EEPROM_ADDR 0xa0

  4. // at24c256 需要14/15位地址才能表示
  5. void eeprom_write(uint16_t eeprom_mem_addr, uint8_t* data, uint16_t leng)
  6. {
  7.         //if(HAL_I2C_Mem_Write_DMA(&hi2c3, EEPROM_ADDR, eeprom_mem_addr, I2C_MEMADD_SIZE_16BIT, data, leng) == HAL_OK)
  8.         if(HAL_I2C_Mem_Write(&hi2c3, EEPROM_ADDR, eeprom_mem_addr, I2C_MEMADD_SIZE_16BIT, data, leng, 2) == HAL_OK)
  9.         {
  10.                 printf("write ok\n");
  11.         } else printf("write error\n");
  12. }

  13. void eeprom_read(uint16_t eeprom_mem_addr, uint8_t* data, uint16_t leng)
  14. {
  15.         //if(HAL_I2C_Mem_Read_DMA(&hi2c3, EEPROM_ADDR|0x01, eeprom_mem_addr, I2C_MEMADD_SIZE_16BIT, data, leng) == HAL_OK)
  16.         if(HAL_I2C_Mem_Read(&hi2c3, EEPROM_ADDR|0x01, eeprom_mem_addr, I2C_MEMADD_SIZE_16BIT, data, leng, 2) == HAL_OK)
  17.         {
  18.                 printf("read ok\n");
  19.         }
  20.         else
  21.         {
  22.                 printf("read error\n");

  23.                 switch(hi2c3.ErrorCode)
  24.                 {
  25.                         case HAL_I2C_ERROR_INVALID_PARAM:
  26.                                 printf("HAL_I2C_ERROR_INVALID_PARAM\n");
  27.                                 break;
  28.                         case HAL_I2C_ERROR_DMA_PARAM:
  29.                                 printf("HAL_I2C_ERROR_DMA_PARAM\n");
  30.                                 break;
  31.                         case HAL_I2C_ERROR_DMA:
  32.                                 printf("HAL_I2C_ERROR_DMA\n");
  33.                                 break;
  34.                 }
  35.                 printf("hi2c3.ErrorCod %d\n", hi2c3.ErrorCode);
  36.         }
  37. }

复制代码
串口输出:
[17:08:16.862]收←◆write ok

[17:08:16.963]收←◆read error
hi2c3.ErrorCod 0
wirte_data: 222
read_data:

[17:08:41.060]收←◆write ok

[17:08:41.163]收←◆read ok
wirte_data: 222
read_data: 222

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4891
金钱
4891
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-5-31 11:11:08 | 显示全部楼层
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-5-31 12:40:09 | 显示全部楼层
帮顶  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 05:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表