STM32的硬件I2C与AT24C16

发布者:AdventureSeeker最新更新时间:2018-06-02 来源: eefocus关键字:STM32  硬件I2C  AT24C16 手机看文章 扫描二维码
随时随地手机看文章

CubeMX的配置

下面这些是我修改过的地方,只要注意I2C和系统时钟等基础配置即可,不想说太多,以图为言 
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述 
这里写图片描述

AT24C64的自制库

AT24C64.c


#include "AT24C64.h"

#include "i2c.h"


void AT24CXX_Write(u16 reg_address,u8 data)

{

    static HAL_StatusTypeDef i;

    i = HAL_I2C_Mem_Write(&hi2c1,AT24CXX_DEV_ADDRESS,reg_address,I2C_MEMADD_SIZE_16BIT,&data,1,100);

    AT24CXX_DELAY_MS(5);    //AT24C64的最长写入时间是5ms

}


u8 AT24CXX_Read(u16 reg_address)

{

    u8 data = 0;

    u8 temp[2];

    temp[0] = reg_address>>8;

    temp[1] = reg_address;

    //HAL_I2C_Master_Transmit(&hi2c1,AT24CXX,temp,2,100);

    //HAL_I2C_Master_Receive(&hi2c1,AT24CXX,&data,1,100);

    HAL_I2C_Mem_Read(&hi2c1,AT24CXX_DEV_ADDRESS,reg_address,I2C_MEMADD_SIZE_16BIT,&data,2,100);

    return data;

}


AT24C64.h


/* 

 * File:   AT24C64.h

 * Author: Administrator

 * AT24C64相关函数,需要制定IIC基本函数

 * Created on 2015年8月7日, 下午3:52

 */


#ifndef __AT24C64_H

#define __AT24C64_H


#include "bsp.h"


#define AT24CXX_DEV_ADDRESS     0xA0

#define AT24CXX_DELAY_MS        osDelay


typedef uint8_t u8;

typedef uint16_t u16;

typedef uint32_t u32;


void AT24CXX_Write(u16 reg_address,u8 data);

u8 AT24CXX_Read(u16 reg_address);


#endif  /* __AT24C64_H */



值得注意的是AT24C64的地址是16位的,并且内部写EPPROM空间的时间最长为5ms,之前被这里坑了很久,差点以为I2C的库函数存在问题,所以上方的代码中尝试了多种读取参数的方式。 

这里写图片描述


主循环代码


/* Infinite loop */

  for(;;)

  {

      AT24CXX_Write(0x0001,0xA2);

      osDelay(4);

      i = AT24CXX_Read(0x0001);

      i = i+1;

      if(0 != i)    usb_printf((const char*)&i);

    osDelay(100);

  }


USB转串口的数据输出如下 

这里写图片描述

关键字:STM32  硬件I2C  AT24C16 引用地址:STM32的硬件I2C与AT24C16

上一篇:关于CubeMX的串口全双工接收发送锁死的问题
下一篇:STM32F407使用USB作虚拟串口出现黄感叹号

推荐阅读最新更新时间:2024-03-16 16:04

