当前位置: 首页 > news >正文

C语言 Cortex-A7核 IIC实验

iic.h

#ifndef __IIC_H__
#define __IIC_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
/* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_SCL ---> PF14* I2C1_SDA ---> PF15** */#define SET_SDA_OUT     do{GPIOF->MODER &= (~(0x3 << 30)); \GPIOF->MODER |= (0x1 << 30);}while(0)
#define SET_SDA_IN      do{GPIOF->MODER &= (~(0x3 << 30));}while(0)#define I2C_SCL_H       do{GPIOF->BSRR |= (0x1 << 14);}while(0)
#define I2C_SCL_L       do{GPIOF->BRR |= (0x1 << 14);}while(0)#define I2C_SDA_H       do{GPIOF->BSRR |= (0x1 << 15);}while(0)
#define I2C_SDA_L       do{GPIOF->BRR |= (0x1 << 15);}while(0)#define I2C_SDA_READ    (GPIOF->IDR & (0x1 << 15))void delay_us(void);
void i2c_init(void);
void i2c_start(void);
void i2c_stop(void);
void i2c_write_byte(unsigned char  dat);
unsigned char i2c_read_byte(unsigned char ack);
unsigned char i2c_wait_ack(void);       
void i2c_ack(void);
void i2c_nack(void);#endif 

iic.c

#include "iic.h"extern void printf(const char* fmt, ...);
/** 函数名 : delay_us* 函数功能:延时函数* 函数参数:无* 函数返回值:无* */
void delay_us(void)
{unsigned int i = 2000;while(i--);
}
/** 函数名 : i2c_init* 函数功能: i2C总线引脚的初始化, 通用输出,推挽输出,输出速度,* 函数参数:无* 函数返回值:无* */
void i2c_init(void)
{// 使能GPIOF端口的时钟RCC->MP_AHB4ENSETR |= (0x1 << 5);// 设置PF14,PF15引脚为通用的输出功能GPIOF->MODER &= (~(0xF << 28));GPIOF->MODER |= (0x5 << 28);// 设置PF14, PF15引脚为推挽输出GPIOF->OTYPER &= (~(0x3 << 14));// 设置PF14, PF15引脚为高速输出GPIOF->OSPEEDR |= (0xF << 28);// 设置PF14, PF15引脚的禁止上拉和下拉GPIOF->PUPDR &= (~(0xF << 28));// 空闲状态SDA和SCL拉高 I2C_SCL_H;I2C_SDA_H;
}/** 函数名:i2c_start* 函数功能:模拟i2c开始信号的时序* 函数参数:无* 函数返回值:无* */
void i2c_start(void)
{/** 开始信号:时钟在高电平期间,数据线从高到低的变化*     --------* SCL         \*              --------   时钟线*     ----* SDA     \*          --------       数据线* */	SET_SDA_OUT;  //1.设置数据线为输出模式I2C_SCL_H;    //2.SCL为高电平delay_us();I2C_SDA_H;    //3.SDA为高电平delay_us();I2C_SDA_L;    //4.SDA为低电平I2C_SCL_L;    //5.起始信号产生之后,总线处于占用状态
}/** 函数名:i2c_stop* 函数功能:模拟i2c停止信号的时序* 函数参数:无* 函数返回值:无* */void i2c_stop(void)
{/** 停止信号 : 时钟在高电平期间,数据线从低到高的变化 *             ----------* SCL        /              时钟线*    --------*    ---         -------* SDA   X       /           数据线*    --- -------* */SET_SDA_OUT;  //1.设置数据线为输出模式I2C_SCL_L;    //2.SCL为低电平,改变数据线上数据delay_us();I2C_SDA_L;    //3.SDA为低电平delay_us();I2C_SCL_H;    //4.SCL为高电平delay_us();I2C_SDA_H;    //5.SDA为高电平,停止信号产生之后,总线处于空闲状态delay_us();
}/** 函数名: i2c_write_byte* 函数功能:主机向i2c总线上的从设备写8bits数据* 函数参数:dat : 等待发送的字节数据* 函数返回值: 无* */void i2c_write_byte(unsigned char dat)
{/** 数据信号:时钟在低电平期间,发送器向数据线上写入数据* 			时钟在高电平期间,接收器从数据线上读取数据 *      ----          --------* 	SCL     \        /        \*           --------          --------*      -------- ------------------ ---* 	SDA         X                  X*      -------- ------------------ ---**      先发送高位在发送低位 * */unsigned int i;SET_SDA_OUT; //1.设置数据为输出模式//2.for循环 条件 实现for(i=0;i<8;i++){I2C_SCL_L;  //3.SCL为低电平期间,发送器向数据线上写入数据 时钟线拉低才能写入数据delay_us();//4. 先发送高位再发送低位if(dat & 0x80)I2C_SDA_H; //向数据线上写入高电平elseI2C_SDA_L; //向数据线上写入低电平delay_us();I2C_SCL_H;  //SCL拉高,等待从机从数据线上读取数据delay_us();delay_us();dat <<= 1;}
}/** 函数名:i2c_read_byte* 函数功能: 主机从i2c总线上的从设备读8bits数据, *          主机发送一个应答或者非应答信号* 函数参数: 0 : 应答信号   1 : 非应答信号* 函数返回值:读到的有效数据** */
unsigned char i2c_read_byte(unsigned char ack)
{/** 数据信号:时钟在低电平期间,发送器向数据线上写入数据* 			时钟在高电平期间,接收器从数据线上读取数据 *      ----          --------* 	SCL     \        /        \*           --------          --------*      -------- ------------------ ---* 	SDA         X                  X*      -------- ------------------ ---**      先接收高位, 在接收低位 * */unsigned int i;unsigned char dat;SET_SDA_IN; //0.设置数据线为输入模式for(i=0;i<8;i++){I2C_SCL_L;  //1.SCL拉低,保证主机向数据线上,写入数据完成delay_us();delay_us();I2C_SCL_H;; //2.SCL拉高,数据线上数据保持稳定,从数据线上读取数据delay_us();dat <<= 1;   //3.移位,放到if前面if(I2C_SDA_READ)dat |= 1; //4.从总线上读取数据为1elsedat |= 0; //5.从总线上读取数据为0delay_us();}if(!ack)i2c_ack();  //6.主机产生应答信号elsei2c_nack(); //7.主机产生非应答信号return dat;     //8.读取到数据	
}
/** 函数名: i2c_wait_ack* 函数功能: 主机作为发送器时,等待接收器返回的应答信号* 函数参数:无* 函数返回值:*					0:接收到的应答信号*                  1:接收到的非应答信号* */
unsigned char i2c_wait_ack(void)
{/** 主机发送一个字节之后,从机给主机返回一个应答信号**                   -----------* SCL              /   M:读    \*     -------------             --------*     --- ---- --------------------* SDA    X    X*     ---      --------------------*     主  释   从机    主机*     机  放   向数据  读数据线*         总   线写    上的数据*         线   数据* */	I2C_SCL_L; //1.SCL为低电平期间,总线上数据允许发生变化delay_us();I2C_SDA_H; //2.SDA为高电平,将数据线释放(空闲)delay_us();SET_SDA_IN; //3.设置SDA为输入模式delay_us();I2C_SCL_H; //4.SCL为高电平,从总线上读取数据delay_us();//5.判断读取数据为0/1,   0 : 应答信号   1 : 非应答信号if(I2C_SDA_READ)return 1; //非应答信号//6.总线处于占用状态I2C_SCL_L;return 0; //应答信号} 
/** 函数名: iic_ack* 函数功能: 主机作为接收器时,给发送器发送应答信号* 函数参数:无* 函数返回值:无* */
void i2c_ack(void)
{/*            --------* SCL       /        \*    -------          ------*    ---* SDA   X *    --- -------------* */SET_SDA_OUT; //1.设置数据线为输出模式I2C_SCL_L;   //2.在SCL为低电平期间,改变数据线上数据delay_us();I2C_SDA_L;   //3.数据线为低电平,应答信号delay_us();I2C_SCL_H;   //4.在SCL为高电平期间,从数据线读取数据delay_us();delay_us();I2C_SCL_L;   //5.总线处于占用状态
}
/** 函数名: iic_nack* 函数功能: 主机作为接收器时,给发送器发送非应答信号* 函数参数:无* 函数返回值:无* */
void i2c_nack(void)
{/*            --------* SCL       /        \*    -------          ------*    --- ---------------* SDA   X *    --- * */SET_SDA_OUT; //1.设置数据线为输出模式I2C_SCL_L;   //2.在SCL为低电平期间,改变数据线上数据delay_us();I2C_SDA_H;   //3.数据线为低电平,非应答信号delay_us();I2C_SCL_H;   //4.在SCL为高电平期间,从数据线读取数据delay_us();delay_us();I2C_SCL_L;   //5.总线处于占用状态
}

si7006.h

#ifndef __SI7006_H__
#define __SI7006_H__#include "iic.h"
#define        SI7006_SLAVE      0x40void si7006_init(void);//参数1:从机地址  参数2:湿度命令码
unsigned short si7006_read_hum_data(unsigned char slave_addr,unsigned char reg_addr);//参数1:从机地址  参数2:温度命令码
short si7006_read_temp_data(unsigned char slave_addr, unsigned char reg_addr);#endif //__SI7006_H__

si7006.c

#include "iic.h"
#include "si7006.h"
extern void delay_ms(unsigned int ms);
/** 函数名:si7006_init* 函数功能:SI7006芯片的初始化* 函数参数:无* 函数返回值:无* 地址:0xE6 初始化值:0x3A
*/
void si7006_init(void)
{i2c_init();i2c_start(); //起始信号i2c_write_byte(SI7006_SLAVE << 1 | 0); //寻址 寻找从机 0x40 + 写(0) = i2c_wait_ack(); //等待应答信号i2c_write_byte(0xE6); //发送写寄存器地址i2c_wait_ack(); //等待应答信号i2c_write_byte(0x3A); //写入初始化的值i2c_wait_ack(); //等待应答信号i2c_stop(); //停止信号
}/** 函数名:si7006_read_data* 函数功能:读取SI7006的转换结果* 函数参数:*     slave_addr : 从机地址*     reg_addr : 寄存器地址* 函数返回值:无
*///参数1:从机地址  参数2:湿度命令码
unsigned short si7006_read_hum_data(unsigned char slave_addr,unsigned char reg_addr)
{unsigned short dat;unsigned char dat_h; //高8位值unsigned char dat_l; //低8位值i2c_start(); //起始信号i2c_write_byte(slave_addr << 1 | 0); //寻址 从机地址 + 写i2c_wait_ack(); //等待应答信号i2c_write_byte(reg_addr); //命令码i2c_wait_ack(); //等待应答信号i2c_start(); //起始信号i2c_write_byte(slave_addr << 1 | 1); //寻址 从机地址 + 读i2c_wait_ack();delay_ms(1000); //延时函数dat_h = i2c_read_byte(0); //读取高8位数据dat_l = i2c_read_byte(1); //读取低8位数据i2c_stop(); //停止信号// 将高8位和低8位进行拼接dat = dat_h;dat <<= 8;dat |= dat_l;return dat;	
}//参数1:从机地址  参数2:温度命令码
short si7006_read_temp_data(unsigned char slave_addr, unsigned char reg_addr)
{short dat;                                                     unsigned char dat_h; //高8位值                                 unsigned char dat_l; //低8位值                                 i2c_start(); //起始信号                                        i2c_write_byte(slave_addr << 1 | 0); //寻址 从机地址 + 写      i2c_wait_ack(); //等待应答信号                                 i2c_write_byte(reg_addr); // 命令码                            i2c_wait_ack(); //等待应答信号                                 i2c_start(); //起始信号                                        i2c_write_byte(slave_addr << 1 | 1); //寻址 从机地址 + 读      i2c_wait_ack(); //等待应答信号                                 delay_ms(1000);//延时函数                                      dat_h = i2c_read_byte(0); //读取高8位数据                      dat_l = i2c_read_byte(1); //读取低8位数据                      i2c_stop(); //停止信号                                         // 将高8位和低8位进行拼接                                      dat = dat_h;                                                   dat <<= 8;                                                     dat |= dat_l;                                                  return dat;
}

main.c

#include "iic.h"#include "si7006.h"extern void printf(const char *fmt, ...);void delay_ms(int ms){int i,j;for(i = 0; i < ms;i++)for (j = 0; j < 1800; j++);}int main(){short temp;unsigned short hum;si7006_init(); //si7006初始化while(1){hum = si7006_read_hum_data(SI7006_SLAVE,0xE5);temp = si7006_read_temp_data(SI7006_SLAVE,0xE3);printf("hum = % d\n",125*hum/65536-6);printf("temp = %d\n",176*temp/65536-47);;}return 0;
}

效果呈现

相关文章:

C语言 Cortex-A7核 IIC实验

iic.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" /* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_SCL ---> PF14* I2C1_SDA ---> PF15** */#define SET_SDA_OUT do{…...

【每日一题】2769. 找出最大的可达成数字

2769. 找出最大的可达成数字 - 力扣&#xff08;LeetCode&#xff09; 给你两个整数 num 和 t 。 如果整数 x 可以在执行下述操作不超过 t 次的情况下变为与 num 相等&#xff0c;则称其为 可达成数字 &#xff1a; 每次操作将 x 的值增加或减少 1 &#xff0c;同时可以选择将 …...

开源电子合同签署平台小程序源码 在线签署电子合同小程序源码 合同在线签署源码

聚合市场上各类电子合同解决方案商&#xff0c;你无需一个一个的对接电子合同厂商&#xff0c; 费时&#xff0c;费力&#xff0c;因为这个工作我们已经做了适配&#xff0c;你只需要一个接口就能使用我们的所有服务商&#xff0c; 同时你还可以享受我们的接口渠道价格。 Mini-…...

36 二叉树中序遍历

二叉树中序遍历 题解1 递归题解2 迭代 给定一个二叉树的根节点 root &#xff0c;返回它的 中序 遍历 。 提示&#xff1a; 树中节点数目在范围 [0, 100] 内-100 < Node.val < 100 进阶: 递归算法很简单&#xff0c;你可以通过迭代算法完成吗&#xff1f; 题解1 递归…...

