stm32f103c8t6学习笔记(学习B站up江科大自化协)-看门狗【WDG】

硬件部分

一、看门狗简介

        看门狗-WDG(watchdog)

·看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保障系统的可靠性和安全性

·看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号

·stm32内置两个看门狗:

        ·独立看门狗(IWDG):独立工作,对时间精度要求低

独立运行,就是独立看门狗的时钟是专用是LSI,内部低速时钟,即使主时钟出现问题看门狗也能正常工作,喂狗时间不超过最晚时间界限即可

        ·窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用

使用的是APB1的时钟,没有专门的时钟

二、独立看门狗IWDG

        1、框图

        2、超时时间公式计算

        ·LSI是输入时钟,40KHz,则 F_{LSI} 就是40K, T_{LSI}就是周期 \frac{1}{40K} = 0.025 ms (这个值是固定的),每隔0.025 ms就输入一个时钟,然后输入时钟进行分频,相当于计数时间进行加倍。

        ·比如,PR写入2,就是16分频,RL是计数目标,这里给99

T_{IWDG} = T_{LSI} * RP预分频系数 * (RL + 1) = 0.025ms * 16 *(99 + 1)= 40ms

这个值处在最短时间和最长时间之间。

        ·再比如第一行PR写入0时,预分频系数就是4,最短时间给0(即表中的0x000),所以

T_{IWDG} = T_{LSI} * RP预分频系数 * (RL + 1) = 0.025ms * 4 *(0 + 1)= 0.1ms

这个值就是表中的最短时间0.1ms。

在此基础上,给最长时间4095(即表中的0xfff)所以

T_{IWDG} = T_{LSI} * RP预分频系数 * (RL + 1) = 0.025ms * 4 *(4095 + 1)= 409.6ms

这个值就是表中的最长时间409.6ms

        ·不难发现,预分频系数逐行 乘以 2,最短时间和最长时间也在逐行 乘以 2,

三、窗口看门狗WWDG

        ·时钟来源是APB1,默认是36MHz。

        ·看门狗控制寄存器只有 T0-T5 为有效计数值,最高位 T6 当做溢出标志位(=1时没溢出,=0时溢出)

举个例子:比如初始值给111 1111,一个计数脉冲变成111 1110,然后下一个脉冲变成111 1101,一直到变成100 0000时,转化为16进制为0x40。

如果把T6当做计数器的一部分,计数器的值实际上才减少一半,减到0x40之后便会溢出;

如果把T6位剥离出去当做溢出标志位的话,标志位为1,计数器为00 0000,如果再有一个脉冲减一次变成011 1111,也就是标志位由1变成0,计数器溢出,T6则会通过或门前的非运算取反后经过或门使其产生复位信号。计数器减少到0才溢出。

WDDG框图分析

        ·WDGA是窗口看门狗的激活位,也就是使能,写入1启用看门狗,作用于与门【关于与门的使用可参考我的另一篇文章 http://t.csdnimg.cn/3kpxG】。

        喂狗的最晚界限:(这个部分位于WWDG框架图的下半部分,与独立看门狗类似)

        与门右边信号的来源是 或门的两路信号,任一一个都可以产生复位信号,或门的其中一路(下面)的信号来自 T6 位,当T6位为0时,信号通过取反后经过或门变成1,就产生复位信号。为保证程序正常运行的情况下,必须保持T6位始终为1才能避免复位。

        喂狗的最早界限:(这个部分位于WWDG框图的右上半部分)

        首先写一个最早界限的计数值,写入W6-W0之中,写入的值是不变的。由于6位递减计数器CNT是位于CR控制器里面的,假如设置WWDG_CR为15s(持续递减到0),把WWDG_CFR(最早界限的计数值)设置为10s(写入后是固定不变的)。在比较器那里 当T6:0 > W6:0时,比较结果返回1。在满足T > W的情况下,此时如果喂狗了,CNT将会更新,即WWDG_CR写入新的值,所以靠近比较器的与门控制信号将会被置1,与门导通,产生信号经过或门再经过最后的与门使得单片机复位。

        当WWDG_CR由15(举个例子)递减到10以下(小于WWDG_CFR的设定值)的时候,这是比较器进行比较之后将会返回一个0,所以靠近计数器的与门此时失去输入信号,也就是此时的时间已经在最大和最小的窗口之间,在这个时候喂狗将不会触发复位,直到WWDG_CR递减到0之前还未进行喂狗才会进行复位。

        就我的理解而言(不一定正确)

        窗口看门狗的最早喂狗时间应该不是由WWDG_CFR直接进行设置,而是通过WWDG_CR的初始值 减去 WWDG_CFR的值得到的,也就是上面举例的15-10=5就是最早喂狗时间。在后文WWDG超时时间第四小点部分有相关的

WWDG工作特性

        ·递减计数器T6:0的值小于0x40时,WWDG产生复位。这里的T6:0包含了T6位,所以值减到0x40的时候再减一次就产生复位。

        ·递减计数器T6:0在窗口W6:0外被重新装载时,WWDG产生复位。就是相当于不能过早的喂狗。

        ·递减计数器T6:0等于0x40时蓝牙产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位。在0x40的时候,T6位的值还是1,还没有溢出,但是再减一次变成0x3F的时候T6位变成0溢出。在这里0x40的时候产生中断,0x3F则产生复位。中断在溢出前一刻产生,也可以成为“死前中断”,在这个早期唤醒中断里面一般可以用来执行一些紧急操作,比如关闭危险设备、保存重要数据等等。或者在早期唤醒中断里面及时喂狗,提示一些信息,不想让他复位。

        ·定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位。

WWDG超时时间

        ·事实上在前面WWDG框图处PCLK刚进来时有先经过4096分频,所以公式中要多乘上4096.

        ·下图中超时计算公式中,红框内为分频系数(也就是公式中的2^{^{WDGTB}}),与前面的独立看门狗部分十分相似

        ·回到WWDG超时时间的公式之中,这里写的是T5:0,与前面的T6:0不同,这就意味着不包含T6位,则会一直减到0之后才会溢出。所以超时时间的公式直接拿T5:0计算即可。

        ·窗口时间与超时时间的公式十分相似,区别在于后半部分,超时时间是计数器一直递减到0的时间,而窗口时间公式的(T5:0 - W5:0)是计数器减到窗口值的时间,所以用T5:0-W5:0就可以算出窗口时间了 。在这里也印证了上边我的猜想(就我的理解而言部分内容)大致正确。

        ·超时的计算公式的计算举例如下:

T_{WWDG} = T_{PCLK1}    *   4096   *   WDGTP预分频系数 * (T[5:0] + 1)

                = 1/36MHz   *   4096   *                1                 * (0 + 1)

                = 0.11377777777777ms 约等于表中的最小超时值

T_{WWDG} = T_{PCLK1}    *   4096   *   WDGTP预分频系数 * (T[5:0] + 1)

                = 1/36MHz   *   4096   *                1                 * (63 + 1)

                = 7.281777777777777ms 约等于表中的最大超时值

        ·表中的分频系数呈2倍递增,最小时间和最大时间也是呈2倍的关系

IDWG和WDWG的对比

分界线--下边是软件部分

注意

        ·无论是哪种看门狗,一旦开启就无法关闭,这样可以防止误操作将他关了

        ·看门狗的CNT计数器并没有提供读和写的操作,看门狗运行的时候,内部计数器记到哪个值了我们并不知道,不是很方便调试观察实验现象

        ·窗口看门狗开启的时候,一定要首次给个重装值,T6位给1,防止开机的时候立即复位。

接线图

        这是课程的相关接线图,独立看门狗和窗口看门狗都适用本图

独立看门狗部分

一、配置流程

1.开启时钟

      

        在数据手册里面有这么一段解释,就是说如果我们开启了看门狗,那么LSI就会跟随强制打开,等待LSI稳定之后就可以自动为独立看门狗提供时钟了。所以这里的第一步开启时钟不需要我们写代码来执行

2.写入预分频器和重装寄存器

        在写入这两个寄存器之前需要先写入键值0x555来解除写保护。

3.写入预分频和重装值

        可通过超时时间公式进行计算 


4.在所有配置进行完之后

        可以通过0XCCC这条指令开启独立看门狗,在主循环不断执行0XAAA这条指令进行喂狗

二、代码

1.关于复位时间计算的代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"


int main()
{
	OLED_Init();
	
	OLED_ShowString(1,1,"IWDG TEST");
	
	

		if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET)//查看独立看门狗复位的标志位,返回值是set 或 reset
		{
			OLED_ShowString(2,1,"IWDG RST");
			Delay_ms(800);
			
			OLED_ShowString(2,1,"        ");
			Delay_ms(200);
			
			
			//中断位置1后记得清除标志位 
			//如果置1后没及时清0,那下次即使是正常的复位键复位也会被判断为看门狗复位
			RCC_ClearFlag();
			
		}
		else
		{
			OLED_ShowString(2,1,"NORMOL RST");
			Delay_ms(800);
			
			OLED_ShowString(2,1,"          ");
			Delay_ms(200);		
		}
		
		
		//接下来需要进行解除写保护
		IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//这里的enable对应的宏定义是0x5555
		
		//举个例子,设定我们需要的超时时间为1s TIWDG就是1000
		//TLSI是1/40KHz,就是0.025ms
		//在选择预分频系数的时候,前两个由于最长时间<1000不能选择,所以选择最小能够选择的16分频
		//最后用公式计算RL的值 1000/0.025/16-1=2499	  !!!注意这个值只能取整数
		IWDG_SetPrescaler(IWDG_Prescaler_16);
		IWDG_SetReload(2499);
		//先喂一次狗,保证启动后的第一个喂狗周期就是1000ms
		IWDG_ReloadCounter();
		
		IWDG_Enable();
	while(1)
	{
		IWDG_ReloadCounter();
		Delay_ms(1050);//经过测试我的看门狗在1050ms时会复位,在此之前及时喂狗不会产生复位
	}
}

2.关于按键阻塞程序运行的程序

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "KEY.h"

int main()
{
	OLED_Init();
	GPIO_Key_Init();
	OLED_ShowString(1,1,"IWDG TEST");
	
	

		if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET)//查看独立看门狗复位的标志位,返回值是set 或 reset
		{
			OLED_ShowString(2,1,"IWDG RST");
			Delay_ms(800);
			
			OLED_ShowString(2,1,"        ");
			Delay_ms(200);
			
			
			//中断位置1后记得清除标志位 
			//如果置1后没及时清0,那下次即使是正常的复位键复位也会被判断为看门狗复位
			RCC_ClearFlag();
			
		}
		else
		{
			OLED_ShowString(3,1,"NORMOL RST");
			Delay_ms(800);
			
			OLED_ShowString(3,1,"          ");
			Delay_ms(200);	
		}
		
		
		//接下来需要进行解除写保护
		IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//这里的enable对应的宏定义是0x5555
		
		//举个例子,设定我们需要的超时时间为1s TIWDG就是1000
		//TLSI是1/40KHz,就是0.025ms
		//在选择预分频系数的时候,前两个由于最长时间<1000不能选择,所以选择最小能够选择的16分频
		//最后用公式计算RL的值 1000/0.025/16-1=2499	  !!!注意这个值只能取整数
		IWDG_SetPrescaler(IWDG_Prescaler_16);
		IWDG_SetReload(2499);
		//先喂一次狗,保证启动后的第一个喂狗周期就是1000ms
		IWDG_ReloadCounter();
		
		IWDG_Enable();
	while(1)
	{
		Key_GetNum();//按住按键不放,主循环就会阻塞,则不能及时喂狗,造成复位
		
		IWDG_ReloadCounter(); 
		
		OLED_ShowString(4,1,"FEED");
		Delay_ms(200);

		OLED_ShowString(4,1,"    ");//值得注意的东西,这里不可以使用tab自动空格按键,会造成只有第一个字母闪烁
		//需要老老实实敲四下空格
		Delay_ms(600);		
		//Delay_ms(1050);//经过测试我的看门狗在1050ms时会复位,在此之前及时喂狗不会产生复位
	}
}

