详解si5338 si53xx 设计使用及STM32 iic驱动设计

news2024/9/25 19:14:31

背景

在实际项目中经常使用si5338 si53xx,进行多路时钟的倍频以生成想要的时钟信号,但是针对si5338 si53xx设计使用缺少相关的资料,本文详解si5338 si53xx 设计使用及STM32 iic驱动设计,本文使用工程在项目中得到测试,在多个项目中同时使用。这里做个详解,加速今后的项目开发。本文使用的资源如下图所示

ClockBuilderPro_project------------>> 使用ClockBuilder Pro生成的工程,及配置头文件

ClockBuilder-Pro-Installer.zip------->>ClockBuilder Pro安装文件

si5338.rar------------------------>>stm32cubeide代码工程

详解si5338 si53xx 设计使用及STM32 iic驱动设计.pdf----->>使用说明文档

详解si5338si53xx设计使用及STM32iic驱动设计全套资料原理图代码使用手册ClockBuilder设计工程资源-CSDN文库

硬件设计

这里还是先要把硬件原理图给出来,因为后面si5338 si53xx,都需要根据原理图进行参数的配置,这里可以看出输入时钟25Mhz,支持四路时钟输出,I2C_LSB管脚接地,电压电压1.8v。

连接STM32F407如下表所示:

Label

Si5338A

STM32F407

备注

STM32_1V8_I2C2_SCL

SCL

PF1

STM32_1V8_I2C2_SCL电平转3.3v后连接PF1

STM32_1V8_I2C2_SDA

SDA

PF0

STM32_1V8_I2C2_SDA电平转3.3v后连接PF0

使用ClockBuilder Pro生成寄存器配置列表

安装ClockBuilder Pro

si5338 si53xx的寄存器配置需要采用官方提供的ClockBuilder Pro,下面详述步骤,首先安装ClockBuilder Pro,如下图所示:

解压ClockBuilder-Pro-Installer.zip

双击ClockBuilder-Pro-2.45.exe,都选择默认配置,即可完成软件安装

ClockBuilder Pro有更新的版本了,这里采用ClockBuilder-Pro-2.45,读者也可以去下载最新的版本使用,基本上步骤都是一样的。

新建工程

 

输入时钟配置 

输出时钟配置

导出配置寄存器文件 

选择C头文件的格式,记得这里生成的头文件,可以直接复制到软件设计中提供侧工程,头文件。 

完成配置头文件导出

配置文件内容复制到工程

复制Si5338-RevB-Registers.h文件内容,替换如下工程中register_map.h中所有内容,编译工程即可。

软件设计

软件采用stm32cubeide,配置,使用串口1作为调试串口,波特率配置9600,参考代码

/* USER CODE BEGIN PV */

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{

	while((USART1->SR&0x40)==0){};
		USART1->DR = ch;

    return ch;
}
/* USER CODE END PV */

 时钟采用8Mhz外部时钟倍频

仿真器采用sw接口

配置GPIO PF0 PF1为默认输出

 采用IO模拟IIC读写si53xx数据,参考代码

static void si5338_configure(void)
{
	uint32_t counter, timeout = 100;
   	uint8_t curr_chip_val, clear_curr_val, clear_new_val, combined, reg;
   	Reg_Data curr;
	//----------------------------------------------------------------
	// See Si5338 datasheet Figure 9 for more details on this procedure
	
	// delay added to wait for Si5338 to be ready to communicate 
	// after turning on
	///counter = 0;
	///while(counter < SI5338_DELAY) { counter++; }

	I2C_ByteWrite(230, 0x10);                   //OEB_ALL = 1
	I2C_ByteWrite(241, 0xE5);                   //DIS_LOL = 1

	//for all the register values in the Reg_Store array
	//get each value and mask and apply it to the Si5338
	for(counter=0; counter<NUM_REGS_MAX; counter++){
			
		curr = Reg_Store[counter];
		
		if(curr.Reg_Mask != 0x00) { 

			if(curr.Reg_Mask == 0xFF) { 
				// do a write transaction only 
				// since the mask is all ones			
				I2C_ByteWrite(curr.Reg_Addr, curr.Reg_Val);
			
			} else {		
				//do a read-modify-write
				curr_chip_val = I2C_ByteRead(curr.Reg_Addr);
				clear_curr_val = curr_chip_val & ~curr.Reg_Mask;
				clear_new_val = curr.Reg_Val & curr.Reg_Mask;
				combined = clear_new_val | clear_curr_val;		
				I2C_ByteWrite(curr.Reg_Addr, combined);
			}
		}
	}

	// check LOS alarm for the xtal input 
	// on IN1 and IN2 (and IN3 if necessary) - 
	// change this mask if using inputs on IN4, IN5, IN6
	reg = I2C_ByteRead(218) & LOS_MASK;
	while(reg != 0){
		reg = I2C_ByteRead(218) & LOS_MASK;
		timeout --;
		//osDelay(1);
		delay_ms(1);
		if(timeout == 0){
			printf("si5338_configure timeout1\n");
			break;
		}					
	}

	I2C_ByteWrite(49, I2C_ByteRead(49) & 0x7F); //FCAL_OVRD_EN = 0
	I2C_ByteWrite(246, 2);                      //soft reset
	I2C_ByteWrite(241, 0x65);                   //DIS_LOL = 0

	// wait for Si5338 to be ready after calibration (ie, soft reset)
	///counter = 0;
	///while(counter < SI5338_DELAY) { counter++; }
	///counter = 0;
	///while(counter < SI5338_DELAY) { counter++; }
	//osDelay(24);
	delay_ms(24);

	//make sure the device locked by checking PLL_LOL and SYS_CAL
	timeout = 100;
	reg = I2C_ByteRead(218) & LOCK_MASK;
	while(reg != 0){
		reg = I2C_ByteRead(218) & LOCK_MASK;
		timeout --;
		//msleep(1);
		if(timeout == 0){
			printf("si5338_configure timeout2\n");
			break;
		}				
	}

	//copy FCAL values
	I2C_ByteWrite(45, I2C_ByteRead(235));
	I2C_ByteWrite(46, I2C_ByteRead(236));
	// clear bits 0 and 1 from 47 and 
	// combine with bits 0 and 1 from 237
	reg = (I2C_ByteRead(47) & 0xFC) | (I2C_ByteRead(237) & 3);
	I2C_ByteWrite(47, reg);

	I2C_ByteWrite(49, I2C_ByteRead(49) | 0x80); // FCAL_OVRD_EN = 1
	I2C_ByteWrite(230, 0x00);                   // OEB_ALL = 0

	printf("si5338_configure success!\n");
	//------------------------------------------------------------


}

