以stm32f103的led(PC13)为例子
heyi@ubuntu:~/nuttx/heyi_1_nuttx/nuttx/tools$ ./configure.sh stm32f103-minimum:nsh
heyi@ubuntu:~/nuttx/heyi_1_nuttx/nuttx:
make oldconfig menuconfig进行修改了以后,进行更新配置?这条指令暂时不需要
make menuconfig
Board led status support 需要取消掉,这个是ARCH_LED配置,共用了同一个led,如果勾选了这个配置,表示用于表示mcu的程序运行了。跟下面的userled驱动只能2选择1
退出到下面界面 device drivers,点击进去进行led的配置勾选
进行app 应用程序的添加,先退出到根目录
退出到App这一层后,再进行串口打印的放开(disable printf的勾选取消掉)
保存当前的配置
执行make指令,生成buttx.bin,安装《使用jlink直接烧写bin文件流程.docx》烧写bin程序到mcu中去
(二)简单的代码架构描述
nuttx\boards\arm\stm32\stm32f103-minimum\src 这个目录下主要是针对stm32f103的驱动函数存放处,例如lm75温度芯片的初始化(主要是片选管脚、i2c初始化,event等注册,还有该设备注册到driver/平台上去,例如设备名字/dec/userleds)
nuttx\arch\arm\src\stm32 这个目录下主要是具体的对mcu的功能模块的操作,例如i2c、gpio的pinmux配置、读写操作,rcc配置等;
\nuttx\drivers 这个目录下是所有mcu统一出来的标准驱动封装,例如app中会打开这里的驱动,然后由这里的驱动调用stm32f103下的驱动代码,再进行相应的动作。
apps\examples 这个目录下主要存放的是应用程序,例如leds应用程序
(三)修改led的pin管脚
nuttx\boards\arm\stm32\stm32f103-minimum\src\stm32f103_minimum.h 修改成其他gpio管脚,目前只有一个led,如果需要的话,可以多增加几个leds(这个其他stm32配置中已经有现成的,参考着修改就行)
修改好后,执行指令 make重新生成nuttx即可
如果要添加驱动程序,可以参考stm32_gpio.c进行修改,主要是当前目前的Makefile以及上一层的Kconfig也要进行修改,最后在make menuconfig中进行勾选
(四)app应用程序添加
以app/examples/hello为例子,移植新的app程序hellolead
- hellolead目录下的.c文件 Kconfig Makefile Make.defs都要进行修改
Kconfig进行如下修改,Program name的名字在nsh打印中能看到对应的app名字,所以这三个stack size都是需要添加的
Makefile如下修改:
-include $(TOPDIR)/Make.defs
Hello, Leadchina! built-in application info
PROGNAME = $(CONFIG_EXAMPLES_HELLOLEAD_PROGNAME)
PRIORITY = $(CONFIG_EXAMPLES_HELLOLEAD_PRIORITY)
STACKSIZE = $(CONFIG_EXAMPLES_HELLOLEAD_STACKSIZE)
MODULE = $(CONFIG_EXAMPLES_HELLOLEAD)
Hello, World! Example
MAINSRC = hellolead_main.c
include $(APPDIR)/Application.mk
Make.defs添加如下代码:
ifneq ($(CONFIG_EXAMPLES_HELLOLEAD),)
CONFIGURED_APPS += $(APPDIR)/examples/hellolead
endif
- 上一级目录的Kconfig也要修改? 这个貌似是自动生成的,主要是改hellolead下的内容
上一级的Kconfig,当初在文件末端添加source “nuttx/apps/examples/hellolead/Kconfig”,但是貌似没生效,在重新make menuconfig之后,顺序进行了变化;如果是这样的话,EXAMPLES_HELLOLEAD这个宏放在那里,其他的也要放到类似的地方;
如果有的时候不生效,make distclean,全部清空,再重新来一遍
3)在make menuconfig中勾选EXAMPLES_HELLOLEAD,进行编译,然后烧写到mcu中去
4)串口如下打印: