大学的网站设计重庆装修公司哪家口碑最好

pingmian/2025/10/7 21:20:10/文章来源:
大学的网站设计,重庆装修公司哪家口碑最好,怎么申请网址,网站建设运维自查问题清单ADC工作原理#xff1a; 1、输入通道#xff1a; 2、转换序列#xff1a; A/D转换被组织为两组#xff1a;规则组#xff08;常规转换组#xff09;和注入组#xff08;注入转换组#xff09; 规则组最多可以有16个转换#xff0c;注入组最多有4个转换 规则组和注入… ADC工作原理 1、输入通道 2、转换序列 A/D转换被组织为两组规则组常规转换组和注入组注入转换组 规则组最多可以有16个转换注入组最多有4个转换 规则组和注入组执行优先级对比 3、触发源 触发转换的方法有两种 1ADON位触发转换(仅限F1系列) 当ADC_CR2寄存器的ADON位为1时再单独给ADON位写1只能启动规则组转换 2外部事件触发转换 外部事件触发转换分为规则组外部触发和注入组外部触发 4、转换时间 5、数据寄存器 6、中断 7、单次转换模式和连续转换模式 8、扫描模式 不同模式组合的作用 单通道ADC采集实验 实验需要用杜邦线把RV1和ADC给连接起来 实验要求: 1功能描述 通过ADC1通道1PA1采集电位器的电压并显示ADC转换的数字量及换算后的电压值 2确定最小刻度 VREF 3.3V à 0V≤VIN≤3.3V  最小刻度 3.3 / 4096   F4/F7/H7系列还需要考虑ADC分辨率 3确定转换时间 采样时间239.5个ADC时钟周期为例可以得到转换时间为21us 4模式组合 单次转换模式、不使用扫描模式 配置步骤 1配置ADC工作参数、ADC校准 HAL_ADC_Init()、HAL_ADCEx_Calibration_Start() 2ADC MSP初始化 HAL_ADC_MspInit()     配置NVIC、CLOCK、GPIO等 3配置ADC相应通道相关参数 HAL_ADC_ConfigChannel() 4启动A/D转换 HAL_ADC_Start() 5等待规则通道转换完成 HAL_ADC_PollForConversion() 6获取规则通道A/D转换结果 HAL_ADC_GetValue() 相关HAL库函数介绍 关键结构体介绍 typedef struct { ADC_TypeDef *Instance; /* ADC 寄存器基地址 */ ADC_InitTypeDef Init; /* ADC 参数初始化结构体变量 */ DMA_HandleTypeDef *DMA_Handle; /* DMA 配置结构体 */…… } ADC_HandleTypeDef;typedef struct{ uint32_t DataAlign; /* 设置数据的对齐方式 */ uint32_t ScanConvMode; /* 扫描模式 */ FunctionalState ContinuousConvMode; /* 开启单次转换模式或者连续转换模式 */ uint32_t NbrOfConversion; /* 设置转换通道数目 */ FunctionalState DiscontinuousConvMode; /* 是否使用规则通道组间断模式 */ uint32_t NbrOfDiscConversion; /* 配置间断模式的规则通道个数 */ uint32_t ExternalTrigConv; /* ADC 外部触发源选择 */ } ADC_InitTypeDef;typedef struct { uint32_t Channel; /* ADC 转换通道*/ uint32_t Rank; /* ADC 转换顺序 */ uint32_t SamplingTime; /* ADC 采样周期 */ } ADC_ChannelConfTypeDef;原理图 源码 adc.c #include ./BSP/ADC/adc.hADC_HandleTypeDef g_adc_handle;/* ADC单通道*/ void adc_init(void) {ADC_ChannelConfTypeDef adc_ch_conf {0};g_adc_handle.Instance ADC1;g_adc_handle.Init.DataAlign ADC_DATAALIGN_RIGHT;g_adc_handle.Init.ScanConvMode ADC_SCAN_DISABLE;g_adc_handle.Init.ContinuousConvMode DISABLE;g_adc_handle.Init.NbrOfConversion 1;g_adc_handle.Init.DiscontinuousConvMode DISABLE;g_adc_handle.Init.NbrOfDiscConversion 0;g_adc_handle.Init.ExternalTrigConv ADC_SOFTWARE_START;//软件触发HAL_ADC_Init(g_adc_handle);HAL_ADCEx_Calibration_Start(g_adc_handle);adc_ch_conf.Channel ADC_CHANNEL_1;adc_ch_conf.Rank ADC_REGULAR_RANK_1;adc_ch_conf.SamplingTime ADC_SAMPLETIME_239CYCLES_5;HAL_ADC_ConfigChannel(g_adc_handle, adc_ch_conf); } /* ADC MSP初始换函数*/ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) {if(hadc-Instance ADC1){RCC_PeriphCLKInitTypeDef adc_clk_init {0};GPIO_InitTypeDef gpio_init_struct;__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_ADC1_CLK_ENABLE();gpio_init_struct.Pin GPIO_PIN_1;gpio_init_struct.Mode GPIO_MODE_ANALOG; /* 模拟功能 */HAL_GPIO_Init(GPIOA, gpio_init_struct); /* 初始化LED0引脚 */adc_clk_init.PeriphClockSelection RCC_PERIPHCLK_ADC;adc_clk_init.AdcClockSelection RCC_ADCPCLK2_DIV6;HAL_RCCEx_PeriphCLKConfig(adc_clk_init);} } /* 获得ADC转换后的结果函数*/ uint32_t adc_get_result(void) {HAL_ADC_Start(g_adc_handle);HAL_ADC_PollForConversion(g_adc_handle, 10);return (uint16_t)HAL_ADC_GetValue(g_adc_handle); } adc.h #ifndef __ADC_H #define __ADC_H#include ./SYSTEM/sys/sys.hvoid adc_init(void); uint32_t adc_get_result(void);#endif main.c #include ./SYSTEM/sys/sys.h #include ./SYSTEM/usart/usart.h #include ./SYSTEM/delay/delay.h #include ./BSP/LED/led.h #include ./BSP/LCD/lcd.h #include ./BSP/ADC/adc.hint main(void) {uint16_t adcx;float temp;HAL_Init(); /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72); /* 延时初始化 */usart_init(115200); /* 串口初始化为115200 */led_init(); /* 初始化LED */lcd_init(); /* 初始化LCD */adc_init();lcd_show_string(30, 50, 200, 16, 16, STM32, RED);lcd_show_string(30, 70, 200, 16, 16, ADC TEST, RED);lcd_show_string(30, 90, 200, 16, 16, ATOMALIENTEK, RED);lcd_show_string(30, 110, 200, 16, 16, ADC1_CH1_VAL:, BLUE);lcd_show_string(30, 130, 200, 16, 16, ADC1_CH1_VOL:0.000V, BLUE); /* 先在固定位置显示小数点 */while (1){adcx adc_get_result();lcd_show_xnum(134, 110, adcx, 5, 16, 0, BLUE); /* 显示ADCC采样后的原始值 */temp (float)adcx * (3.3 / 4096); /* 获取计算后的带小数的实际电压值比如3.1111 */adcx temp; /* 赋值整数部分给adcx变量因为adcx为u16整形 */lcd_show_xnum(134, 130, adcx, 1, 16, 0, BLUE); /* 显示电压值的整数部分3.1111的话这里就是显示3 */temp - adcx; /* 把已经显示的整数部分去掉留下小数部分比如3.1111-30.1111 */temp * 1000; /* 小数部分乘以1000例如0.1111就转换为111.1相当于保留三位小数。 */lcd_show_xnum(150, 130, temp, 3, 16, 0X80, BLUE);/* 显示小数部分前面转换为了整形显示这里显示的就是111. */LED0_TOGGLE();delay_ms(100);}}单通道ADC采集(DMA读取)实验 实验简要 1功能描述   通过DMA读取数据 通过ADC1通道1PA1采集电位器的电压并显示ADC转换的数字量及换算后的电压值 2确定最小刻度 VREF 3.3V à 0V≤VIN≤3.3V à 最小刻度 3.3 / 4096  F4/F7/H7系列还需要考虑ADC分辨率 3确定转换时间 采样时间239.5个ADC时钟周期为例可以得到转换时间为21us 4模式组合 连续转换模式、不使用扫描模式  配置步骤 1初始化DMA HAL_DMA_Init() 2将DMA和ADC句柄联系起来 __HAL_LINKDMA() 3配置ADC工作参数、ADC校准 HAL_ADC_Init()、HAL_ADCEx_Calibration_Start() 4ADC MSP初始化 HAL_ADC_MspInit()     配置NVIC、CLOCK、GPIO等 5配置ADC相应通道相关参数 HAL_ADC_ConfigChannel() 6使能DMA数据流传输完成中断 HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ() 7编写DMA数据流中断服务函数 DMAx_Channely_IRQHandler() 8启动DMA开启传输完成中断 HAL_DMA_Start_IT() 9触发ADC转换DMA传输数据 HAL_ADC_Start_DMA 相关库函数介绍 相关结构体介绍 typedef struct { uint32_t Direction; /* 传输方向 */ uint32_t PeriphInc; /* 外设非增量模式 */ uint32_t MemInc; /* 存储器非增量模式 */ uint32_t PeriphDataAlignment; /* 外设数据宽度 */ uint32_t MemDataAlignment; /* 存储器数据宽度 */ uint32_t Mode; /* 操作模式 */ uint32_t Priority; /* DMA通道优先级 */ }DMA_InitTypeDef; 源码 adc.c #include ./BSP/ADC/adc.hDMA_HandleTypeDef g_dma_adc_handle; ADC_HandleTypeDef g_adc_dma_handle; uint8_t g_adc_dma_sta;/* ADC DMA读取 初始化函数 */ void adc_dma_init(uint32_t mar) {ADC_ChannelConfTypeDef adc_ch_conf;__HAL_RCC_DMA1_CLK_ENABLE();g_dma_adc_handle.Instance DMA1_Channel1;g_dma_adc_handle.Init.Direction DMA_PERIPH_TO_MEMORY;g_dma_adc_handle.Init.PeriphInc DMA_PINC_DISABLE;g_dma_adc_handle.Init.MemInc DMA_MINC_ENABLE;g_dma_adc_handle.Init.PeriphDataAlignment DMA_PDATAALIGN_HALFWORD;g_dma_adc_handle.Init.MemDataAlignment DMA_MDATAALIGN_HALFWORD;g_dma_adc_handle.Init.Mode DMA_NORMAL;g_dma_adc_handle.Init.Priority DMA_PRIORITY_MEDIUM;HAL_DMA_Init(g_dma_adc_handle);__HAL_LINKDMA(g_adc_dma_handle, DMA_Handle, g_dma_adc_handle);g_adc_dma_handle.Instance ADC1;g_adc_dma_handle.Init.DataAlign ADC_DATAALIGN_RIGHT;g_adc_dma_handle.Init.ScanConvMode ADC_SCAN_DISABLE;g_adc_dma_handle.Init.ContinuousConvMode ENABLE;g_adc_dma_handle.Init.NbrOfConversion 1;g_adc_dma_handle.Init.DiscontinuousConvMode DISABLE;g_adc_dma_handle.Init.NbrOfDiscConversion 0;g_adc_dma_handle.Init.ExternalTrigConv ADC_SOFTWARE_START;HAL_ADC_Init(g_adc_dma_handle);HAL_ADCEx_Calibration_Start(g_adc_dma_handle);adc_ch_conf.Channel ADC_CHANNEL_1;adc_ch_conf.Rank ADC_REGULAR_RANK_1;adc_ch_conf.SamplingTime ADC_SAMPLETIME_239CYCLES_5;HAL_ADC_ConfigChannel(g_adc_dma_handle, adc_ch_conf);HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 3, 3);HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);HAL_DMA_Start_IT(g_dma_adc_handle, (uint32_t)ADC1-DR, mar, 0);HAL_ADC_Start_DMA(g_adc_dma_handle, mar ,0); }/* ADC MSP初始化函数 */ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {if(hadc-Instance ADC1){GPIO_InitTypeDef gpio_init_struct;RCC_PeriphCLKInitTypeDef adc_clk_init {0};__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_ADC1_CLK_ENABLE();gpio_init_struct.Pin GPIO_PIN_1;gpio_init_struct.Mode GPIO_MODE_ANALOG;HAL_GPIO_Init(GPIOA, gpio_init_struct); adc_clk_init.PeriphClockSelection RCC_PERIPHCLK_ADC;adc_clk_init.AdcClockSelection RCC_ADCPCLK2_DIV6;HAL_RCCEx_PeriphCLKConfig(adc_clk_init);} }/* 使能一次ADC DMA传输函数 */ void adc_dma_enable(uint16_t cndtr) { // ADC1-CR2 ~(1 0); // // DMA1_Channel1-CCR ~(1 0); // while (DMA1_Channel1-CCR (1 0)); // DMA1_Channel1-CNDTR cndtr; // DMA1_Channel1-CCR | 1 0;// ADC1-CR2 | 1 0; // ADC1-CR2 | 1 22;__HAL_ADC_DISABLE(g_adc_dma_handle);__HAL_DMA_DISABLE(g_dma_adc_handle);while (__HAL_DMA_GET_FLAG(g_dma_adc_handle, __HAL_DMA_GET_TC_FLAG_INDEX(g_dma_adc_handle)));DMA1_Channel1-CNDTR cndtr;__HAL_DMA_ENABLE(g_dma_adc_handle);__HAL_ADC_ENABLE(g_adc_dma_handle);HAL_ADC_Start(g_adc_dma_handle); }/* ADC DMA采集中断服务函数 */ void DMA1_Channel1_IRQHandler(void) {if (DMA1-ISR (11)){g_adc_dma_sta 1;DMA1-IFCR | 1 1;} }adc.h #ifndef __ADC_H #define __ADC_H#include ./SYSTEM/sys/sys.hvoid adc_dma_init(uint32_t mar); void adc_dma_enable(uint16_t cndtr);#endif main.c #include ./SYSTEM/sys/sys.h #include ./SYSTEM/usart/usart.h #include ./SYSTEM/delay/delay.h #include ./BSP/LED/led.h #include ./BSP/LCD/lcd.h #include ./BSP/ADC/adc.h#define ADC_DMA_BUF_SIZE 100 /* ADC DMA采集 BUF大小 */ uint16_t g_adc_dma_buf[ADC_DMA_BUF_SIZE]; /* ADC DMA BUF */extern uint8_t g_adc_dma_sta; /* DMA传输状态标志, 0,未完成; 1, 已完成 */int main(void) {uint16_t i;uint16_t adcx;uint32_t sum;float temp;HAL_Init(); /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72); /* 延时初始化 */usart_init(115200); /* 串口初始化为115200 */led_init(); /* 初始化LED */lcd_init(); /* 初始化LCD */adc_dma_init((uint32_t)g_adc_dma_buf); /* 初始化ADC DMA采集 */lcd_show_string(30, 50, 200, 16, 16, STM32, RED);lcd_show_string(30, 70, 200, 16, 16, ADC DMA TEST, RED);lcd_show_string(30, 90, 200, 16, 16, ATOMALIENTEK, RED);lcd_show_string(30, 110, 200, 16, 16, ADC1_CH1_VAL:, BLUE);lcd_show_string(30, 130, 200, 16, 16, ADC1_CH1_VOL:0.000V, BLUE); /* 先在固定位置显示小数点 */adc_dma_enable(ADC_DMA_BUF_SIZE); /* 启动ADC DMA采集 */while (1){if (g_adc_dma_sta 1){/* 计算DMA 采集到的ADC数据的平均值 */sum 0;for (i 0; i ADC_DMA_BUF_SIZE; i) /* 累加 */{sum g_adc_dma_buf[i];}adcx sum / ADC_DMA_BUF_SIZE; /* 取平均值 *//* 显示结果 */lcd_show_xnum(134, 110, adcx, 4, 16, 0, BLUE); /* 显示ADCC采样后的原始值 */temp (float)adcx * (3.3 / 4096); /* 获取计算后的带小数的实际电压值比如3.1111 */adcx temp; /* 赋值整数部分给adcx变量因为adcx为u16整形 */lcd_show_xnum(134, 130, adcx, 1, 16, 0, BLUE); /* 显示电压值的整数部分3.1111的话这里就是显示3 */temp - adcx; /* 把已经显示的整数部分去掉留下小数部分比如3.1111-30.1111 */temp * 1000; /* 小数部分乘以1000例如0.1111就转换为111.1相当于保留三位小数。 */lcd_show_xnum(150, 130, temp, 3, 16, 0X80, BLUE); /* 显示小数部分前面转换为了整形显示这里显示的就是111. */g_adc_dma_sta 0; /* 清除DMA采集完成状态标志 */adc_dma_enable(ADC_DMA_BUF_SIZE); /* 启动下一次ADC DMA采集 */}LED0_TOGGLE();delay_ms(100);} }

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

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

