初级会员

- 积分
- 81
- 金钱
- 81
- 注册时间
- 2012-8-16
- 在线时间
- 8 小时
|
本帖最后由 yuanruizhang 于 2016-1-12 11:28 编辑
这今天公司没太多工作,研究了一下maple,但是没有平台测试(板子在家里 )。maple写程序就非常简单,这个不就说了,不了解的可以研究一下arduino两个类似的。在这里主要就是怎么怎么在maple下兼容原子的mini的板子。在maple下软件主要分为两个部分,一个是bootloader,这个主要就在maple下下载程序使用的,maple的板子默认使用的是PA5做状态灯,而原子的板子上的led有两个这里就用PD2了;在maple文件夹下找到bootloader文件夹。
maple-ide-0.0.12-windowsxp32\hardware\leaflabs\bootloaders\maple
我是用source insight打开文件,全是C语言了,easy!首先查看main文件:里面有很多个子函数,先不管他查看main函数找到setupLED();
int main (void) {
systemReset();
setupCLK();
setupLED();
setupUSB();
strobePin (GPIOA,5,5,0x50000); /* start indicator */
if (checkUserCode(USER_CODE_RAM)) {
jumpToUser(USER_CODE_RAM);
}
while (1) {
/* hack to perform the dfu write operation AFTER weve responded
to the host on the bus */
if (copyLock) {
dfuCopyBufferToExec();
copyLock = FALSE;
dfuAppStatus.bwPollTimeout0 = 0x00;
dfuAppStatus.bState = dfuDNLOAD_SYNC;
}
}
}
进入到子函数就可以看到LED灯的配置了,首先是配置APB2配置,maple使用的PA5,我们要改成使用PD2,非常easy吧。接下来直接修改就可以了。
void setupLED (void) {
u32 rwmVal; /* read-write-modify place holder var */
/* Setup APB2 (GPIOA) */
rwmVal = GET_REG(RCC_APB2ENR);
rwmVal |= 0x00000020; //0x00000004;
SET_REG(RCC_APB2ENR,rwmVal);
/* Setup GPIOA Pin 5 as PP Out */
SET_REG(GPIO_CRL(GPIOD), 0x00000100); //SET_REG(GPIO_CRL(GPIOA), 0x00100000);
/*
rwmVal = GET_REG(GPIO_CRL(GPIOA));
rwmVal &= 0xFF0FFFFF;
rwmVal |= 0x00100000;
SET_REG(GPIO_CRL(GPIOA),rwmVal);
setPin(GPIOA,5);
*/
rwmVal = GET_REG(GPIO_CRL(GPIOD));
rwmVal &= 0xFFFFF0FF;
rwmVal |= 0x00000100;
SET_REG(GPIO_CRL(GPIOD),rwmVal);
setPin(GPIOD,2);
}
然后在maple_regs.h中添加#define GPIOD ((u32)0x40011400)
led io配置修改完了,剩下就是修改亮灯的地方了,其实上面的配置修改完了,剩余的点灯的地方就全在main.c这个文件里面了,所以就在main文件中找到strobePin(GPIOA,5,X,X);这样的语句,全部修改成strobePin(GPIOD,2,X,X);就可以了。
接下就要编译bootloader。这是需要电脑安装有arm-none-eabi-gcc就可以编译,如果没有安装也不要急在maple文件夹里面就有maple-ide-0.0.12-windowsxp32\hardware\tools\arm\bin。可以将这个路径添加到环境变量也可以不添加,随你自己了。
接下就开始编译。在编译之前需要手动在makefile所在目录下创建几个文件夹:build,build\usb_lib,build\stm32_lib.完成之后就可以编译了。
注意:因为要使用makefile来进行编译,那么首先系统中要make工具才可以,windows用户可以去gnu官网下载make工具。linux和mac os一般系统都带了。
编译过程中可能会出现无法找到etags,不用管它这是另外一个工具,和编译没太大关系,我们只需要能烧录的bin文件而已,如果是在windows下是使用mcuisp烧录,bin是无法使用的,可能是mcuisp软件有bug,但是hex文件就可以烧录,要产生hex文件就需要修改makefile:在makefile第117行处添加
hex: $(TARGET).hex
在115处修改为
build: elf bin lss sym hex
重新make一下就可以得到hex文件。
烧录hex或bin之后,bootloader就修改为我们自己的适用与alientek mini的bootloader了。
要maple下使用alientek mini光修改bootloader是没用的,还需要修改maple的core文件。这些文件在:maple-ide-0.0.12-windowsxp32\hardware\leaflabs\cores\maple下,
同样使用source insight打开。首先打开main函数,里面就是maple在编译时调用我们创建setup函数和loop函数的地方。然后打开boards.h里面就列举了maple官方板子,因为ide我还没搞清楚能不能修改,那么我们就找相近的修改,经过我自己观察maple板子就和mini比较相近。找到maple.cpp和maple.h,maple.cpp里面主要描述管脚的功能,就是什么可以做adc,什么脚可以做timer之内的,这些和我们没什么关系,因为这是芯片决定的,查看maple.h就找到我们要修改的地方,这里面定义了外设如何使用,比如led灯
#define BOARD_LED_PIN 13
第13脚在maple.cpp中的PIN_MAP中可以得知PIN_MAP中13元素,指的就是PA5(PIN_MAP是和芯片管脚一致,也可以直接查看数据手册)
我们需要修改到PD2,那将13改为25就可以。(别问为什么上面说了)
#define BOARD_LED_PIN 25
这时在到maple中写点灯代码了。在board中选第一个板子就可以了。
很easy吧,bootloader估计就没什么好改的了,有兴趣可以改成卡升级试试,这个是理论上可能,但是实际上估计够呛。
core文件还有很大的修改余地,甚至可以根据mini修改成mini专用的,但是这就需要时间了,本人写这个也只起个抛砖引玉而已,毕竟板子在家还没测试呢。
因为bootloader和core文件修改很简单,就不上传源代码了。
2016-01-12补充:
昨天没有硬件测试,今天测试了一下,在bootloader编译时makefile产生hex文件还需要修改一个地方,在makefile第157行到161行处修改为:
# Create final output file (.hex) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -Oihex $< $@
之前makefile是用的 -O binary 所以产生的文件还是bin格式,只是后缀改成了hex而已。mcuISP报出打不开文件。重新修改就可以了。烧录好之后插上USB,电脑可以找到新设备,但是我用的是win7 64bit的系统,maple的驱动没办法用。
还在想办法解决。
maple中的bootloader有问题,在网上重新下一个,修改好了在附件。
|
|