测试记录

能够正确配置si5338,串口1,log打印如下图所示

使用工程及其他资料如下:

ClockBuilderPro_project------------>> 使用ClockBuilder Pro生成的工程,及配置头文件

ClockBuilder-Pro-Installer.zip------->>ClockBuilder Pro安装文件

si5338.rar------------------------>>stm32cubeide代码工程

详解si5338 si53xx 设计使用及STM32 iic驱动设计.pdf----->>使用说明文档

详解si5338si53xx设计使用及STM32iic驱动设计全套资料原理图代码使用手册ClockBuilder设计工程资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2104764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于人体关节夹角的人体动作识别算法(代码+数据集)

为此本文提出了一个基于人体关节夹角的人体动作识别算法&#xff0c;主要做了以下工作&#xff1a; &#xff08;1&#xff09;提出了一个可解释性强&#xff0c;耗费算力较少且鲁棒性较高的基于人体关节夹角的人体动作序列的特征抽取方法。 &#xff08;2&#xff09;本文所使…

PyInstaller实战:打包Python应用并间接指定输出文件名

在深入探讨如何使用PyInstaller打包Python应用并指定输出文件名称的过程中&#xff0c;我们不仅可以了解基本的命令行操作和参数设置&#xff0c;还可以深入了解PyInstaller的工作机制、状态变化以及它在处理复杂Python项目时的优势。下面&#xff0c;我们将详细展开这一过程&a…

提升多跳问答中的语言模型知识编辑能力

人工智能咨询培训老师叶梓 转载标明出处 大模型在静态知识库的更新上存在局限&#xff0c;特别是在面对需要多步骤推理的多跳问题时&#xff0c;难以提供准确和最新的回答。为了解决这一问题&#xff0c;来自美国佐治亚大学、纽约大学、莱斯大学、北卡罗来纳州立大学等机构的研…

STM32F103C8----GPIO(跟着江科大学STM32)

一&#xff0c;GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff08;0V&#xff09;&#xff0c;部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff0c;用以驱动…

idea2021安装教程与常见配置(可激活至2099年)

idea2021安装教程与常见配置(可激活至2099年) 下载 官网下载地址:https://www.jetbrains.com/zh-cn/idea/download/other.html 这里我们选择压缩包安装方式,选择2021.3 - Windows x64 ZIP Archive (zip),也可以选择exe安装方式 安装 解压缩安装方式 创建非中文目录D:\idea…

Win32绕过UAC弹窗获取管理员权限

在早些年写一些桌面软件时&#xff0c;需要管理员权限&#xff0c;但是又不想UAC弹窗&#xff0c;所以一般是直接将UAC的级别拉到最低&#xff0c;或者直接禁用UAC的相关功能。 什么是UAC(User Account Control) 用户帐户控制 (UAC) 是一项 Windows 安全功能&#xff0c;旨在保…

行走挖机多路比例阀控制放大器

挖掘机比例多路阀是挖掘机液压系统中的关键部件&#xff0c;它负责控制挖掘机各执行元件的运动方向、速度和力矩&#xff0c;从而影响挖掘机的作业效果。比例多路阀由多个阀块组成&#xff0c;其中比例控制阀由BEUEC比例放大器控制。每个阀块都有特定功能&#xff0c;如换向阀用…

昇腾大模型性能分析思路