相关文章

福州房地产网站建设wordpress 去掉rss

Go 一、Windows下安装Go1、下载Go2、配置环境变量3、下载Jetbrain下的GoLang4、编写hello world5、编译和执行 二、Go语言介绍1、开发文档2、Go语言核心开发团队3、为什么要创建Go4、Go语言发展史5、Go语言特点6、Golang执行过程6.1 执行过程分析6.2 编译是什么 7、开发注意事项…

成都市网站建设费用及企业Wordpress 分表分库

golang 引入swagger(iris、gin) 在开发过程中,我们不免需要调试我们的接口,但是有些接口测试工具无法根据我们的接口变化而动态变化。文档和代码是分离的。总是出现文档和代码不同步的情况。这个时候就可以在我们项目中引入swagge…

天津网站建设费用电脑可以做网站主机么

C编译环境和预处理(非常详细,建议收藏) 一、程序的翻译环境和执行环境二、 详解编译链接2.1 翻译环境2.2 编译本身的几个阶段符号汇总、符号表、合并段表、符号表的合并和重定位分别是什么? 2.2 运行环境 三、预处理详解3.1 预定义…

Python用数据库做网站做一个网站能卖多少钱

1. 外部类 (写在pulic修饰的类外面) 2. 静态内部类(写在类的里面) 3. 局部内部类(写在方法里面) 4. 匿名内部类 5. 函数式接口。lambada表达式。public class LambdaDemo01 {/*** 2. 静态内部类*/static class Love02 implements Lover {Overridepublic void love() {System.ou…

交换机做网站在招聘网站里做电话销售

java的封装,继承,多态 1 封装 1.1 封装 指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的…

企业手机网站建设流程图关键词查询网址

1.解析原理图 由上图可以看到8个共阳LED灯接到了573输出口,而573输入接到单片机P0口上。当573 LE脚输入高电平时,输出随输入变化,当LE为低电平时,输出锁存。 由上图可以看到Y4C接到了或非门74HC02的输出端,而输入端为…

袜子网站建设规划书推广网站概况

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&…

手机端网站建设广告词做网站的价格是多少

3166练27.3 称心如意《信息学奥赛一本通编程启蒙(C版)》 【题目描述】 每次测试后狐狸老师总会把成绩输入计算机,进行处理分析。但输入时有时会出错,如当满分为100分时,输入小于0或大于100的数,表示输入有…

如何加强省市级政门户网站建设建设银行上海分行招聘网站

1. Symbol概念以及引入原因 ES6 引入了的一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、…

企业网站建设免备案镇江方圆建设监理咨询有限公司网站

提到家务清洁,相信应该是很多宝妈头疼的事儿,不仅工作量打,耗时又耗力,拥有一款完美的清洁工具,那讲大大的提升幸福指数,而洗地机便是当下的智能清洁神器之一。那么家用洗地机哪个牌子最好用,质…

外国炫酷网站网址新做的网站如何

From: http://www.bubuko.com/infodetail-598915.html

喀什百度做网站多少钱定制网络零信任

小家电中要说对自己家里最有用的,其中之一就是扫地机器人,自从三年多前开始用了扫地机器人后,家里的地面是大为改观,劳动强度大为下降,可谓朕心甚慰。从此之后,一发不可收拾,用过也有20台以上的…

高端网站开发哪里好个人特种证件查询网站

Reflector类负责对一个类进行反射解析&#xff0c;并将解析后的结果在属性中存储起来。 一个类反射解析后都有哪些属性呢&#xff1f;我们可以通过Reflector类定义的属性来查看 public class Reflector {// 要被反射解析的类private final Class<?> type;// 可读属性列…

大型小说网站开发语言社交网站 cms

简介&#xff1a; 2020 年的“十一出行节”期间&#xff0c;高德地图创造了记录 ——截止 2020 年 10 月 1 日 13 时 27 分 27 秒&#xff0c;高德地图当日活跃用户突破 1 亿&#xff0c;比 2019 年 10 月 1 日提前 3 时 41 分达成此记录。 期间&#xff0c;Serverless 作为其中…

dedecms做模板网站网站上怎么做动画广告视频在线观看

基于Camunda实现bpmn中各种类型任务 ​ Camunda Modeler -为流程设置器&#xff08;建模工具&#xff09;&#xff0c;用来构建我们的流程模型。Camunda Modeler流程绘图工具&#xff0c;支持三种协议类型流程文件分别为&#xff1a;BPMN、DMN、Form。 ​ Camunda Modeler下载…

网站建设具体工作重庆彼客的网站是谁家做的

PoPo数据可视化 聚焦于Web数据可视化与可视化交互领域&#xff0c;发现可视化领域有意思的内容。不想错过可视化领域的精彩内容, 就快快关注我们吧 :) 微信订阅号&#xff1a;popodv_com谷歌决定关闭云可视化服务 Fusion Tables谷歌宣布即将关闭其 Fusion Tables 云服务&#x…

有哪些做微信小游戏的网站wordpress网站恢复

系列文章目录 代码随想录算法训练营第一天|数组理论基础&#xff0c;704. 二分查找&#xff0c;27. 移除元素 代码随想录算法训练营第二天|977.有序数组的平方 &#xff0c;209.长度最小的子数组 &#xff0c;59.螺旋矩阵II 代码随想录算法训练营第三天|链表理论基础&#xff…

杭州网站排名优化公司在线做头像网站有哪些

C#基础 1. 简述值类型和引用类型有什么区别2. C# String类型比 stringBuilder 类型的优势是什么?3.面向对象的三大特点4.请简述private&#xff0c;public&#xff0c;protected&#xff0c;internal的区别5.结构体和类6.请描述Interface与抽象类之间的不同7.在类的构造函数前…

网站语音转写怎么做天元建设集团有限公司总工程师

写在前面你想成为Python爬虫的高手么&#xff1f;你想爬取你想要的高质量数据么&#xff1f;那么你得需要进行爬虫项目的演练&#xff0c;那样你才有可能在Python爬虫的道路上走的更远小编在这里精心总结了20个爬虫项目的演练&#xff0c;是目前爬虫高手一直专注的领域。小编将…

变更股东怎样在工商网站做公示婚车租赁

英飞凌TC3xx之一起认识GTM(九)GTM相关知识简述(CMU,CCM,TBU,MON) 1 时钟管理单元(CMU)2 集群配置模块(CCM)3 时基单元(TBU)4 监控单元(MON)5 总结由前文的各篇内容,开发者已经知道如何使用GTM的大部分功能,在这些功能中,都需要一个信息就是fGTM 的数据,我们在前…