搜索
bottom↓
回复: 42

ChatGPT 编写的STM32程序

[复制链接]

出0入0汤圆

发表于 2023-2-9 21:13:51 | 显示全部楼层 |阅读模式


就算说得过去吧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2023-2-9 21:33:43 来自手机 | 显示全部楼层
好牛的AI,好像是一行一行写的,并不是在数据库翻查案例代码,以后百度谷歌都要下岗了

出1310入193汤圆

发表于 2023-2-9 22:18:28 来自手机 | 显示全部楼层
代码规范
注释精简详细

出130入20汤圆

发表于 2023-2-9 23:33:14 | 显示全部楼层
牛比,还会中文注释

出200入2554汤圆

发表于 2023-2-9 23:59:23 | 显示全部楼层
只有我看到了 GPT 把 (-127+0.5, +127+0.5) 区间的 float 赋值给了 uint16_t 了么?

从功能上,这自动驾驶不错;从结果上,开坑里了还得挖。

出0入0汤圆

 楼主| 发表于 2023-2-10 06:41:41 来自手机 | 显示全部楼层
这个也就是玩具级别的,真想让码农立刻就失业吗?但话又说回来,专门搞一个编程版的,好像也并不是很遥远的事。

出0入0汤圆

 楼主| 发表于 2023-2-10 06:54:31 来自手机 | 显示全部楼层
另外是不是机器目前对这个芯片编程还处于学习过程中,还有提升空间?好歹他知道sin表送DAC之前得幅值提升保证都是正整数,但是它想到了提升一半0.5,但是没想到转换成2047。我今天没事的时候让机器改错看它能做到吗。

出0入0汤圆

发表于 2023-2-10 08:11:43 | 显示全部楼层
哪天能画pcb?

出40入42汤圆

发表于 2023-2-10 08:50:01 | 显示全部楼层
TINXPST 发表于 2023-2-10 06:41
这个也就是玩具级别的,真想让码农立刻就失业吗?但话又说回来,专门搞一个编程版的,好像也并不是很遥远的 ...
(引用自6楼)

我一直想不通chatgpt让程序员失业的理由是什么
如果你是老板,你会把程序员裁掉,然后把产品的软件都交给chatgpt来完成吗?
就算把中初级程序员裁掉,留下高级程序员排错,那么高级程序员也可能要自离了

出0入0汤圆

发表于 2023-2-10 09:04:53 | 显示全部楼层
wychao 发表于 2023-2-10 08:11
哪天能画pcb?
(引用自8楼)

让楼主试下

出0入0汤圆

发表于 2023-2-10 09:05:45 | 显示全部楼层
wychao 发表于 2023-2-10 08:11
哪天能画pcb?
(引用自8楼)

能画pcb简直是救星

出0入90汤圆

发表于 2023-2-10 09:07:43 | 显示全部楼层
落叶知秋 发表于 2023-2-10 08:50
我一直想不通chatgpt让程序员失业的理由是什么
如果你是老板,你会把程序员裁掉,然后把产品的软件都交给 ...
(引用自9楼)

短时间内这玩意不会让任何程序员失业。
长久看,也许会进化成一个比较好的助理,把你的一些想法通过模块的方式来实现。
但是结果还是需要你来核对。
所以现在说出让程序员失业的人,都是水平比较菜的人才说得出来的

出0入0汤圆

发表于 2023-2-10 09:25:43 | 显示全部楼层
原来需要10个程序员,之后只需要5个了

出0入0汤圆

发表于 2023-2-10 09:37:50 | 显示全部楼层
有这个助理可以大大提高效率,原来几个人的工作量可能就不需要这么多的人了,可不就有人要失业了吗?就算给的代码没那么完美,但对程序员来说,还是可以省很多力气,人写的一样会有错,何况现在还是刚推出的初级版本,再过几年,不可想象!

出0入103汤圆

发表于 2023-2-10 09:43:29 | 显示全部楼层
wychao 发表于 2023-2-10 08:11
哪天能画pcb?
(引用自8楼)

估计要下一代或下下一代的模型才行吧

现有的几个PCB平台的文件描述都非文本格式,基于自然语言模型的ChatGPT,应该是无能为力的。画PCB的各位,暂时还是要各自继续努力了 。或者画PCB的体力活,发给我们这种外包团队也行;VIP服务,JlcedaPro/AD/Pads/Allegro都支持

看到网上讨论ChatGPT的代码能力超群时,也提心吊胆了一下,让ChatGPT写个PADS脚本看看,然后松口气,这家伙忽悠人的本事也不含糊的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出40入42汤圆

发表于 2023-2-10 09:45:01 | 显示全部楼层
shiva_shiva 发表于 2023-2-10 09:25
原来需要10个程序员,之后只需要5个了
(引用自13楼)

假设我是老板的话,
我以前招了10个程序员,现在有chatgpt这个也许可以提高生产力的“工具”了,我不会裁掉5个程序员
我会在保留10个程序员的情况下,将原来的3个在研产品,扩展到6个在研产品,保留人力而省掉商业试错的时间成本
如果真的裁掉5个程序员,相当于老板安于现状,吃枣药丸

出40入42汤圆

发表于 2023-2-10 09:47:28 | 显示全部楼层
weavr 发表于 2023-2-10 09:37
有这个助理可以大大提高效率,原来几个人的工作量可能就不需要这么多的人了,可不就有人要失业了吗?就算给 ...
(引用自14楼)

可以看看16楼的假设怎么样?哈哈

出0入4汤圆

发表于 2023-2-10 09:56:33 | 显示全部楼层
lb0857 发表于 2023-2-9 22:18
代码规范
注释精简详细
(引用自3楼)

格式也很规范,注释还是中文的。
确实很智能

出0入0汤圆

发表于 2023-2-10 10:27:02 | 显示全部楼层
落叶知秋 发表于 2023-2-10 09:47
可以看看16楼的假设怎么样?哈哈
(引用自17楼)

如果是激进型的公司当然是有可能扩充的,前提是10个都是老板非常满意的程序员。

出40入42汤圆

发表于 2023-2-10 10:36:34 | 显示全部楼层
weavr 发表于 2023-2-10 10:27
如果是激进型的公司当然是有可能扩充的,前提是10个都是老板非常满意的程序员。 ...
(引用自19楼)

如果没有chatgpt的话,老板不满意程序员,也不会让其失业吗?
本质上,打工人失业不失业,只取决于企业单位的管理层基于现状做出的决策,跟有没有chatgpt关系不是很大
现在喊着chatgpt会让人失业的人,应该跟百多年前怕“机器换人”而罢工抗议的人想法差不多
但是现在的人口和生活质量倒是比以前增长了很多

出0入4汤圆

发表于 2023-2-10 10:39:21 来自手机 | 显示全部楼层
t3486784401 发表于 2023-2-9 23:59
只有我看到了 GPT 把 (-127+0.5, +127+0.5) 区间的 float 赋值给了 uint16_t 了么?

从功能上,这自动驾驶 ...

(引用自5楼)

大神看的仔细

出425入0汤圆

发表于 2023-2-10 12:09:25 | 显示全部楼层
wychao 发表于 2023-2-10 08:11
哪天能画pcb?
(引用自8楼)

PCB软件都有自动布线啊。如果这些专业的做得不好,gpt看来也是不好的。

出0入0汤圆

发表于 2023-2-10 12:48:35 | 显示全部楼层
落叶知秋 发表于 2023-2-10 10:36
如果没有chatgpt的话,老板不满意程序员,也不会让其失业吗?
本质上,打工人失业不失业,只取决于企业单 ...
(引用自20楼)

开除掉不太满意的程序员,还需要招新人来补上,新来的也未必能满意,还有可能更差,所以能勉强用的不会轻意换。
事实上,自动化,智能化已经让很多人失业。例如线材加工的企业,多年前每个工序都需要大量人工,现在一个人可以管理好几台自动化机器,老板是选择精简人员,而不是扩大生产让以前那些人工都有机器管理,毕竟市场需求就那么大。
我觉得机器让人失业长期来看不是坏事,就像刘强东说的实现了”共产主义“,机器干活,人可以轻松一些享受生活,也就是生活质量提高了。

出40入42汤圆

发表于 2023-2-10 13:59:21 | 显示全部楼层
weavr 发表于 2023-2-10 12:48
开除掉不太满意的程序员,还需要招新人来补上,新来的也未必能满意,还有可能更差,所以能勉强用的不会轻 ...
(引用自23楼)

好吧,关于这个话题的讨论就此打住吧,讨论下去会没完没了
希望chatgpt能够像工业革命那样成功,为人类社会带来新的活力,虽然我认为概率非常小

出50入255汤圆

发表于 2023-2-10 16:03:57 | 显示全部楼层
试试请chatgpt 写一下测试用例

出0入0汤圆

 楼主| 发表于 2023-2-10 20:22:01 | 显示全部楼层
重新让chargpt写了一下程序,要求它使用DAC和DMA,上一次的抗完全不见了:


附完整程序:

