NuttX版本:V10.1.0
MCU:STM32F411CEU6
GPIO:PB8 --- LED
前提知识: NuttX V10.1.0 : gpio示例调用流程__Herc的博客-CSDN博客
目录
1、修改mcu对应的头文件宏定义stm32f411-minimum.h
2、指定要使用引脚的参数(定义在stm32f411-minimum.h)
四、修改板特定头文件stm32f411-minimum.h。
2、添加底层gpio驱动中所要使用的宏,根据实际LED引脚,修改宏GPIO_OUT1的指定port和pin(PB8)
3、添加stm32_gpio_initialize(void)的声明
五、将stm32_gpio.c添加到Make.defs中,当开启对应宏时加入编译。
六、将stm32_gpio_initialize()函数在nuttx/boards/arm/stm32/stm32f411-minimum/src/stm32_bringup.c板初始化函数中调用
2、→ Device Drivers → IO Expander/GPIO Support 选择GPIO driver
3、→ Application Configuration → Examples 中开启gpio示例应用
1、查看stm32_gpio_initialize()函数注册的GPIO设备,关注gpout1即可
2、通过help查看内置应用,其中的gpio为gpio实例应用,通过gpio -h即可看到帮助信息
由于STM32F411CEU6这个mcu已经在nuttx/boards/arm/stm32/stm32f411-minimum存在对应的boards文件,因此不需要重新创建,只需要在该目录下进行修改。
一、指定主机平台并指定配置。
nuttx/boards/arm/stm32/stm32f411-minimum/configs存在nsh板配置文件,因此后续使用该板配置文件。
$./tools/configure.sh -l stm32f411-minimum:nsh
二、根据板件修改时钟树
对应的时钟树配置文件在nuttx/boards/arm/stm32/stm32f411-minimum/include/board.h
笔者进行开发验证的板件,其晶振为8M,而nuttx中stm32f411的指定晶振为25M,因此需要进行修改才可以进行后续开发。
三、添加GPIO底层驱动。
由于官网下载的stm32f411-minimum板并没有gpio的驱动,因此需要自行添加GPIO底层驱动,原始目录如下:
底层GPIO驱动从boards/arm/stm32/stm32f103-minimum/src/stm32_gpio.c移植到nuttx/boards/arm/stm32/stm32f411-minimum/src/目录下,并做出下面的修改:
1、修改mcu对应的头文件宏定义stm32f411-minimum.h
2、指定要使用引脚的参数(定义在stm32f411-minimum.h)
四、修改板特定头文件stm32f411-minimum.h。
1、添加GPIO相关的头文件
2、添加底层gpio驱动中所要使用的宏,根据实际LED引脚,修改宏GPIO_OUT1的指定port和pin(PB8)
3、添加stm32_gpio_initialize(void)的声明
五、将stm32_gpio.c添加到Make.defs中,当开启对应宏时加入编译。
打开boards/arm/stm32/stm32f103-minimum/src/Make.defs
六、将stm32_gpio_initialize()函数在nuttx/boards/arm/stm32/stm32f411-minimum/src/stm32_bringup.c板初始化函数中调用
七、make menuconfig 中开启GPIO驱动,并且把gpio示例应用选中编译进系统
1、在menuconfig中先搜索一下gpio,找到相关配置
2、→ Device Drivers → IO Expander/GPIO Support 选择GPIO driver
3、→ Application Configuration → Examples 中开启gpio示例应用
八、编译并烧录进系统
$cd {nuttx源码所在目录}/nuttx/nuttx
$make clean;make
烧录可以使用JFlash进行烧录或者使用openocd,我这里使用JFlash
九、测试验证
使用USB转ttl模块连接到测试板件的串口1。这一步需要先经过测试能够正常连接nsh并输出信息,才能进行后续测试。
NuttShell前的输出信息为我自行添加的调试信息,可以不用管。
1、查看stm32_gpio_initialize()函数注册的GPIO设备,关注gpout1即可