三、总结

      ·  建议是多留一些时间余量,防止不必要的误差和bug

      ·  !!!

        OLED_ShowString(4,1,"    ");值得注意的东西,这里不可以使用tab自动空格按键,会造成只有第一个字母闪烁,需要老老实实敲四下空格

        !!!

窗口看门狗部分

初始化配置

1.开启时钟

        由于这里的时钟来源是PCLK1,所以需要手动开启APB1的时钟(与窗口看门狗不同)

2.写入预分频和窗口值

        由于窗口看门狗没有写保护,所以可以在第二布直接写入

3.写入控制寄存器CR

        控制器CR包含看门狗使能位,计数器溢出标志位和计数器有效位

代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "KEY.h"

int main()
{
	OLED_Init();
	GPIO_Key_Init();
	OLED_ShowString(1,1,"WWDG TEST");
	
	

		if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) == SET)//查看窗口看门狗复位的标志位,返回值是set 或 reset
		{
			OLED_ShowString(2,1,"WWDG RST");
			Delay_ms(800);
			
			OLED_ShowString(2,1,"        ");
			Delay_ms(200);
			
			
			//中断位置1后记得清除标志位 
			//如果置1后没及时清0,那下次即使是正常的复位键复位也会被判断为看门狗复位
			RCC_ClearFlag();
			
		}
		else
		{
			OLED_ShowString(3,1,"NORMOL RST");
			Delay_ms(800);
			
			OLED_ShowString(3,1,"          ");
			Delay_ms(200);	
		}
		
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);	//开启时钟
		
		//假如 设置超时时间为50ms 由计算公式对应的表可以发现 WDGTB只有3对应的超时时间能满足
		//预分频系数 = 2^3 = 8   T_WWDG = 50   T_PCLK1 = 1 / 36MHz
		//由公式计算得T[5:0] = 54(这个值需要取整)
		WWDG_SetPrescaler(WWDG_Prescaler_8);//预分频系数 
		/*
		窗口时间的计算在超时时间计算完成后非常简单 T_WIN设置为30ms
		根据公式可计算得 T - W = 33 也就是 54 - W = 33  W = 21
		同理,窗口值也需要将第六位置1 同样需要 | 0x40
		*/
		WWDG_SetWindowValue(0x40 | 21);//窗口值系数
		
		
		/*
		看门狗并没有重装寄存器,是通过直接写入计数器的方式
		在使能的时候需要先写入重装值,喂狗的时候也需要不断写入重装值
		由上边计算得到的T[5:0]是只有T5-T0的,还有T6位是必须设置为1的
		所以需要在54的基础上 | 0x40,(0x40的值来源可参考硬件部分解析)将T6位设置为1
		*/
		WWDG_Enable(0x40 | 54);

	while(1)
	{
		Key_GetNum();//按住按键不放,主循环就会阻塞,则不能及时喂狗,造成复位
		

		
		OLED_ShowString(4,1,"FEED");
		Delay_ms(20);

		OLED_ShowString(4,1,"    ");

		Delay_ms(20);		
		WWDG_SetCounter(0x40 | 54);
	}
}

