855|13

18

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

micropython1.22.2无法编译开发板,1.20.0没问题。请教一下是啥原因? [复制链接]

 
  本帖最后由 scdyzjcq 于 2024-3-17 14:58 编辑

本人新手,手上有一个Black F407VE开发板,想学习一下micropython,按照网上的办法在WINDOWS系统里安装的虚拟机,虚拟机安装了Ubuntu64系统。按照帖子先后在micropython-1.17和micropython-1.20.0两个版本里几经折腾,能够顺利编译成功固件,下载到开发板里正常运行。今天看到micropython版本到了1.22.2了,就下载下来重新编译一下,到了最后一步。make BOARD=VCC_GND_F407VE,就如图所示就进行步下去了。我又到micropython-1.20.0里面去试了,结果编译正常。请教一下micropython-1.22.2改动了啥,要怎么操作才能编译?

 

最新回复

就是编译时显示的那些信息,复制过来就行   详情 回复 发表于 2024-3-31 18:11
点赞 关注
 
 

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

新版本谨慎使用,看看官方说明变更是什么

 
 
 

回复

685

帖子

0

TA的资源

纯净的硅(高级)

板凳
 

根据把错的文件,应该是时钟频率不支持,1.20的没找到(我这github经常连不上),可以看一下和这个有什么区别

原文部分

"""
This program computes I2S PLL parameters for STM32
processors supporting an I2S PLL in the clock tree.
Those processors are listed below in the mcu_support_plli2s[] list.
"""

import re
from collections import namedtuple


class MCU:
    def __init__(self, range_plli2sn, range_plli2sr):
        self.range_plli2sn = range_plli2sn
        self.range_plli2sr = range_plli2sr


mcu_default = MCU(range_plli2sn=range(50, 432 + 1), range_plli2sr=range(2, 7 + 1))

mcu_table = {"stm32f401xe": MCU(range_plli2sn=range(192, 432 + 1), range_plli2sr=range(2, 7 + 1))}

# list of stm32 processors that support an I2S PLL in the clock tree
mcu_support_plli2s = [
    "stm32f405xx",
    "stm32f401xe",
    "stm32f407xx",
    "stm32f411xe",
    "stm32f412zx",
    "stm32f413xx",
    "stm32f427xx",
    "stm32f429xx",
    "stm32f439xx",
    "stm32f446xx",
    "stm32f722xx",
    "stm32f733xx",
    "stm32f746xx",
    "stm32f756xx",
    "stm32f767xx",
    "stm32f769xx",
]


# The following function calculates the multiplier (plli2sn) and divider (plli2sr) parameters
# for the I2S PLL that leads to the best possible accuracy for the I2S sampling clock.
# This is done by creating a set of candidate parameters (plli2sn, plli2sr)
# and then determining which candidate parameters lead to a sampling clock frequency (Fs)
# that most closely matches the desired sampling clock frequency (I2S rate).
#
# A description of the clock tree helps to understand this function:
# The clock tree on a STM32 device is complex.  A subset of the clock tree is used for I2S, as follows:
# 1. HSE clock is divided by the PLLM divider and feeds the I2S PLL (called PLLI2S in the STM32 clock tree).
# 2. The output frequency of the I2S PLL is controlled by two parameters, plli2sn and plli2sr.
# 3. The clock output of the I2S PLL is called PLLI2SCLK
# 4. PLLI2SCLK is gated into the I2S peripheral, where the name changes to I2SxCLK
# 5. I2SxCLK is an input to the I2S clock generator.
# 6. The output frequency of the I2S clock generator is controlled by
#    two configuration parameters, I2SDIV and ODD.
# 7. The output of the I2S clock generator is the audio sampling frequency (Fs),
#    which is used to create the signal at the I2S WS output pin.
#
# Example references:
#    RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439
#    - section 6.3.23 RCC PLLI2S configuration register (RCC_PLLI2SCFGR)
#    - section 28.4.4 Clock generator
#    RM0385 Reference manual STM32F75xxx and STM32F74xxx
#    - section 5.3.23 RCC PLLI2S configuration register (RCC_PLLI2SCFGR)
#    - section 32.7.5 Clock generator
#
# The calculations below mimic the fixed-point integer calculations in the STM32 I2S driver,
# in the function HAL_I2S_Init().
def compute_plli2s_table(hse, pllm):
    plli2s = namedtuple("plli2s", "bits rate plli2sn plli2sr i2sdiv odd error")
    plli2s_table = []
    for bits in (16, 32):
        for rate in (8_000, 11_025, 12_000, 16_000, 22_050, 24_000, 32_000, 44_100, 48_000):
            plli2s_candidates = []
            for plli2sn in mcu.range_plli2sn:
                for plli2sr in mcu.range_plli2sr:
                    I2SxCLK = hse // pllm * plli2sn // plli2sr
                    if I2SxCLK < 192_000_000:
                        # compute I2S clock generator parameters: i2sdiv, odd
                        tmp = (((I2SxCLK // (bits * 2)) * 10) // rate) + 5
                        tmp = tmp // 10
                        odd = tmp & 1
                        i2sdiv = (tmp - odd) // 2
                        Fs = I2SxCLK / ((bits * 2) * ((2 * i2sdiv) + odd))
                        error = (abs(Fs - rate) / rate) * 100
                        plli2s_candidates.append(
                            plli2s(
                                bits=bits,
                                rate=rate,
                                plli2sn=plli2sn,
                                plli2sr=plli2sr,
                                i2sdiv=i2sdiv,
                                odd=odd,
                                error=error,
                            )
                        )
            # sort based on error
            plli2s_candidates_sorted = sorted(plli2s_candidates, key=lambda x: x.error)
            # select the best candidate
            plli2s_table.append(plli2s_candidates_sorted[0])
    return plli2s_table

 

 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

4
 
本帖最后由 scdyzjcq 于 2024-3-25 20:20 编辑

可是我试直接在micropyth-1.22.2 /ports/stm32/编译的它里面的板子,没做任何改动,试了好几个都是这样。根据错误提示对比了1.20和1.22的micropyth-1.22.2 /ports/stm32/boards

/的文件,1.20版本里面没有plli2svalues.py这个文件,只有pllvalues.py。1.22.2比1.20版本多了一个编译出问题的plli2svalues.py文件,删除它还不行。 plli2svalues.py (7.54 KB, 下载次数: 0)
pllvalues.py (9.87 KB, 下载次数: 0)

pllvalues.py (9.68 KB, 下载次数: 1)

 

点评

最后那个是1.20的  详情 回复 发表于 2024-3-25 20:21
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

5
 
scdyzjcq 发表于 2024-3-25 20:19 可是我试直接在micropyth-1.22.2 /ports/stm32/编译的它里面的板子,没做任何改动,试了好几个都是这样。根 ...

最后那个是1.20的

 
 
 

回复

1万

帖子

25

TA的资源

版主

6
 

把板子的定义文件传上来看看

 
 
 

回复

1万

帖子

25

TA的资源

版主

7
 

我尝试编译是正常的,请检查以下几个方面:

  • 检查arm gcc编译器版本(arm-none-eabi-gcc -v),尽量用新版本,不要用ubuntu自带的,自带的编译器版本太低了。 目前最新版本是 v13.2下载地址是:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
  • 编译前用 clean 指令清除以前的编译的临时文件,如 make -C ports/stm32/ BOARD=VCC_GND_F407VE clean;避免编译时旧的临时文件没有被更新造成问题。

 

另外,注意一般不要用root用户编译,这样系统容易出问题。

 

还有可以在编译指令最后加上 -jn 开关,并行编译以加快编译速度。n可以根据你的CPU的线程数设定,几核几线程,就设置多少,比如4核8线程,,就设为 -j8。

 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

8
 

安装版主的回复重新下载安装新版本的arm-none-eabi-gcc ,我原来是在官网下载的micropython1.22.2。今天安装论坛里的教程重新进行了一遍,结果还是那样,在原来下载的1.20.0和1.21.0两个版本都可以正常编译,固件下载到单片机都可以正常运行,源码里的VCC_GND_F407VE开发板外部晶振频率是25M,,没在出错文频率范围内,我改成8M还是不行,默认的PYBOARD的晶振频率本来就是8M,直接编译它还是一样的提示。

stm32f4xx_hal_conf.h (407 Bytes, 下载次数: 0)
mpconfigboard.h (5.87 KB, 下载次数: 0)

board_init.c (167 Bytes, 下载次数: 0)

 

 

 

点评

我这里编译上正常的,把完整log贴出来看看  详情 回复 发表于 2024-3-30 18:41
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

9
 

 

 

 
 
 

回复

1万

帖子

25

TA的资源

版主

10
 
scdyzjcq 发表于 2024-3-30 16:25 安装版主的回复重新下载安装新版本的arm-none-eabi-gcc ,我原来是在官网下载的micropython1.22.2。今天安 ...

我这里编译上正常的,把完整log贴出来看看

点评

能详细说说该贴哪个文件吗?不是很懂。谢谢了!  详情 回复 发表于 2024-3-31 11:35
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

11
 
dcexpert 发表于 2024-3-30 18:41 我这里编译上正常的,把完整log贴出来看看

能详细说说该贴哪个文件吗?不是很懂。谢谢了!

点评

就是编译时显示的那些信息,复制过来就行  详情 回复 发表于 2024-3-31 18:11
 
 
 

回复

1万

帖子

25

TA的资源

版主

12
 
scdyzjcq 发表于 2024-3-31 11:35 能详细说说该贴哪个文件吗?不是很懂。谢谢了!

就是编译时显示的那些信息,复制过来就行

 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

13
 

chenq@chenq-virtual-machine:~/micropython/ports/stm32$ make BOARD=my_board
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
mkdir -p build-my_board/genhdr
GEN build-my_board/genhdr/pins.h
GEN build-my_board/genhdr/plli2stable.h
  File "boards/plli2svalues.py", line 74
    for rate in (8_000, 11_025, 12_000, 16_000, 22_050, 24_000, 32_000, 44_100, 48_000):
                     ^
SyntaxError: invalid syntax
Makefile:627: recipe for target 'build-my_board/genhdr/plli2stable.h' failed
make: *** [build-my_board/genhdr/plli2stable.h] Error 1
make: *** Deleting file 'build-my_board/genhdr/plli2stable.h'
chenq@chenq-virtual-machine:~/micropython/ports/stm32$

 

 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

14
 

问题已经解决了,我原来虚拟机安装的是Ubuntu16.10版本,后来重新建立了虚拟机,安装了Ubuntu18.04版本,就可以正常编译了。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表