历史上的今天
返回首页

历史上的今天

今天是:2024年08月25日(星期日)

正在发生

2021年08月25日 | MicroPython之LPC1788移植

2021-08-25 来源:eefocus

环境搭建

环境搭建就不多说了,按照官方的wiki进行搭建就好了。


移植步骤


说明

micropytho使用gcc进行编译,因此使用官方的lpcopen_2_10_lpcxpresso_ea_devkit_1788开发包。将MCUXpresso IDE也下载安装好,后面有用。


需要的文件

ports目录下有个minimal目录,这是micropython的最小移植,后面都所有操作都在这个移植的基础上进行。

下面看看,这个移植里面都有哪些文件:


文件说明
main.cmicropython的入口,初始化啥的都在这了
Makefile这个不多说,编译就靠这个了
mpconfigport.hmicropython的功能配置,根据自己的需要进行更改
mphalport.h暂时用不到
qstrdefsport.h暂时用不到
stm32f405.ldGNU链接文件,需要根据芯片和板子进行编写
uart_core.c这个移植使用串口访问板子,因此这里是串口收发的实现

So,

  • 拷贝一份minimal,然后重命名为lpc17xx_40xx,里面的stm32f405.ld重命名为lpc1788.ld。

  • 然后从lpcopen_2_10_lpcxpresso_ea_devkit_1788中拷贝lpc_chip_177x_8x到这并重命名为Library,将lpc_board_ea_devkit_1788拷贝到boards并重命名为Edeboy(这是我板子的名字)。

  • 此外,从lpcopen_2_10_lpcxpresso_ea_devkit_1788periph_uart_rbexamplesrc中拷贝cr_startup_lpc177x_8x.c、sysinit.c到下图中位置。

    到此,准备工作完成!!!

链接文件

.ld文件一般厂家都会提供,但是lpcopen_2_10_lpcxpresso_ea_devkit_1788开发包里并没有这个,因此前面安装的MCUXpresso IDE就派上用场了。导入开发包,并编译一次periph_uart_rb工程,就可以得到了。

我将这三个文件合为了一个。


配置文件

mpconfigport.h 中作如下改动


#define MICROPY_HW_BOARD_NAME "Edeboy"

#define MICROPY_HW_MCU_NAME "LPC1788"


串口


#if MICROPY_MIN_USE_LPC1788_MCU


#include "board_api.h"


// Receive single character

int mp_hal_stdin_rx_chr(void)

{

    unsigned char c = 0;

#if MICROPY_MIN_USE_STDOUT

    int r = read(0, &c, 1);

    (void)r;

#elif MICROPY_MIN_USE_LPC1788_MCU

    c = Board_UARTGetChar();

#endif

    return c;

}


// Send string of given length

void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len)

{

#if MICROPY_MIN_USE_STDOUT

    int r = write(1, str, len);

    (void)r;

#elif MICROPY_MIN_USE_LPC1788_MCU

    while (len--)

    {

        Board_UARTPutChar(*str++);

    }

#endif

}


#endif


Make file

make file只改动这部分,别的都保持原样。

  • INC是头文件搜索路径,DEFS是宏定义,这里定义了__CODE_RED、__USE_LPCOPEN、DCORE_M3这三个宏,因为源码里需要打开,不然编译失败。

  • LDFLAGS将stm32f405.ld改为lpc1788.ld。

  • 接下来重点说一下这个CFLAGS里边的选项。LPC1788是M3内核,因此-mcpu=cortex-m3,-march=armv7-m(指令集),-mfloat-abi=soft(M3没有硬件浮点),去掉-mfpu,使用默认值即可。-Werror表示把警告当错误处理,这个要求太高,去掉。debug选项增加一个宏DEBUG_ENABLE。

  • SRC_C为源文件路径。


INC += -I.

INC += -I$(TOP)

INC += -I$(BUILD)

INC += -I./boards/Edeboy/inc

INC += -I./Libraries/inc


ifeq ($(CROSS), 1)

DFU = $(TOP)/tools/dfu.py

PYDFU = $(TOP)/tools/pydfu.py

DEFS = -D__CODE_RED -D__USE_LPCOPEN -DCORE_M3

CFLAGS_CORTEX_M3 = -mthumb -march=armv7-m -mabi=aapcs -mcpu=cortex-m3 -mfloat-abi=soft -fsingle-precision-constant -Wdouble-promotion

CFLAGS = $(INC) -Wall -std=c99 -nostdlib $(CFLAGS_CORTEX_M3) $(COPT) $(DEFS)

LDFLAGS = -nostdlib -T lpc1788.ld -Map=$@.map --cref --gc-sections

else

LD = gcc