STM32通用定时器使用详解
1.通用定时器基本介绍 通用定时器包括TIM2、TIM3、TIM4和TIM5 STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。 每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。 定时器可以进行定时器基本定时,输出4路PWM,输入捕获 本文详细介绍这三个功能并且利用定时器3并且示例代码使用 2.开发环境 开发平台:keil5 单片机:STM32F103ZET6 3.基本定时功能 3.1定时器时钟来源分析 STM32部分时钟树: 3.1.1 首先我们我们的系统时钟(SYSCLK 72MHz) 经过AHB分频器给APB1外设,但是
[单片机]
<font color='red'>STM32</font>通用定时器使用详解
STM32进入HardFault_Handler的调试方法
在编写STM32程序代码时由于自己的粗心会发现有时候程序跑着跑着就进入了 HardFault_Handler中断,按照经验来说进入HardFault_Handler故障的原因主要有两个方面: 1:内存溢出或则访问越界。 2:堆栈溢出。 发生异常后我们可以首先查看LR寄存器的值,确认当前使用的堆栈是MSP还是PSP,然后找到相对应的堆栈指针,并在内存中查看相对应堆栈的内容,内核将R0~R3,R12,LR,PC,XPRS寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。那么Cortex-M3 内核HardFault错误调试定位方法有: 方法1 如何精确定位出问题代码的所在位置: 以访问越界为例:(对STM32F1
[单片机]
<font color='red'>STM32</font>进入HardFault_Handler的调试方法
STM32定时器5的输入捕获实验
此处使用的普中开发板,实验内容定时器5输入捕获通道1的高电平时长。 软件实现方法: 定时器5主要使用了两个功能: ①时基单元;②输入捕获; 从下文可知,通过定时器5捕获到相应的极性(eg:上升沿或高电平and so on)后,保存计数器的当前值到捕获/比较寄存器(TIMx_CCRx)中。而后,通过第二次捕获成功后,通过差值就可以求出该极性的周期或保持时间。此实验室捕获高电平的时间,通过先捕获上升沿再捕获下降沿,即可求出一个高电平的时长。 数据手册描述如下: 在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存 器(TIMx_CCRx)中。当发生捕获事件时,相应的CCxIF
[单片机]
<font color='red'>STM32</font>定时器5的输入捕获实验
STM32温度传感器的使用和计算
STM32内置一个温度传感器,通过ADC_IN16这个通道可以读出温度传感器的电压。在STM32的技术参考手册中给出了一个计算公式: Temperature (in ℃) = {(V25 - VSENSE) / Avg_Slope} + 25 公式中的Vsense就是在ADC_IN16读到的数值。Avg_Slope就是温度与ADC数值转换的斜率。 设想一个XY坐标,X轴为ADC的电压读数,Y轴为温度,两轴之间有一条直线代表了温度与转换电压的关系;在这条直线上如果X轴电压为V25时,Y轴即为25℃;当读出的电压是其它数值时,即读出的电压是Vsense时,使用这个公式就可以得到温度的数值。 在STM32F103xx
[单片机]
STM32定时器高效时间片学习
常规单片机运行程序如下: while(1) { ..... } 类似于一种顺序执行的方法,执行起来较为死板,一旦某一行发生错误的时候就会造成整个程序的跑飞,基于以上传统开发所有的缺点。可以设置相关的定时器,进行某种时间片的控制。 首先设置定时器的中断,按照正常的配置相关的时间基点。 例如:将预装载寄存器存放20-1,将预分频寄存器装360-1,计数器没溢出一次形成的是0.5ms的时间,以此为时间基准,使能溢出中断。 之后可以在中断服务函数内设置相关的计数全局变量,每中断一次,对相对应的时间变量+1: 05ms++; 1ms++; ... ... 1000ms++; 在主函数之中根据相关的全局变量,可以每到达以此时间点变执行相
[单片机]
嵌入式STM32学习:I2C-读写EEPROM2
bsp_i2c_ee.h #ifndef __I2C_EE_H #define __I2C_EE_H #include stm32f4xx.h /* AT24C01/02每页有8个字节 */ #define I2C_PageSize 8 /* AT24C04/08A/16A每页有16个字节 */ //#define I2C_PageSize 16 /* STM32 I2C 快速模式 */ #define I2C_Speed 400000 /* 这个地址只要与STM32外挂的I2C器件地址不一样即可 */ #define I2C_OWN_ADDRESS7
[单片机]
ST全新软件包可支持开发Azure RTOS,加快智能产品研发
半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM) 加大对基于Microsoft®Azure RTOS平台的下一代智能物联网设备的开发支持,发布面向产品研发团队的功能丰富的STM32Cube扩展包系列的首个软件包。 意法半导体和微软于2020年宣布,开发者可以从意法半导体的STM32Cube *生态系统直接使用Azure RTOS套件。基于这项合作计划,新软件包提供更多的应用代码示例,帮助工程师克服常见的开发挑战,缩短产品上市时间。 软件包免版税,开发人员可以立即使用和自定义代码示例。 意法半导体副总裁、微控制器事业部总经理Ricardo de Sa Earp表示: “
[单片机]
ST全新软件包可支持开发Azure RTOS,加快智能产品研发
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved