环境搭建
环境搭建就不多说了,按照官方的wiki进行搭建就好了。
移植步骤
说明
micropytho使用gcc进行编译,因此使用官方的lpcopen_2_10_lpcxpresso_ea_devkit_1788开发包。将MCUXpresso IDE也下载安装好,后面有用。
需要的文件
ports目录下有个minimal目录,这是micropython的最小移植,后面都所有操作都在这个移植的基础上进行。
下面看看,这个移植里面都有哪些文件:
文件 | 说明 |
---|---|
main.c | micropython的入口,初始化啥的都在这了 |
Makefile | 这个不多说,编译就靠这个了 |
mpconfigport.h | micropython的功能配置,根据自己的需要进行更改 |
mphalport.h | 暂时用不到 |
qstrdefsport.h | 暂时用不到 |
stm32f405.ld | GNU链接文件,需要根据芯片和板子进行编写 |
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
上一篇:LPC1788的IIC使用
下一篇:lpc1788移植u-boot-2010.03之spi flash移植
推荐阅读最新更新时间:2024-11-11 10:57
推荐帖子
- 谢谢了stm32f107 做读写U盘,请问有没有官方的源代码。。谢谢了
- 我这里只有官方的模板程序,没有源代码,接触stm32时间又不长,也看不懂。求助一下。谢谢了stm32f107做读写U盘,请问有没有官方的源代码。。谢谢了我把所有关于USB操作的都上传了你搜索一下你把不明白的帖出来一下回复楼主忘密码了的帖子
- 忘密码了 stm32/stm8
- 提问+MSP430定时器连续计数模式下TACCRO的值是否改变?
- MSP430定时器连续计数模式下,当计数到0XFFFF时TACCRO的值是否改变?也就是说会复位吗?官方例程中的偏移量是怎么回事啊?(是为了计数到0XFFFF时TACCR0复位的时候重新赋值吗?)提问+MSP430定时器连续计数模式下TACCRO的值是否改变?不会自己变好像,需要认为写入新值才会改变。你所说的偏移量是不是是指在TACCR0中断时给TACCR0寄存器再附一个新值。例如在连续模式下,如果要设定一个固定的中断时间例如1秒,那么到1s的时候TACCR0中断时再给TACCR0加上
- jxsl 微控制器 MCU
- 基础知识:车载传感器的应用与分类
- 将当今的汽车说成是电子产品毫不过分,而且有人预言今后还会在安全、环保和信息化这三个领域加速实现电子化。这一趋势今后肯定只会加速而不可能停滞。因为汽车厂商在安全、环保和信息化这三个领域里早就提出了加速实现电子化的方针。而其中最值得关注的当数“安全”领域。汽车安全技术的重心正由被动安全转向主动安全,特别是提前检测障碍物的传感器也开始呈现多样化趋势。常将传感器的功能与人类5大感觉器官相比拟:光敏传感器――视觉声敏传感器――听觉气敏传感器――嗅觉化学传感器――味
- 小娜 汽车电子
- 放大器的应用
- 放大器的应用如果下载的软件需要解压密码,密码可能是:wwww.ec66.com或者www.ecbbs.com如果上述密码还不能解压,可能原因有两个:1、下载过程出错,重新下载该文件2、您所使用的WINRAR版本太低,请使用V3.0以上版本放大器的应用
- fighting 模拟电子
- 做开关电源时出现的问题
- 请教各位大侠,当做一个开关电源的时候,开关管没有完全导通会跟什么有关系呢?做开关电源时出现的问题笼统分析起来原因估计很多,往往是原因只有一个,比如控制芯片工作了么?有振荡信号么?要看什么原理的电源了,,跟你的能力有关!和你的知识有关!还和你的见识有关!没完全导通,肯定上驱动电压低了呗。
- laoshi 电源技术
- 小智漫画丨何为振荡电路
- 小智漫画丨何为振荡电路这个系列好优秀啊 谢谢支持,就是不知道怎么传上来自动压缩模糊了 鼠标点击图片,即可将图片另一窗口显示。前后滚动鼠标滚轮,可以将图片放大缩小。 不过,要在几幅图片的篇幅中讲清楚振荡电路,那是不可能的。更何况图片中的电路有些元件是胡乱标注,有些电路根本就是错误的。非常赞,加油,好好学习,天天向上,加油,每一个人!!!
- NGI123 测试/测量