广州华锐互动:VR结绳逃生训练模拟真实火灾场景,增强训练沉浸感

随着科技的发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已被广泛应用到各个领域&#xff0c;其中包括消防训练。VR消防结绳训练是一种创新的消防训练方式&#xff0c;它通过虚拟现实技术模拟真实的灭火场景&#xff0c;使消防人员能够在无风险的环境中进行高强度的…...

Flink安装及简单使用

目录 转载处&#xff08;个人用最新1.17.1测试&#xff09; 依赖环境 安装包下载地址 Flink本地模式搭建 安装 启动集群 查看WebUI 停止集群 Flink Standalone搭建 安装 修改flink-conf.yaml配置文件 修改workers文件 复制Flink安装文件到其他服务器 启动集群 查…...

QT信号槽

目录 信号槽的概念 按钮的常用信号 自定义槽函数 自定义信号函数 自定义槽和信号注意的事项 信号与槽的拓展 lambda表达式 信号槽的概念 信号槽是Qt框架引以为豪的机制之一。所谓信号槽&#xff0c;实际就是观察者模式。当某个事件发生之后&#xff0c;比如&#xff0c…...

Spring Boot 技术架构图(InsCode AI 创作助手辅助)

Spring Boot 技术架构是一种用于构建现代应用程序的框架&#xff0c;它可以与各种前端、代理、网关、业务服务、中间件、存储、持续集成和容器服务集成在一起&#xff0c;以创建功能强大的应用程序。 源文件下载链接&#xff01;&#xff01;&#xff01;&#xff01;&#xff…...

python使用mitmproxy和mitmdump抓包在手机上抓包(三)

现在手机的使用率远超过电脑&#xff0c;所以这篇记录用mitmproxy抓手机包&#xff0c;实现手机流量监控。 环境&#xff1a;win10 64位&#xff0c;Python 3.10.4&#xff0c;雷电模拟器4.0.78&#xff0c;android版本7.1.2&#xff08;设置-拉至最底部-关于平板电脑&#xf…...

react create-react-app v5 从零搭建(使用 npm run eject)

前言&#xff1a; 好久没用 create-react-app做项目了&#xff0c;这次为了个h5项目&#xff0c;就几个页面&#xff0c;决定自己搭建一个&#xff08;ps:mmp 好久没用&#xff0c;搭建的时候遇到一堆问题&#xff09;。 我之前都是使用 umi 。后台管理系统的项目 使用 antd-…...