CFLAGS = -m32 $(INC) -Wall -Werror -std=c99 $(COPT)

LDFLAGS = -m32 -Wl,-Map=$@.map,--cref -Wl,--gc-sections

endif


# Tune for Debugging or Optimization

ifeq ($(DEBUG), 1)

CFLAGS += -O0 -ggdb -DDEBUG_ENABLE

else

CFLAGS += -Os

CFLAGS += -fdata-sections -ffunction-sections

endif


LIBS =


SRC_C =

    main.c

    uart_core.c

    lib/utils/printf.c

    lib/utils/stdout_helpers.c

    lib/utils/pyexec.c

    lib/libc/string0.c

    lib/mp-readline/readline.c

    $(BUILD)/_frozen_mpy.c

    cr_startup_lpc177x_8x.c

    sysinit.c

    ./boards/Edeboy/src/board_sysinit.c

    ./boards/Edeboy/src/board.c

    ./Libraries/src/sysinit_17xx_40xx.c

    ./Libraries/src/clock_17xx_40xx.c

    ./Libraries/src/sysctl_17xx_40xx.c

    ./Libraries/src/gpio_17xx_40xx.c

    ./Libraries/src/iocon_17xx_40xx.c

    ./Libraries/src/uart_17xx_40xx.c


编译

  • make clean —— 清除编译结果

  • make CROSS=1 —— 编译


启动流程

大致说一下启动流程:

  • 芯片上电

  • 进入复位中断ResetISR

  • 复位中断程序中加载数据到SRAM、初始化一下bss段

  • 调用SystemInit()配置中断向量表、系统时钟、片内外设、板载外设

  • 调用main()初始化micropython

推荐阅读

史海拾趣

Galaxy ( Bel )公司的发展小趣事

风华邦科(FH-BK)公司发展的五个故事

故事一:技术创新引领发展

风华邦科自成立以来,便致力于技术创新与研发。公司于2019年引进了当时国内先进的一体成型电感生产设备,实现了全流程生产线,生产效率显著提升。此后,公司继续加大技术投入,2021年更是引进了5条全自动生产线,日均产量达到100万个电感器。这些技术革新不仅提高了生产效率,还确保了产品的高精度和高可靠性,使风华邦科在电子元器件细分市场上占据了领先地位。

故事二:国际化布局与专利突破

风华邦科在科技创新的道路上不断前行,不仅在国内市场取得显著成绩,还积极向国际市场拓展。公司注重知识产权的全球布局,已获得多项国外授权发明专利,包括在韩国和日本获得的关于掺杂钙钛矿锡酸钡材料及其制备方法的专利。这些国际专利的获得,标志着风华邦科在高端材料研发方面取得了重要突破,也为公司进一步开拓国际市场奠定了坚实基础。

故事三:产学研合作推动产业升级

风华邦科深知,单凭自身力量难以实现跨越式发展。因此,公司积极与高校及科研机构开展产学研合作,共同攻克技术难题。近年来,公司与清华大学、华中科技大学等高校开展了多项科研课题,涉及电子元器件的新材料、新工艺等多个领域。这些合作不仅提升了公司的技术研发能力,还促进了科技成果的转化与应用,推动了公司的产业升级与转型。

故事四:军品配套与质量管理

风华邦科在军用电子元器件领域也取得了显著成绩。公司始终坚持“安邦兴国、科技领先”的企业宗旨,不断加强技术创新和质量管理工作。公司通过了多项军工质量管理体系认证和保密资格认证,并列入总装备部《军用电子元器件科研生产单位目录》。公司现拥有七条完整的产品生产线,能够为用户提供电子元器件的一站式采购服务,产品广泛应用于航天、航空、船舶等军工领域。

故事五:环保生产与社会责任

在快速发展的同时,风华邦科始终不忘履行社会责任。公司积极响应国家环保政策,践行绿色生产理念。通过引入现代化自动化生产线、制定双碳实施方案、推广绿色工艺新技术等措施,公司有效降低了生产过程中的能耗和碳排放量。此外,公司还积极参与社会公益活动,为地方经济发展和社会进步贡献了自己的力量。这些举措不仅提升了公司的社会形象,也为其可持续发展奠定了坚实基础。

Apx-Crystal公司的发展小趣事

随着全球化进程的加速推进,Apx-Crystal公司意识到拓展国际市场的重要性。公司制定了详细的国际化战略,通过参加国际展览、设立海外分支机构、与当地企业建立战略合作关系等方式,积极开拓海外市场。凭借优质的产品和服务,Apx-Crystal逐渐赢得了国际客户的信任和认可,产品远销欧美、亚太等多个地区,实现了从国内市场向国际市场的跨越式发展。

Eagle-Picher公司的发展小趣事

