这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » feiante 的ST L035进程贴(24C02)

共4条 1/1 1 跳转至

feiante 的ST L035进程贴(24C02)

专家
2015-12-07 09:07:43     打赏

今天学习一下IIC的功能,通过IIC操作外部24C02

第一步:引脚配置:

第二步:选择I2C1的模式为I2C

第三步:配置I2C的具体参数

第四步,完成程序编写:

24C02驱动函数如下:

#include "24C02.h"
#include "i2c.h"

uint8_t T_buf[EE_SIZE]; /* 数据测试用缓冲区 16KB */
uint8_t R_buf[EE_SIZE];
/*
********************************************************************************
* 函 数 名: ee_CheckOk
* 功能说明: 判断EERPOM是否正常
* 形    参:  无
* 返 回 值: 0 表示正常, 1 表示不正常
********************************************************************************
*/
uint8_t EE_CheckOk(void)
{
uint8_t i;
i=HAL_I2C_IsDeviceReady(&hi2c1, EE_DEV_ADDR ,1, 100);
}

/*
********************************************************************************
* 函 数 名: ee_Write
* 功能说明: 向24C02写入数据
* 形    参: MemAddress: 要写入的EEPROM的地址
*  Size: 要写入的数据数量
* 返 回 值: 0 表示正常, 1 表示不正常
********************************************************************************
*/
void ee_Write(uint16_t MemAddress, uint16_t Size)
{
uint16_t i;
for (i=0; i<EE_SIZE; i++)
{
T_buf[i]=i;
}
//HAL_I2C_Mem_Write_DMA(&hi2c1, EE_DEV_ADDR, MemAddress, I2C_MEMADD_SIZE_8BIT,T_buf,Size);
HAL_I2C_Mem_Write(&hi2c1,EE_DEV_ADDR,0,I2C_MEMADD_SIZE_8BIT,T_buf,Size,100);
}

/*
********************************************************************************
* 函 数 名: ee_Read
* 功能说明: 从24C02读出数据
* 形    参: MemAddress: 开始读EEPROM的地址
*  Size: 要读出的数据数量
* 返 回 值: 0 表示正常, 1 表示不正常
********************************************************************************
*/
void ee_Read(uint16_t MemAddress, uint16_t Size)
{
//HAL_I2C_Mem_Read(&hi2c1, EE_DEV_ADDR, MemAddress, I2C_MEMADD_SIZE_8BIT,R_buf,Size,100);
HAL_I2C_Mem_Read(&hi2c1,EE_DEV_ADDR,0,I2C_MEMADD_SIZE_8BIT,aRxBuffer,100,100);
}

/*
********************************************************************************
* 函 数 名: ee_Erase
* 功能说明: 擦除24C02的数据
* 形    参: MemAddress: 要写入的EEPROM的地址
*  Size: 要写入的数据数量
* 返 回 值: 0 表示正常, 1 表示不正常
********************************************************************************
*/
void ee_Erase(uint16_t MemAddress, uint16_t Size)
{
uint16_t i;
for (i=0; i<EE_SIZE; i++)
{
T_buf[i]=0xFF;
}
HAL_I2C_Mem_Write_DMA(&hi2c1, EE_DEV_ADDR, MemAddress, I2C_MEMADD_SIZE_8BIT,T_buf,Size);
}

主函数main.c函数如下:

/* Includes ------------------------------------------------------------------*/
#include "stm32f0xx_hal.h"
#include "dma.h"
#include "i2c.h"
#include "usart.h"
#include "gpio.h"

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */
uint8_t TxData[]="没有检测到EEPROM!\r\n";
uint8_t RxData[8];
/* USER CODE END 0 */

#define EEPROM_ADDRESS 0xA0
/* USER CODE BEGIN PV */
uint8_t aTxBuffer[] = "321asdfghjkl";
uint8_t aRxBuffer[100];

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

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

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_I2C1_Init();
  MX_USART1_UART_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

HAL_UART_Receive_DMA(&huart1, RxData, 8); /* 这句要在while循环中 */

/*if (EE_CheckOk()) // 如果没有检测到24C02,每隔2秒检测一次 //
{
HAL_UART_Transmit_DMA(&huart1, TxData, sizeof(TxData));
HAL_Delay(2000);
}*/
  }
  /* USER CODE END 3 */

}




专家
2015-12-07 11:13:16     打赏
2楼
不错

院士
2015-12-10 21:47:14     打赏
3楼

话说ST公司的这款芯片在IIC接口是否还存在bug


另 第一行第6个图标就是“插入代码”功能,这样分享的代码就非常舒服了。


助工
2015-12-29 13:30:30     打赏
4楼
注意使用插入代码功能

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]