在微信小程序中跳转到另一个小程序(多种实现方式)

方式一&#xff1a; 配置要跳转的appid和小程序页面路径 wx.navigateToMiniProgram({appId: 目标小程序appid,path: 目标小程序页面路径,//develop开发版&#xff1b;trial体验版&#xff1b;release正式版envVersion: release, success(res) {// 打开成功console.log("跳…...

beanstalkd 启动跟停止【经常使用 nohup 和 配合来启动程序,如: nohup ./test 同时免疫SIGINT和SIGHUP信号】

启动命令&#xff1a;  nohup /usr/bin/beanstalkd -l 0.0.0.0 -p 11300 & >> /dev/null 2>&1 正常启动后&#xff0c;利用 【lsof -i:11300】查看 该服务是否正常启动 停止命令&#xff1a; /etc/init.d/beanstalkd stop 正常停止后&#xff0c;利用 【l…...

企业年报API的应用:从金融投资到市场研究

引言 在数字化时代&#xff0c;企业年报不再仅仅是一份财务报告&#xff0c;它们变成了宝贵的信息资源&#xff0c;可用于各种商业应用。企业年报API已经改变了金融投资和市场研究的方式&#xff0c;使得从中获取数据变得更加高效和灵活。本文将深入探讨企业年报API的应用&…...

基于Matlab实现评价型模型求解方法(附上源码+数据)

评价型模型求解方法是一种用于评估和比较不同方案或决策的方法。本文将介绍如何使用Matlab来实现评价型模型求解方法&#xff0c;并通过一个简单的案例研究来说明其应用。 文章目录 引言方法案例研究结果分析结论更多源码 引言 评价型模型求解方法在决策分析、风险评估和性能…...

Prettier - Code formatter格式化规则文件

文章目录 前言安装使用 前言 先前公司在规范代码时,由于个人业务繁忙跟技术总监是后端出身用的IDEA不熟悉vsCode;以及大多数时都自己一个人负责一个项目,当时并不看重这些;最近在整理vue3tsvite的脚手架模板(平时工作用的react),开始整理格式化代码,方便之后 vue 和 react 中应…...

用C++实现文件读写操作

文件读写操作是C编程中非常常见的操作之一。下面是一个简单的示例&#xff0c;演示如何使用C读取和写入文件。 读取文件&#xff1a; #include <iostream> #include <fstream>int main() {std::ifstream inputFile("input.txt");if (!inputFile) {std:…...

【我的创作纪念日】使用pix2pixgan实现barts2020数据集的处理(完整版本)

使用pix2pixgan &#xff08;pytorch)实现T1 -> T2的基本代码 使用 https://github.com/eriklindernoren/PyTorch-GAN/ 这里面的pix2pixgan代码进行实现。 进去之后我们需要重新处理数据集&#xff0c;并且源代码里面先训练的生成器&#xff0c;后训练鉴别器。 一般情况下…...

背包算法(Knapsack problem)

背包算法&#xff08;Knapsack problem&#xff09;是一种常见的动态规划问题&#xff0c;它的基本思想是利用动态规划思想求解给定重量和价值下的最优解。具体来说&#xff0c;背包算法用于解决一个整数背包问题&#xff0c;即给定一组物品&#xff0c;每个物品有自己的重量和…...

“童”趣迎国庆 安全“童”行-柿铺梁坡社区开展迎国庆活动

“金秋十月好心境&#xff0c;举国欢腾迎国庆。”国庆节来临之际&#xff0c;为进一步加强梁坡社区未成年人爱国主义教育&#xff0c;丰富文化生活&#xff0c;营造热烈喜庆、文明和谐的节日氛围。9月24日上午&#xff0c;樊城区柿铺街道梁坡社区新时代文明实践站联合襄阳市和时…...

常用压缩解压缩命令

在Linux中常见的压缩格式有.zip、.rar、.tar.gz.、tar.bz2等压缩格式。不同的压缩格式需要用不同的压缩命令和工具。须知&#xff0c;在Linux系统中.tar.gz为标准格式的压缩和解压缩格式&#xff0c;因此本文也会着重讲解tar.gz格式压缩包的压缩和解压缩命令。须知&#xff0c;…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...