1958年,Eagle-Picher公司的电池技术得到了重大的突破。在美国宇航局的探索者1号卫星上,Eagle-Picher的电池成功发射到太空,为卫星的运行提供了稳定的电源。这一里程碑式的事件标志着Eagle-Picher的电池技术在太空探索领域的应用达到了新的高度,也为公司赢得了更多的科研和商业机会。

Hpc Technology Inc公司的发展小趣事

进入21世纪后,Eagle-Picher公司迎来了新的发展机遇。2017年,OMGroup斥资1.7亿美元收购了Eagle-Picher公司,这一举措为Eagle-Picher注入了新的资金和资源。在新的资本支持下,Eagle-Picher加大了在电池技术领域的研发投入,不断推出新的产品和解决方案。同时,公司也积极拓展国际市场,与全球多家知名企业建立了合作关系。这些新的发展机遇为Eagle-Picher的未来发展奠定了坚实的基础。

ATP [ATP Electronics]公司的发展小趣事

ATP深知,优质的产品需要优质的服务来支撑。因此,公司一直致力于提升客户服务水平,为客户提供最优质的产品、最具竞争力的价格和最优质的服务。ATP通过建立完善的售后服务体系,及时解决客户在使用过程中遇到的问题,赢得了客户的信任和好评。同时,公司还积极开展市场调研,了解客户需求,不断优化产品和服务,以满足市场的不断变化。

这五个故事展示了ATP Electronics在电子行业中的发展历程和取得的成就。通过技术创新、推出工业级产品、践行环保理念、实施全球化战略以及提升优质服务,ATP成功地在激烈的市场竞争中脱颖而出,成为了闪存卡市场的领军企业。

Densitron公司的发展小趣事

人才是企业发展的关键因素。Densitron公司非常重视人才的培养和团队建设。公司建立了一套完善的人才培养机制,通过内部培训、外部学习等方式,不断提升员工的技能水平和综合素质。同时,公司还注重团队文化建设,鼓励员工之间的协作与交流。这些举措使得Densitron公司拥有一支高素质、高效率的团队,为公司的持续发展提供了有力保障。

问答坊 | AI 解惑

linux 下一步nor flash 的驱动

linux内核对nor flash的驱动都是通过cfi的,我可不可直接不用cfi接口,直接把nor flash的驱动挂在mtd下面,另外对nor flash的地址是否需要ioremap?请高手们指教,谢谢!…

查看全部问答>

求助:VxWorks的中断响应时间

请问如何测试VxWorks的中断响应时间、系统启动时间?? 我使用的是S3C2440的板子,系统是VxWorks5.5 知道的话说的详细点,谢谢了…

查看全部问答>

世上最小的电脑硬盘在哪里生产?

问下各问同事,请问世上最小的电脑硬盘是在哪里生产的?有的说是在贵州,是不是啊?我在百度里找了下,没有找到5555555…

查看全部问答>

急!!(evc4.0+ado3.1)create database 不成功

程序段如下:         hr=CLSIDFromProgID(g_szADOCE30ConnProgID,&tClsid);         hr= CoCreateInstance(tClsid,NULL,CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER,IID_Connection,(LPVOID*)&m_pADOCEC ...…

查看全部问答>

LM3S8962板子学习一 共同学习

今天收到了板子。先熟悉学习。再做个毕来设计。 有准备学习的兄弟可以给我留言,我们可以共同讨论共同进步。   有问题记得在这里留言哟。 [ 本帖最后由 zhiha258 于 2011-1-21 16:52 编辑 ]…

查看全部问答>

网上找不STM32L的MDK,IAR模板啊!

官方有提供数据手册,编程手册。MDK4.13也支持了STM32L,但是没有模板怎么用啊? 不过我在MDK4.13里的BORD文件夹下找到STM32L的工程例子。还是不怎么放心。而且,现在STM32L似乎还买不到!…

查看全部问答>

小型晶体高值电阻进行测量的样本安装

在测量尺寸较小样本时,样本安装基底可能会成为测量误差的主要来源,这是其体积和表面电阻率造成的。通过(可能被污染的)基底表面阻止漏电流[1]的方法是,使用两个分开的绝缘片,而不是将样本放置在一个绝缘片上。为了简化对不同尺寸小型样本的 ...…

查看全部问答>

求帮助MSP430G2553串口需要怎么调试

MSP430G2553串口需要怎么调试  我是新手   试了很多次 没反应  什么串口调试工具比较好  求大神帮助…

查看全部问答>

射频宽带放大器具有哪些特点,以及有哪些方面的应用

射频宽带放大器具有哪些特点,以及有哪些方面的应用。在此先谢谢各位了哈…

查看全部问答>