注意

        程序初始化之后,执行到使能看门狗的时候会同时执行第一次喂狗,在接下来进入循环时立刻喂狗将会造成时间间隔小于我们设置的时间间隔30ms,造成喂狗过快造成复位,然后再次执行至此依旧如此,会陷入循环复位卡死。

        ·建议将循环中的喂狗放至末尾部分,避免喂狗过快这个问题。

        ·又或者,将使能的代码和喂狗的代码放在一起,使用if判断是否第一次喂狗,第一次喂狗则使用使能顺便喂狗的那个程序,如果是第二次喂狗就执行单独喂狗的程序

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

相机参数的意义

相机标定的意义&#xff1a; 相机标定&#xff1a;使用带有pattern的标定板来求解相机参数的过程&#xff1b;用一个简化的数学模型来代表复杂的三维到二维的成像过程&#xff1b;相机参数包括&#xff1a;相机内参&#xff08;焦距等&#xff09;&#xff0c;外参&#xff08…

为什么需要SOCKS代理?

在数字化时代&#x1f310;&#xff0c;随着网络安全威胁的不断演进和增加&#xff0c;保护个人隐私和数据安全成为了互联网用户的一大挑战&#x1f6e1;️。在寻求增强在线安全和隐私的解决方案时&#xff0c;SOCKS代理成为了一个关键的技术工具&#x1f511;。本文旨在详细探…

代码随想录:栈与队列4-6

20.有效的括号 题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一…

什么是容器安全,该怎么进行容器安全的检测防护

随着容器技术的迅速发展和普及&#xff0c;越来越多的企业开始采用容器化解决方案来优化应用部署、提高资源利用率和降低成本。然而&#xff0c;在对大规模部署和使用容器应用来提升业务系统开发速度的时候&#xff0c;大量的数据对象、多种安全风险都需要检测&#xff0c;容器…

Spark_SparkSql写入Oracle_Undefined function.....将长字符串写入Oracle中方法..

在使用Spark编写代码将读库处理然后写入Oracle中遇到了诸多小bug,很磨人。shit!! 实测1&#xff1a;TO_CLOB(a3) 代码样例 --这是一个sparksql写入hive的一个小逻辑&#xff0c;我脱敏了噻 SELECT a1, a2, TO_CLOB(a3) AS clob_data, TO_DATE(a4) AS time FROM table1 WHERE…

外包干了15天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四年的功能…

海外软文通稿代发 - 大舍传媒

引言 在当今高度信息化的时代&#xff0c;企业和个人品牌形象的塑造与传播变得越来越重要。为了在国际舞台上获得更大的竞争优势&#xff0c;许多企业和品牌纷纷将视线投向了国外市场。而在这个过程中&#xff0c;专业的软文通稿代发服务成为了他们的得力助手。本文将向您介绍…

恒创科技:香港服务器CPU核心数如何选?越多越好吗?

​  谈到 CPU“核心”是完成所有处理的组件&#xff0c;程序能否顺利运行的第一因素是你有多少个核心。但由于不同的计算任务占用不同的资源&#xff0c;所以如果您打算简单地创建小型网站或者其他请求处理数据也不高的业务&#xff0c;那么您的基本型号应该包含 1、2 核已经…

云计算重要概念之:虚拟机、网卡、交换机、路由器、防火墙

一、虚拟机 (Virtual Machine, VM) 1.主流的虚拟化软件&#xff1a; 虚拟化软件通过在单个物理硬件上创建和管理多个虚拟环境&#xff08;虚拟机&#xff09;&#xff0c;实现资源的高效利用、灵活部署、隔离安全以及便捷管理&#xff0c;是构建云计算和现代化数据中心的核心…

【电控笔记4】拉普拉斯-传递函数-pid

数据标幺化 拉普拉斯变换 欧拉公式 常见s变换 s变换性质 pid分析 p控制&#xff0c;存在稳态误差 可以求出p的取值范围p>-1&#xff0c;否则发散 pi消除稳态误差 把kp换成Gs 只用pi控制&#xff0c;不加微分的原因&#xff1a; 微分之后&#xff0c;噪声增大高频噪声频率…

