来自chat gpt对新手的答疑解惑

[复制链接]
93|3
手机看帖
扫描二维码
随时随地手机跟帖
王小琪|  楼主 | 2023-3-6 22:13 | 显示全部楼层 |阅读模式
本帖最后由 王小琪 于 2023-3-6 22:27 编辑

什么叫新手,通常会很迷茫,我从哪里来,要到哪里去。下面我整理了一些来自遥远的chat gpt的一些回答,希望可以帮助大家解决一定的疑问。
问题如下:
1、如何学习C语言
2、能否推荐几本学习C语言的书籍
3、用C语言代码点亮一个LED
4、使用STM32单片机点亮一个LED
5、如何学习STM32
6、推荐下学习单片机的路径
7、如何学习模电
8、如何学习数电
9、推荐几本学习模电的书籍
10、推荐基本学习数电的书籍

1、如何学习C语言
700526405f0426937f.png
2、能否推荐几本学习C语言的书籍
519026405f1787441c.png
3、用C语言代码点亮一个LED
112376405f0a07a26d.png
4、使用STM32单片机点亮一个LED
508176405f0fe0cbbe.png
5、如何学习STM32
377206405f11da2de5.png
6、推荐下学习单片机的路径
842386405f12b8dcb1.png
7、如何学习模电
125116405f1593ff13.png
8、如何学习数电
660126405f167b1512.png
9、推荐几本学习模电的书籍
153086405f1877ef98.png
10、推荐基本学习数电的书籍
457336405f1a416932.png

说一下我的整个使用感受
1、整个测试下来,有一定的错误的辩识率,譬如我把“几本”打成“基本”,它也能读懂我的意思。
2、很多答案可以说是正确的废话,但是对于初学者来说,不正需要这些基础的正确的答案来打好基础吗,我可以说,这里的回答比所有论坛上80%的答案都要优秀,可以说是升级的百度,至少你不用画那么多时间去辨别哪些是粪坑,哪些是金子。这不禁让我更加期待百度本月16号推出的文心一言,毕竟更适合国人的风格。
3、竟然可以写代码,虽然只是一个简单的点灯的程序,但arduino和STM32的都写出来了,据说chat gpt代码水平都达到了谷歌中级工程师的水平,我等这种渣渣工程师顿感压力山大。
4、很大程度上你能收到什么回答,取决于你的提问方式,明确的有目的性的优秀的问题,也会得到更加优秀的回答。我提的几个问题,只能说非常初级,提的不够聪明。归根结底chat gpt只是一个工具,就好像同样是百度,有的人就可以搜到想要的任何信息,有的人只能被骗,道理是一样的。
总而言之,之前就对chat gpt很感兴趣,今天试了一下,感觉还是很不错的,大家也可以在楼下留言,如果有遇到有趣的问题,也可以看看会收获到什么有趣的答案。













使用特权

评论回复

相关帖子

王小琪|  楼主 | 2023-3-6 22:24 | 显示全部楼层
本帖最后由 王小琪 于 2023-3-6 22:26 编辑

这是我要的一个iic例程
iic.jpg
以下是一个IIC通信的C语言例程,用于在STM32F103C8T6开发板上通过IIC总线读取温度传感器的数据:

#include "stm32f10x.h"

#define I2C_SPEED 100000 // I2C总线速度为100kHz
#define I2C_TIMEOUT 10000 // I2C操作超时时间为10ms

#define TEMP_SENSOR_ADDR 0x48 // 温度传感器的I2C地址为0x48

void I2C1_Init(void);
void I2C1_Start(void);
void I2C1_Stop(void);
void I2C1_WriteByte(uint8_t data);
uint8_t I2C1_ReadByte(uint8_t ack);
uint8_t I2C1_ReadRegister(uint8_t reg);

int main(void)
{
  uint8_t temp;

  I2C1_Init(); // 初始化I2C1

  temp = I2C1_ReadRegister(0x00); // 读取温度传感器的寄存器0x00的值
  // 处理温度值

  while (1)
  {
    // 循环读取温度传感器的数据
  }
}

void I2C1_Init(void)
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); // 使能I2C1时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOB时钟

  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure); // 配置GPIOB6和GPIOB7为开漏输出,复用功能,速度为50MHz

  I2C_InitTypeDef I2C_InitStructure;
  I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
  I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
  I2C_InitStructure.I2C_OwnAddress1 = 0x00;
  I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
  I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
  I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
  I2C_Init(I2C1, &I2C_InitStructure); // 配置I2C1

  I2C_Cmd(I2C1, ENABLE); // 使能I2C1
}

void I2C1_Start(void)
{
  I2C_GenerateSTART(I2C1, ENABLE); // 产生I2C起始信号
  while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); // 等待I2C事件发生
}

void I2C1_Stop(void)
{
  I2C_GenerateSTOP(I2C1, ENABLE); // 产生I2C停止信号
  while (I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF)); // 等待I2C停止信号发送完成
}

void I2C1_WriteByte(uint8_t data)
{
  I2C_SendData(I2C1, data); // 发送数据
  while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); // 等待数据发送完成
}

uint8_t I2C1_ReadByte(uint8_t ack)
{
  if (ack)
    I2C_AcknowledgeConfig(I2C1, ENABLE); // 使能应答
  else
    I2C_AcknowledgeConfig(I2C1, DISABLE); // 禁止应答

  while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); // 等待数据接收完成

  uint8_t data = I2C_ReceiveData(I2C1); // 读取数据

  return data;
}

uint8_t I2C1_ReadRegister(uint8_t reg)
{
  I2C1_Start(); // 发送起始信号
  I2C1_WriteByte(TEMP_SENSOR_ADDR << 1); // 发送从机地址
  I2C1_WriteByte(reg); // 发送寄存器地址
  I2C1_Start(); // 发送起始信号
  I2C1_WriteByte((TEMP_SENSOR_ADDR << 1) | 0x01); // 发送从机地址,读取数据
  uint8_t data = I2C1_ReadByte(0); // 读取数据,禁止应答
  I2C1_Stop(); // 发送停止信号

  return data;
}

使用特权

评论回复
cqb609902345| | 2023-3-14 18:33 | 显示全部楼层
总结的中肯,需要自行判断,确是不错的工具

使用特权

评论回复
Siderlee| | 2023-3-24 20:08 | 显示全部楼层
谭浩强 老师  怎么什么书都出

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则