性能分析 模型训练优化流程 我们根据性能问题的场景&#xff0c;按照单机和集群场景进行分类&#xff0c;再明确性能问题属于哪一类&#xff0c;明确好性能问题背景之后&#xff0c;才方便进行下一步问题的定位&#xff1b; 在明确问题背景后&#xff0c;参考性能分析工具介绍…

004、架构_详解(重点)

GoldenDB 分布式数据库框架 DN和RDB增加了备节点;引入新模块CM,且GTM、MDS、PM、CM都增加备节点;MDS、PM、CM、RDB被统一在了管理节点之中;GTM和MDS间多了一条连线,因为GTM的切换由MDS把控;初步系统架构mysqld:一般称为DB节点,负责单个节点的数据处理; dbproxy:一般…

FreeRTOS学习笔记—③RTOS内存管理篇(正在更新中)

二、RTOS的核心功能 RTOS的核心功能块主要分为任务管理、内核管理、时间管理以及通信管理4部分&#xff0c;框架图如下所示&#xff1a; &#xff08;1&#xff09;任务管理&#xff1a;负责管理和调度任务的执行&#xff0c;确保系统中的任务能够按照预期运行。 &#xff08;…

【SpringBoot】使用Nacos服务注册发现与配置管理

前提&#xff1a;需要提前部署好nacos服务&#xff0c;这里可以参考我的文章&#xff1a;Windows下Nacos安装与配置 0. 版本信息 Spring Boot3.2.8Spring Cloud2023.0.1Spring Cloud alibaba2023.0.1.0nacos2.3.2本地安装的nacos2.3.0 Spring Boot、Spring Cloud、Spring Clo…

黑盒闪清 v2.9.9 体积小巧,简洁高效的手机清理神器

黑盒闪清APP是安卓手机上的一款优质文件管理器&#xff0c;拥有存储分析、文件分类、大文件扫描、空文件夹扫描等功能&#xff0c;应用无广告、无推送&#xff0c;完全免费使用&#xff0c;让你手机中的文件管理就跟在电脑上管理一样简单。 链接&#xff1a;https://pan.quark…

C语言学习笔记 Day16(文件管理--下)

Day16 内容梳理&#xff1a; C语言学习笔记 Day14&#xff08;文件管理--上&#xff09;-CSDN博客 C语言学习笔记 Day15&#xff08;文件管理--中&#xff09;-CSDN博客 目录 Chapter 10 文件操作 10.5 文件状态 10.6 文件的随机读写 fseek()、rewind() &#xff08;1&…

对同一文件夹下所有excel表进行相同操作(数据填充、删除、合并)

背景引入&#xff1a;如图所示&#xff0c;笔者需要对数十个表格的银行日记账工作簿合并成一个工作簿&#xff0c;以便与本月银行流水进行核对。 为了方便银行日记账与银行流水进行核对&#xff0c;需要再每个村或小组的表格中&#xff0c;将村或小组的名称放在J列。 clear c…

Java | Leetcode Java题解之第392题判断子序列

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isSubsequence(String s, String t) {int n s.length(), m t.length();int[][] f new int[m 1][26];for (int i 0; i < 26; i) {f[m][i] m;}for (int i m - 1; i > 0; i--) {for (int j 0; j…

9月4日C++作业

#include <iostream> #include <string> using namespace std; class Human {private:string name;int age;public:Human(){} //无参构造函数//有参构造函数Human(string i_name,int i_age):name(i_name),age(i_age){cout<<"调用了Human有参构…

一篇文章讲清楚什么是Spring AOP

目录 1、什么是代理&#xff1f; 1.1静态代理 1.2动态代理 2、什么是AOP&#xff1f; 3、AOP术语名词介绍 4、Spring AOP框架使用教程 5、Spring AOP框架细节讲解 1、什么是代理&#xff1f; 在讲解AOP之前&#xff0c;我们要先了解下什么是代理。 代理是二十四种设计…

Flutter集成Firebase框架

本文档的插件版本 flutter&#xff1a;3.19.4dart版本&#xff1a;3.3.2 firebase_core&#xff1a;2.30.0 firebase&#xff1a;13.7.3flutterfire&#xff1a;1.0.0 前言 Flutter集成Firebase框架要完成以下内容 在Firebase网页端创建一个项目在终端全局安装Firebase工具&…

中断管理笔记

1、异常与中断的基本概念 异常是指任何打断处理器正常执行&#xff0c;并且迫使处理器进入一个由有特权的特殊指令执行的事件。 异常可以分为两类&#xff1a;同步异常和异步异常。 由内部事件&#xff08;像处理器指令运行产生的事件&#xff09;引起的异常称为同步异常。异…

雅思7分相当于六级多少?雅思考试怎么备考才能到7分?

雅思7分相当于六级多少&#xff1f;雅思考试怎么备考才能到7分? 六级500分也不能和雅思7分相提并论&#xff0c;毕竟两者压根不在一个层级。楼主两月自学雅思获得8分&#xff0c;系统总结了雅思速成的提分秘籍&#xff0c;跟着我的方法走&#xff0c;两月屠鸭7分问题不大。1.6…