硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1034|回复: 10
收起左侧

[微软全家桶] Github升级版人工智能编程助手Copilot X,有GPT-4加持,提供沉浸式类似ChatGPT的聊天编程体验,实现轻松代码编程

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2023-3-24 02:35:30 | 显示全部楼层 |阅读模式
https://github.blog/2023-03-22-g ... veloper-experience/

今年2月份时,Github正式完成了1亿注册用户,这么庞大的用户群下,推出Copilot X,影响力是不言而喻的。

后面各种Git操作,代码自动生成,我们都可以通过聊天的方式告诉 Copilot 去完成,当前已经给VS Code和Visual Studio提供了聊天窗口。






回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2023-3-24 21:52:55 | 显示全部楼层
革命性的东西。 用在嵌入式上太猛了。试验了一下生成的直线电机控制代码比我写得好
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2023-3-25 21:56:50 | 显示全部楼层
使用c编写一段stm32f407使用spi总线控制ad7608的程序
已发送电子邮件. 使用c编写一段stm32f407使用spi总线控制ad7608的程序
这是一个使用STM32F407的SPI接口来控制AD7608的简单示例程序。请注意,这只是一个示例,您可能需要根据您的硬件配置进行相应的修改。

#include "stm32f4xx_hal.h"

SPI_HandleTypeDef hspi;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_SPI_Init();

  uint8_t txData = 0x55; // 要发送的数据
  uint8_t rxData; // 接收到的数据

  while (1)
  {
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET); // 拉低片选引脚
    HAL_SPI_TransmitReceive(&hspi, &txData, &rxData, 1, HAL_MAX_DELAY); // 发送并接收数据
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); // 拉高片选引脚

    HAL_Delay(1000); // 延时1秒
  }
}

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
}

static void MX_SPI_Init(void)
{
   hspi.Instance = SPI1;
   hspi.Init.Mode = SPI_MODE_MASTER;
   hspi.Init.Direction = SPI_DIRECTION_2LINES;
   hspi.Init.DataSize = SPI_DATASIZE_8BIT;
   hspi.Init.CLKPolarity = SPI_POLARITY_LOW;
   hspi.Init.CLKPhase = SPI_PHASE_1EDGE;
   hspi.Init.NSS = SPI_NSS_SOFT;
   hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
   hspi.Init.FirstBit = SPI_FIRSTBIT_MSB;
   hspi.Init.TIMode = SPI_TIMODE_DISABLE;
   hspi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
   hspi.Init.CRCPolynomial = 10;

   if (HAL_SPI_Init(&hspi) != HAL_OK)
   {
      Error_Handler();
   }
}

static void MX_GPIO_Init(void)
{
   GPIO_InitTypeDef GPIO_InitStruct;

   __HAL_RCC_GPIOA_CLK_ENABLE();
   __HAL_RCC_GPIOE_CLK_ENABLE();

   HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

   GPIO_InitStruct.Pin = GPIO_PIN_3;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

   HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
   GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;

   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

void Error_Handler(void)
{
}
已收到消息. 这是一个使用STM32F407的SPI接口来控制AD7608的简单示例程序。请注意,这只是一个示例,您可能需要根据您的硬件配置进行相应的修改。 ```c #include "stm32f4xx_hal.h" SPI_HandleTypeDef hspi; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_SPI_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI_Init(); uint8_t txData = 0x55; // 要发送的数据 uint8_t rxData; // 接收到的数据 while (1) { HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET); // 拉低片选引脚 HAL_SPI_TransmitReceive(&hspi, &txData, &rxData, 1, HAL_MAX_DELAY); // 发送并接收数据 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); // 拉高片选引脚 HAL_Delay(1000); // 延时1秒 } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 7; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) { Error_Handler(); } } static void MX_SPI_Init(void) { hspi.Instance = SPI1; hspi.Init.Mode = SPI_MODE_MASTER; hspi.Init.Direction = SPI_DIRECTION_2LINES; hspi.Init.DataSize = SPI_DATASIZE_8BIT; hspi.Init.CLKPolarity = SPI_POLARITY_LOW; hspi.Init.CLKPhase = SPI_PHASE_1EDGE; hspi.Init.NSS = SPI_NSS_SOFT; hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; hspi.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi.Init.TIMode = SPI_TIMODE_DISABLE; hspi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi.Init.CRCPolynomial = 10; if (HAL_SPI_Init(&hspi) != HAL_OK) { Error_Handler(); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); GPIO_InitStruct.Pin = GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } void Error_Handler(void) { } ```
5

15
能帮我把每行加上注释吗
已发送电子邮件. 能帮我把每行加上注释吗
当然可以。这是一个带有注释的示例程序,它使用STM32F407的SPI接口来控制AD7608。

#include "stm32f4xx_hal.h"

SPI_HandleTypeDef hspi;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI_Init(void);

int main(void)
{
  HAL_Init(); // 初始化HAL库
  SystemClock_Config(); // 配置系统时钟
  MX_GPIO_Init(); // 初始化GPIO
  MX_SPI_Init(); // 初始化SPI

  uint8_t txData = 0x55; // 要发送的数据
  uint8_t rxData; // 接收到的数据

  while (1)
  {
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET); // 拉低片选引脚
    HAL_SPI_TransmitReceive(&hspi, &txData, &rxData, 1, HAL_MAX_DELAY); // 发送并接收数据
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); // 拉高片选引脚

    HAL_Delay(1000); // 延时1秒
  }
}

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
}

static void MX_SPI_Init(void)
{
   hspi.Instance = SPI1; // 使用SPI1
   hspi.Init.Mode = SPI_MODE_MASTER; // 主机模式
   hspi.Init.Direction = SPI_DIRECTION_2LINES; // 双线模式
   hspi.Init.DataSize = SPI_DATASIZE_8BIT; // 数据大小为8位
   hspi.Init.CLKPolarity = SPI_POLARITY_LOW; // 空闲时时钟线为低电平
   hspi.Init.CLKPhase = SPI_PHASE_1EDGE; // 第一个时钟沿采样数据
   hspi.Init.NSS = SPI_NSS_SOFT; // 软件控制片选信号
   hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; // 波特率分频系数为256
   hspi.Init.FirstBit = SPI_FIRSTBIT_MSB; // 高位在前
   hspi.Init.TIMode = SPI_TIMODE_DISABLE; // 不使用TI模式
   hspi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; // 不使用CRC校验
   hspi.Init.CRCPolynomial = 10;

   if (HAL_SPI_Init(&hspi) != HAL_OK) // 初始化SPI
   {
      Error_Handler();
   }
}

static void MX_GPIO_Init(void)
{
   GPIO_InitTypeDef GPIO_InitStruct;

   __HAL_RCC_GPIOA_CLK_ENABLE();
   __HAL_RCC_GPIOE_CLK_ENABLE();

   HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

   GPIO_InitStruct.Pin = GPIO_PIN_3;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

已收到消息. 当然可以。这是一个带有注释的示例程序,它使用STM32F407的SPI接口来控制AD7608。 ```c #include "stm32f4xx_hal.h" SPI_HandleTypeDef hspi; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_SPI_Init(void); int main(void) { HAL_Init(); // 初始化HAL库 SystemClock_Config(); // 配置系统时钟 MX_GPIO_Init(); // 初始化GPIO MX_SPI_Init(); // 初始化SPI uint8_t txData = 0x55; // 要发送的数据 uint8_t rxData; // 接收到的数据 while (1) { HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET); // 拉低片选引脚 HAL_SPI_TransmitReceive(&hspi, &txData, &rxData, 1, HAL_MAX_DELAY); // 发送并接收数据 HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); // 拉高片选引脚 HAL_Delay(1000); // 延时1秒 } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 7; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) { Error_Handler(); } } static void MX_SPI_Init(void) { hspi.Instance = SPI1; // 使用SPI1 hspi.Init.Mode = SPI_MODE_MASTER; // 主机模式 hspi.Init.Direction = SPI_DIRECTION_2LINES; // 双线模式 hspi.Init.DataSize = SPI_DATASIZE_8BIT; // 数据大小为8位 hspi.Init.CLKPolarity = SPI_POLARITY_LOW; // 空闲时时钟线为低电平 hspi.Init.CLKPhase = SPI_PHASE_1EDGE; // 第一个时钟沿采样数据 hspi.Init.NSS = SPI_NSS_SOFT; // 软件控制片选信号 hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; // 波特率分频系数为256 hspi.Init.FirstBit = SPI_FIRSTBIT_MSB; // 高位在前 hspi.Init.TIMode = SPI_TIMODE_DISABLE; // 不使用TI模式 hspi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; // 不使用CRC校验 hspi.Init.CRCPolynomial = 10; if (HAL_SPI_Init(&hspi) != HAL_OK) // 初始化SPI { Error_Handler(); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); GPIO_InitStruct.Pin = GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
6

15
能帮我完善一下error_handle这个程序吗
已发送电子邮件. 能帮我完善一下error_handle这个程序吗
Error_Handler()函数通常用于在程序运行过程中发生错误时执行一些操作。例如,您可以在该函数中添加代码来点亮LED或输出调试信息。

下面是一个简单的Error_Handler()函数示例,它会点亮板载LED并使程序进入死循环:

void Error_Handler(void)
{
  /* 点亮板载LED */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

  /* 进入死循环 */
  while(1)
  {
  }
}
请注意,您需要根据您的硬件配置进行相应的修改。例如,如果您的板子上没有板载LED,或者板载LED连接到了其他GPIO引脚,则需要进行相应的修改。
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2023-3-25 22:00:07 | 显示全部楼层
SystemClock_Config(void) 这个函数能帮我加一些详细的注释吗,我看不太懂
已发送电子邮件. SystemClock_Config(void) 这个函数能帮我加一些详细的注释吗,我看不太懂
当然可以。SystemClock_Config()函数用于配置系统时钟。下面是一个带有详细注释的SystemClock_Config()函数示例:

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  __HAL_RCC_PWR_CLK_ENABLE(); // 使能电源接口时钟
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); // 配置电压调节器

  // 配置外部高速时钟
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 使用外部高速时钟
  RCC_OscInitStruct.HSEState = RCC_HSE_ON; // 打开外部高速时钟
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; // 打开PLL
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; // PLL时钟源为外部高速时钟
  RCC_OscInitStruct.PLL.PLLM = 8; // PLLM分频系数为8
  RCC_OscInitStruct.PLL.PLLN = 336; // PLLN倍频系数为336
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // PLLP分频系数为2
  RCC_OscInitStruct.PLL.PLLQ = 7; // PLLQ分频系数为7
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) // 配置振荡器
  {
    Error_Handler();
  }

  // 配置系统时钟、AHB总线时钟、APB1总线时钟和APB2总线时钟
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 系统时钟源为PLL时钟
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB总线时钟分频系数为1
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; // APB1总线时钟分频系数为4
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; // APB2总线时钟分频系数为2

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) // 配置系统时钟
  {
    Error_Handler();
  }
}
希望这些注释能帮助您更好地理解SystemClock_Config()函数。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
 楼主| 发表于 2023-3-26 13:34:56 | 显示全部楼层
roguebear 发表于 2023-3-25 21:56
使用c编写一段stm32f407使用spi总线控制ad7608的程序
已发送电子邮件. 使用c编写一段stm32f407使用spi总线 ...

这个GPT没有实现,只是生成了个SPI配置。
回复

使用道具 举报

59

主题

285

回帖

462

积分

高级会员

积分
462
发表于 2023-3-26 19:51:29 | 显示全部楼层
怎么要绑定银行卡啊?好像还不能跳过
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2023-3-27 09:53:28 | 显示全部楼层
eric2013 发表于 2023-3-26 13:34
这个GPT没有实现,只是生成了个SPI配置。

HAL_SPI_TransmitReceive(&hspi, &txData, &rxData, 1, HAL_MAX_DELAY); // 发送并接收数据
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); // 拉高片选引脚

可能是我没有继续问下去,比如 如何将得到的数据转换成电压?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
 楼主| 发表于 2023-3-27 09:57:06 | 显示全部楼层
roguebear 发表于 2023-3-27 09:53
HAL_SPI_TransmitReceive(&hspi, &txData, &rxData, 1, HAL_MAX_DELAY); // 发送并接收数据
    HAL_GP ...

后面GPT训练下STM32CubeMX,感觉可行。让STM32CubeMX也接入GPT支持。
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2023-3-27 13:15:43 | 显示全部楼层
eric2013 发表于 2023-3-27 09:57
后面GPT训练下STM32CubeMX,感觉可行。让STM32CubeMX也接入GPT支持。

如何训练自己的小环境呢? 比如说手上有一堆某个行业的pdf,这些是要注册才能下载的,网络上根本没有。想给GPT训练生成自己的小智能。。。
回复

使用道具 举报

11

主题

135

回帖

168

积分

初级会员

积分
168
发表于 2023-3-27 14:39:29 | 显示全部楼层
单片机这个东西,把手册,算法,花里胡哨的东西都喂给AI,硬件配置、技术要求也喂给它。如果真的有一天AI自己能调出来,无疑是生产力的一次飞跃。
回复

使用道具 举报

3

主题

75

回帖

84

积分

初级会员

积分
84
发表于 2023-3-27 15:14:46 | 显示全部楼层
试试这款 http://cursor.so/ 目前免费
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 03:25 , Processed in 0.181824 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表