【力扣】104. 二叉树的最大深度、111. 二叉树的最小深度

104. 二叉树的最大深度 题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输…

机器学习与自主系统

Darpa人工智能中有两个重要方向&#xff0c;一是机器学习&#xff0c;另一个就是自主系统。但真实博弈环境下&#xff0c;更重要的是人机融合体系… 机器学习是一种人工智能的分支&#xff0c;通过使用统计学和数学模型来让计算机系统学习和改进其性能。它可以让计算机从数据中…

FreeRTOS创建第一个程序

使用freeRTOS创建任务时使用如下函数 函数的参数 创建一个FreeRTOS任务点亮led灯实现led灯500毫秒翻转一次 具体的代码实现 #include "stm32f10x.h" // Device header #include "Delay.h" #include "freeRTOS.h" #include &quo…

【bash】linux使用环境变量拼接字符串错误

有如下脚本init-env.sh #!/bin/bash export HADOOP_HOME/opt/hadoop export HADOOP_CONF$HADOOP_HOME/conf执行结果&#xff1a; source init-env.sh echo $HADOOP_CONF_DIR # 得到结果&#xff1a;conf/hadoop&#xff0c;预期因该是/opt/hadoop/conf原因就是linux下使用了w…

零售EDI:Princess Auto EDI对接

Princess Auto 是一家加拿大零售连锁店&#xff0c;专门从事农场、工业、车库、液压和剩余物品的销售。 Princess Auto 总部位于马尼托巴省温尼伯&#xff0c;截至 2024 年 1 月在 10 个省份拥有并经营 55 家商店以及三个配送中心。各种商品均以其“Powerfist”和“Pro.Point”…

Qt 多窗体

前言 在 Qt编程中经常会遇到要在多个界面之间切换的情况&#xff0c;如从登录界面跳转到主界面&#xff0c;从主界面跳转到设置界面&#xff0c;再返回到主界面。我们将会用一个简单的示例来实现多窗体功能。 登录窗口 创建基类为QMainWindow&#xff0c;类名为LoginWin。再使用…

苹果开发者后台添加udid后,xcode中 Devices 数量没有更新问题

删除 文件夹 /Users/…/Library/MobileDevice/Provisioning Profiles 如何打开&#xff1a;https://zhuanlan.zhihu.com/p/563928113 回到Xcode刷新包名下面的警告验证&#xff08;可能需要翻墙&#xff09; 完毕&#xff01;

网站SEO关键词规划时如何筛选出合适的关键词?

在网站SEO优化过程中&#xff0c;关键词布局是一个至关重要的环节。首先&#xff0c;我们需要确定核心关键词&#xff0c;然后通过各种策略和方法对关键词进行扩展。完成关键词扩展后&#xff0c;接下来的任务就是对这些扩展后的关键词进行筛选。那么&#xff0c;如何进行有效的…

WordPress LayerSlider插件SQL注入漏洞复现(CVE-2024-2879)

0x01 产品简介 WordPress插件LayerSlider是一款可视化网页内容编辑器、图形设计软件和数字视觉效果应用程序,全球活跃安装量超过 1,000,000 次。 0x02 漏洞概述 WordPress LayerSlider插件版本7.9.11 – 7.10.0中,由于对用户提供的参数转义不充分以及缺少wpdb::prepare(),…

AI大模型之ChatGPT科普(深度好文)

目录 训练ChatGPT分几步&#xff1f; 如何炼成ChatGPT&#xff1f; 如何微调ChatGPT? 如何强化ChatGPT? 如何调教ChatGPT? AI思维链是什么&#xff1f; GPT背后的黑科技Transformer是什么&#xff1f; Transformer在计算机视觉上CV最佳作品&#xff1f; ChatGPT是人…