#include "stm32f10x.h"
#include <math.h>

#define DAC_DHR12R1_Address    0x40007410

void RCC_Configuration(void);
void GPIO_Configuration(void);
void DAC_Configuration(void);
void DMA_Configuration(void);

const uint16_t Sine12bit[32] = {
                      2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056,
                      3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,
                      599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647};

int main(void)
{
  RCC_Configuration();
  GPIO_Configuration();
  DAC_Configuration();
  DMA_Configuration();

  while (1)
  {
  }
}

void RCC_Configuration(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
}

void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void DAC_Configuration(void)
{
  DAC_InitTypeDef DAC_InitStructure;

  DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);

  DAC_Cmd(DAC_Channel_1, ENABLE);
}

void DMA_Configuration(void)
{
  DMA_InitTypeDef DMA_InitStructure;

  DMA_DeInit(DMA1_Channel3);
  DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_Address;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&Sine12bit;
  DMA_DIR = DMA_DIR_PeripheralDST;
  DMA_InitStructure.DMA_BufferSize = 32;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA1_Channel3, &DMA_InitStructure);

  DAC_DMACmd(DAC_Channel_1, ENABLE);
  DMA_Cmd(DMA1_Channel3, ENABLE);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2023-2-10 21:27:07 | 显示全部楼层
TINXPST 发表于 2023-2-10 20:22
重新让chargpt写了一下程序,要求它使用DAC和DMA,上一次的抗完全不见了:


(引用自26楼)

太神奇 了,这么好用。

出0入0汤圆

发表于 2023-2-10 21:30:30 | 显示全部楼层
TINXPST 发表于 2023-2-10 20:22
重新让chargpt写了一下程序,要求它使用DAC和DMA,上一次的抗完全不见了:


(引用自26楼)

楼主请教一下这是用的那个网址,方便分享一下吗

出0入0汤圆

 楼主| 发表于 2023-2-10 21:35:41 | 显示全部楼层
fenglove 发表于 2023-2-10 21:30
楼主请教一下这是用的那个网址,方便分享一下吗
(引用自28楼)

就是火热的 chat.openai.com 啊!

出200入2554汤圆

发表于 2023-2-11 12:27:35 | 显示全部楼层
本帖最后由 t3486784401 于 2023-2-11 12:33 编辑
TINXPST 发表于 2023-2-10 20:22
重新让chargpt写了一下程序,要求它使用DAC和DMA,上一次的抗完全不见了:


(引用自26楼)


然而挖了更多更深的坑:

a. 没有看到类似定时器的结构,如何确保 1kHz 发波频率?
从表格长度(32)来看,应该有一个 32kHz 的时间基准,但似乎连 DMA 的触发源配置都没找到。

b. PA4(DAC_OUT1) 配置成了 GPIO_Mode_AIN,这能输出电平?

c. DAC 寄存器 DHR12R1 在 F103 系列的物理地址是 0x40007408,
而文中给出的 0x40007410 则对应 DHR8R1,显然工作会发生异常。

----------------------------

当然也可以把这几个问题再行丢回给 AI,相信最终会写到满意。

编辑原因:发现更多坑

出16170入6148汤圆

发表于 2023-2-11 12:29:05 来自手机 | 显示全部楼层
t3486784401 发表于 2023-2-11 12:27
然而挖了更多更深的坑:

a. 没有看到类似定时器的结构,如何确保 1kHz 发波频率?

(引用自30楼)

有这个精力和水平,自己写更快了。

出0入0汤圆

 楼主| 发表于 2023-2-11 13:22:20 | 显示全部楼层
t3486784401 发表于 2023-2-11 12:27
然而挖了更多更深的坑:

a. 没有看到类似定时器的结构,如何确保 1kHz 发波频率?
(引用自30楼)

大神看得很细!

关于b)问题,冤枉机器了,做DA输出确实是配置成GPIO_Mode_AIN,这个我之前的程序就是这样跑的,绝对没问题:

GPIO_StructInit(&GPIO_InitStructure);
    // PA4 for sine wave
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
(以上是我之前用的程序)

关于a)问题机器马上就承认自己疏忽了然后更新的代码:



#include "stm32f10x.h"

#define DAC_DHR12R1_Address    0x40007410

uint16_t Sine12bit[32] = {
                      2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056,
                      3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,
                      599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647};

void DAC_Config(void)
{
  DAC_InitTypeDef DAC_InitStructure;
  DMA_InitTypeDef DMA_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);
  
  DMA_DeInit(DMA1_Channel3);
  DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_Address;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&Sine12bit;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
  DMA_InitStructure.DMA_BufferSize = 32;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel3, &DMA_InitStructure);

DAC_DMACmd(DAC_Channel_1, ENABLE);
DMA_Cmd(DMA1_Channel3, ENABLE);

DAC_Cmd(DAC_Channel_1, ENABLE);
}

void TIM6_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

TIM_TimeBaseStructure.TIM_Period = 7199;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);

TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);

TIM_Cmd(TIM6, ENABLE);
}

int main(void)
{
DAC_Config();
TIM6_Config();

while(1);
}





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2023-2-11 13:24:21 | 显示全部楼层
综合效果还是不错的。小的错误肯定有,但是确实可以作为编程帮手了。

出200入2554汤圆

发表于 2023-2-11 13:30:51 | 显示全部楼层
TINXPST 发表于 2023-2-11 13:24
综合效果还是不错的。小的错误肯定有,但是确实可以作为编程帮手了。
(引用自33楼)

作为 AI 已经很不容易了,一定程度上脱离了智障的范围,至少是通过了图灵测试。

大家对于它的担忧,应该类似于恐怖谷理论。

出200入2554汤圆

发表于 2023-2-11 13:34:57 | 显示全部楼层
TINXPST 发表于 2023-2-11 13:22
大神看得很细!

关于b)问题,冤枉机器了,做DA输出确实是配置成GPIO_Mode_AIN,这个我之前的程序就是这 ...
(引用自32楼)

仔细看了手册,确实是模拟输出模式时,GPIO 应配置为 AIN;

单从这点来看,这 AI 助手的搜集能力确实不一般

出0入0汤圆

 楼主| 发表于 2023-2-11 13:52:12 来自手机 | 显示全部楼层
其实,通过这2天的简单测试我发现,如何正确,清晰,具体地提问或者描述需要解决的问题是达到理想结果的关键!

出0入0汤圆

发表于 2023-2-11 15:06:46 | 显示全部楼层
代码太长,一次对话它可能没写完,填入继续,让它继续写出后面内容

出0入0汤圆

 楼主| 发表于 2023-2-11 15:35:22 | 显示全部楼层
118139 发表于 2023-2-11 15:06
代码太长,一次对话它可能没写完,填入继续,让它继续写出后面内容
(引用自37楼)

是的        

出0入0汤圆

发表于 2023-2-12 20:50:48 来自手机 | 显示全部楼层
t3486784401 发表于 2023-2-9 23:59
只有我看到了 GPT 把 (-127+0.5, +127+0.5) 区间的 float 赋值给了 uint16_t 了么?

从功能上,这自动驾驶 ...

(引用自5楼)

这就是四舍五入取整的常规做法,没毛病。

出200入2554汤圆

发表于 2023-2-12 23:45:56 | 显示全部楼层
dadatou 发表于 2023-2-12 20:50
这就是四舍五入取整的常规做法,没毛病。
(引用自39楼)

把取值含负数的 float,赋值给无符号的 uint16_t,你猜怎么着?

出0入16汤圆

发表于 2023-2-13 02:47:33 | 显示全部楼层
本帖最后由 Elex 于 2023-2-13 02:51 编辑
t3486784401 发表于 2023-2-9 23:59
只有我看到了 GPT 把 (-127+0.5, +127+0.5) 区间的 float 赋值给了 uint16_t 了么?

从功能上,这自动驾驶 ...
(引用自5楼)


我觉得是你搞错了
他的程序加上偏移量0.5,输出是0~1之间变化的,毕竟MCU输出不了负电压,单偏移量估计加错位置了

出200入2554汤圆

发表于 2023-2-13 14:56:26 | 显示全部楼层
Elex 发表于 2023-2-13 02:47
我觉得是你搞错了
他的程序加上偏移量0.5,输出是0~1之间变化的,毕竟MCU输出不了负电压,单偏移量估计加 ...
(引用自41楼)

前一句是 A*sin 运算,范围直接就 -127~+127

后一句 0.5 从效果上没法理解为偏移量:结果仍有负值

出0入16汤圆

发表于 2023-2-13 19:14:21 | 显示全部楼层
t3486784401 发表于 2023-2-13 14:56
前一句是 A*sin 运算,范围直接就 -127~+127

后一句 0.5 从效果上没法理解为偏移量:结果仍有负值 ...
(引用自42楼)

所以说它偏移量搞错位置了,应该是在乘于振幅之前加上0.5或者最后加上0.5倍的振幅。
但最后结果是UINT16,这样可以赋值给PWM控制寄存器
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 05:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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