文章目录
一、STM32CubeMX 配置
首先打开STM32CubeMX 选择芯片型号建立工程,我这里选择STM32F03ZET6(正点原子战舰V3) 具体新建工程的过程不再赘述,太基础。
首先配置System Core目录下的SYS和RCC选项卡如下图:
配置SYS下的Debug为Serial Wire
配置RCC下的HSE(高速时钟)
我这里配置为外部晶振Crystal/Ceramic Resonator,具体根据板子的硬件配置设置
IIC总线接口配置
STM32F103ZET6有两路硬件IIC,配置Connectivity选项卡下的I2C1为I2C基本参数(parameter Setting)保持默认不变,DMA和NVIC暂不配置,以后单独讲
串口配置
为了方便测试代码效果看现象,增加一个串口配置输出相关信息。
串口配置老生常谈了,上篇文章有详细过程,包括串口的中断和DMA,链接放下面自己去看,这里不讲了
时钟树
这个测试比较简单,只用到IIC和USART两个外设,所以STM32CubeMX的配置至此就结束了,设置项目名称,文件路径,IDE,和代码风格就可以生成代码了,具体设置点这里看STM32CubeMX 配置部分的最后有详细说明。
二、代码实现(上才艺)
EEPROM的地址
#define ADDR_AT24C02_Write 0xA0
#define ADDR_AT24C02_Read 0xA1
首先是define了EEPROM芯片AT24C02的读写地址,为什么就是0xA0和0xA1呢,为什么不是别的噻,听我细细道来,这就跟芯片的电路连接有关系了,如下图:
EEPROM的写地址定义为:1 0 1 0 A0 A1 A2 0
EEPROM的读地址定义为:1 0 1 0 A0 A1 A2 1
这其中A0~A2就代表芯片的A0到A2三个引脚的电平状态,我这里都接了地,所以A0 A1 A2都是0,所以带进去就分别是0xA0 和0xA1,具体可以看AT24C02的datasheet。
代码
(1)首先我定义了两个数组,分别用于往EEPROM里写数据和存储从EEPROM里读出的数据
uint8_t I2C_Buffer_Write[