系列文章目录
copilot和chatgpt王者之争实测第二篇
继续用chatgpt完成配置
上节配置过程重述一下:
在STM32CubeMX中配置STM32H750的CAN总线,使其在120MHz的APB1时钟下以250kbps的速率运行,需要正确设置CAN总线的位定时。位定时包括预分频器、时间段1(包括传播时间段和相位缓冲段1)、时间段2(相位缓冲段2)以及重新同步跳跃宽度(Resynchronization Jump Width, RJW)。
这里是如何计算和配置CAN位定时的一般过程:
打开STM32CubeMX并选择您的STM32H750项目。
3 在"Pinout & Configuration"选项卡中,激活您想要使用的CAN接口。
4 在"Configuration"选项卡中,找到并点击"CAN Configuration"来配置CAN。
在CAN配置窗口中,您需要设置位定时参数。位定时参数的计算取决于APB1时钟频率和所需的CAN总线速率。
通常,CAN总线的位时间由1个同步段(总是1个时间单位)、时间段1和时间段2组成。位时间的总和应该是时间量子(Time Quanta, TQ)。例如,如果您选择一个位时间由16个TQ组成,您可以将时间段1设置为11个TQ(包括传播段),时间段2设置为4个TQ,同步段为1个TQ。
第四项我有点看不懂,然后我继续问,这次换成gpt3.5,gpt4收费的有条数限制。一般比较关键的在用版本4.
不断的问和回答,真的是一本正经的胡说八道,完全靠gpt或者其他AI目前看来不行。特别是这种专业很强的问题。
所以,暂时我们还无需担心失业。按照gpt回答的方法,压根做出来就不对。
为了配置STM32H7的CAN控制器以实现250K的通信速率,您可以按照以下步骤进行配置:
打开STM32CubeMX并创建一个新的工程。
选择您的目标STM32H7微控制器型号。
打开 “Pinout & Configuration” 选项卡,将CAN引脚分配给合适的引脚。
进入 “Peripherals” 选项卡,启用CAN控制器。
在 “Configuration” 子选项卡中,进行以下参数设置:
Mode: 设置为 “Normal”。
Prescaler: 根据APB1时钟频率和所需的通信速率计算得出。对于250K的通信速率,可以使用以下公式计算:[ \text{Prescaler} = \frac{\text{APB1时钟频率}}{250000 \times \text{TQ数量}} ] 其中,TQ数量为时间段1和时间段2的总和加上1。
Time Seg1: 设置时间段1的长度,通常为TQ数量的一半。
Time Seg2: 设置时间段2的长度,通常为TQ数量的四分之一。
其他参数保持默认值或根据需要进行调整。
生成代码并将其导入到您的工程中。
以上是一个简单的Cubemx配置CAN的例子,具体的设置可能会因为不同的STM32系列微控制器而有所不同。详细的设置步骤可以参考ST官方的文档。
要在STM32H7系列微控制器上配置CAN总线以获得250kbps的通信速率,您需要计算出位定时参数,这些参数包括预分频器(Prescaler)值、时间段1(Time Seg1)和时间段2(Time Seg2)。这些参数会影响CAN总线的位时间(Bit Time)。
STM32的CAN位时间由以下几个部分组成:
同步段(Sync Seg):总是1个时间量化单元(Time Quantum,TQ)。
时间段1(Time Seg1):包括传播段和相位缓冲段1,可以是1到16个TQ。
时间段2(Time Seg2):相位缓冲段2,可以是1到8个TQ。
位时间(Bit Time):Sync Seg + Time Seg1 + Time Seg2。
位时间(Bit Time)是由APB1时钟通过预分频器(Prescaler)分频得到的。在您的情况下,APB1时钟是120MHz。
假设我们需要符合CAN规范的采样点位置大约在75%,我们可以选择:
Sync Seg = 1 TQ
Time Seg1 = 11 TQ (包括传播段和相位缓冲段1)
Time Seg2 = 4 TQ (相位缓冲段2)
这样,总的Bit Time就是1 + 11 + 4 = 16 TQ。
接下来,我们需要计算预分频器(Prescaler)的值。预分频器的计算公式是: [ \text{Prescaler} = \frac{\text{APB1时钟频率}}{\text{所需的CAN速率} \times \text{Bit Time}} ]
对于250kbps的CAN速率,预分频器的计算如下: [ \text{Prescaler} = \frac{120,000,000}{250,000 \times 16} = 30 ]
因此,您的参数设置应该是:
Prescaler = 30
Time Seg1 = 11
Time Seg2 = 4
SJW (重新同步跳跃宽度) = 1 (通常设置为Time Seg2的值或更小)
请注意,这些参数可能需要根据您的网络条件和电缆长度进行微调。您应该始终确保通信质量并在必要时使用示波器检查信号完整性。
在STM32CubeMX中,您可以在CAN配置界面中输入这些参数,然后生成初始化代码。如果您使用的是bxCAN(不是FDCAN),请确保选择正确的CAN实例,并在需要时配置相关的GPIO引脚。
好的,为了在STM32H7微控制器上通过APB1时钟120MHz配置CAN控制器以达到250kbps的波特率,parameter settings中的所有配置应该如下:
Prescaler (预分频器): 30 这个值是通过公式计算得到的:Prescaler = APB1时钟频率/(CAN波特率 x 位时间) = 120000000/(250000 x 16) = 30
Time Seg1 (时间段1): 11 个时间量化单元 这包含了传播时间和相位缓冲区1,根据经验值设置为11。
Time Seg2 (时间段2): 4 个时间量化单元
这是相位缓冲区2,根据经验值设置为4。
Synchronisation Jump Width (SJW,重新同步跳变宽度): 1 这通常设置为Time Seg2的值或者更小。
CAN Mode: Normal 设置为正常模式。
Sample Point: 75% 采样点位置设置为75%,这是CAN协议推荐的位置。
CAN Clock Source: Internal CAN时钟源设置为内部,使用APB1时钟。
Time Triggered Mode: Disable 关闭时间触发模式。
Automatic Exit from Sleep: Enable 允许从睡眠模式自动唤醒。
Transmitt FIFO Queue Mode: Disable 关闭TX FIFO队列模式。
Receive FIFO Locked Mode: Disable 关闭RX FIFO锁定模式。
Bit Timing Calculate: Deactivate 取消位定时计算,使用手动配置的值。
请根据实际应用和总线条件调整这些参数。这是初始化CAN以达到250kbps所需的全部parameter settings配置。
不过,作为一些辅助手段,搞清楚一些概念还是没问题的。然后重新计算,获取正确的值。
按照ai回答,做出来不对。或许是我理解不对?看来还是得弄明白整个can的概念自己配置才好。
不过,从ai回答来看,很多基本概念是一点问题没有。只是组合出来就不对了。