本帖最后由 gaoyang9992006 于 2023-6-11 15:19 编辑
芯片配置的方式查看以下帖子
https://bbs.21ic.com/icview-3306594-1-1.html
假设这里我们生成好了配置代码,接下来通过cubeMX配置建立一个I2C的工程。
然后将配置头文件添加进来
#include "Si5351A-RevB-Registers.h"
并且在main开头加入SI5351A的地址宏
#define SI5351A_ADDRESS 0x60
然后就是用HAL库函数写入配置了。
比如使用以下操作存储器写入函数操作,可以一个函数里面传入内存地址与内存写入的数据,因为我们的配置并非完整的连续地址,所以我们选择一次写入一个字节数据。
for(int8_t i=0;i<SI5351A_REVB_REG_CONFIG_NUM_REGS;i++)
{
HAL_I2C_Mem_Write( &hi2c1 , SI5351A_ADDRESS<<1 , si5351a_revb_registers[i].address ,1 ,&si5351a_revb_registers[i].value , 1 , 10 );
}
还有一种方式,通过以下函数实现,每次写入2个数据,其中第一个数据为地址,第二个数据为地址要存入的配置内容
for(int8_t i=0;i<SI5351A_REVB_REG_CONFIG_NUM_REGS;i++)
{
uint8_t b_dat[2];
b_dat[0] = si5351a_revb_registers[i].address;
b_dat[1] = si5351a_revb_registers[i].value;
HAL_I2C_Master_Transmit( &hi2c1 , SI5351A_ADDRESS<<1 , b_dat , 2 , 10 );
}
注意,HAL库函数中关于地址的定义,是8位的,也就是如果为写操作,要在芯片7位地址后补个0,如果是读操作,要在7位地址后补个1。这里可能与其他厂家的库函数是不一致的,请注意这一点,否则你的操作将会无效。
|