目录
一、Nuttx配置文件
- Nuttx配置文件位置:
- 位于nuttx/configs内部的各个文件夹中,一个文件夹对应一个开发板。比如,stm32f4discovery这样的stm官方发布的开发板。但是自带的开发板的配置文件中并没有我手上这块星瞳的pyboard stm32f405rgt6开发板的配置文件。所以要自己配置咯。 - Nuttx配置文件的作用:
1.include/board.h
: 因为nuttx有对于许多设备的驱动,比如pwm,i2c,UART,usb-otg,SD-card等等,那这些驱动,肯定有引脚对应关系,比如,STM32F405RGT6,有六个USART其中有两个是UART,那么这里的UART1(2,3,4,5,6)的RX,和TX分别对应哪个引脚,这是需要在配置文件中进行指定的。这样你在Nuttx程序开发时,就可以直接使用GPIO_USART1_RX
这样的宏定义这样带来的好处显而易见,对于程序的可移植性带来很大帮助。
2.include/board.h
: 当然在配置文件中你除了配置外设之外,还有系统内部的一些东西的配置,比如系统时钟的配置(各分频的配置,等等),定时器的配置,DMA的配置。
3.nsh/defconfig
: 前面1,2中说的作用都是跟开发板或者芯片有关的配置项,那么对于Nuttx操作系统当然也有对应的配置文件,这一点类似于Linux。可以对各种驱动,进行删减和增加支持,对于自带的Shell进行配置,对系统启动程序加载的配置。
4.scripts/*
:这里面放的是对应的.ld文件,我没学过STM32,但是打开看看,大概能知道,这个里面是对于STM32的flash,sram的大小的说明,也就是内存分布的配置,并且对于其中的section(段)的配置,就类似于PC中,一个程序内存里面数据段,代码段这样子。
5.kernel/*
: 应该跟Nuttx内核的内存分布的初始化有关。
6.Kconfig
: 跟Linux一样的,构建配置文件,Linux的我也没学过,反正就是个配置文件,大部分的板子的这个配置文件基本都一个样,所以暂时可以不用管。
7.src/*
:这里也就是代码文件夹,比如启动时,执行什么代码,app初始化代码等等。也就是从这里去调用你编写的app的入口函数。从而达到,nuttx启动自动执行你的app的目的。毕竟总不能先插个串口转USB到电脑,然后到nuttx控制台去启动你的程序吧。
二、构建自己的配置文件
- include
- /board.h
- kernel
- nsh
- defconfig
- scripts
- src
- Kconfig
1. include/board.h文件构建
board.h文件由于是主控芯片时钟,外设等的配置文件,那么也可以在omnibusf4的基础上进行修改。因为,omnibusf4的外部晶振使用的是8Mhz的,而我的星瞳pyboard的开发板的外部晶振是12Mhz的,所以要修改一下时钟配置的那个部分。由于这个块板子是可以运行micropython的,所以我参考了micropython中对pyboardV1.1的外设的配置文件mpconfigboard.h。
#define GPIO_USART1_RX GPIO_USART1_RX_2 /* PB7 */
#define GPIO_USART1_TX GPIO_USART1_TX_2 /* PB6 */
这个引脚定义的配置是根据arch/arm/src/stm32/hardware/stm32f40xxx_pinmap.h
这个文件中的宏定义配置出来的比如上面的GPIO_USART1_RX_2在pinmap.h中这样定义的。如果你是其他芯片你看对应的pinmap.h文件就好。
#define GPIO_USART1_RX_1 (GPIO_ALT|GPIO_AF7|GPIO_PULLUP|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN10)
#define GPIO_USART1_RX_2 (GPIO_ALT|GPIO_AF7|GPIO_PULLUP|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTB|GPIO_PIN7)
#define GPIO_USART1_TX_1 (GPIO_ALT|GPIO_AF7|GPIO_PULLUP|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN9)
#define GPIO_USART1_TX_2 (GPIO_ALT|GPIO_AF7|GPIO_PULLUP|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTB|GPIO_PIN6)
其中GPIO_USART1_RX_2
是对应PB7,因为(GPIO_PORTB | GPIO_PIN7)PORTB代表是B。
于是配置好的board.h如下(还没有配置SD和USB-OTG)
/************************************************************************************
* configs/xingtong-pyboard/include/board.h
*
* Copyright (C) 2019 Hotice0 All rights reserved.
* Author: Hotice0 <[email protected]>
*
************************************************************************************/
#ifndef __CONFIG_XINGTONG_PYBOARD_INCLUDE_BOARD_H
#define __CONFIG_XINGTONG_PYBOARD_INCLUDE_BOARD_H
/************************************************************************************
* Included Files
************************************************************************************/
#include <nuttx/config.h>
#ifndef __ASSEMBLY__
# include <stdint.h>
# include <stdbool.h>
#endif
/************************************************************************************
* Pre-processor Definitions
************************************************************************************/
/* Clocking *************************************************************************/
/* The STM32F405RGT6 XINGTONG_PYBOARD board features a single 12MHz crystal. Space is provided
* for a 32kHz RTC backup crystal, but it is not stuffed.
*
* This is the canonical configuration:
* System Clock source : PLL (HSE)
* SYSCLK(Hz) : 168000000 Determined by PLL configuration
* HCLK(Hz) : 168000000 (STM32_RCC_CFGR_HPRE)
* AHB Prescaler : 1 (STM32_RCC_CFGR_HPRE)
* APB1 Prescaler : 4 (STM32_RCC_CFGR_PPRE1)
* APB2 Prescaler : 2 (STM32_RCC_CFGR_PPRE2)
* HSE Frequency(Hz) : 12000000 (STM32_BOARD_XTAL)
* PLLM : 8 (STM32_PLLCFG_PLLM)
* PLLN : 336 (STM32_PLLCFG_PLLN)
* PLLP : 2 (STM32_PLLCFG_PLLP)
* PLLQ : 7 (STM32_PLLCFG_PLLQ)
* Main regulator output voltage : Scale1 mode Needed for high speed SYSCLK
* Flash Latency(WS) : 5
* Prefetch Buffer : OFF
* Instruction cache : ON
* Data cache : ON
* Require 48MHz for USB OTG FS, : Enabled
* SDIO and RNG clock
*/
/* HSI - 16 MHz RC factory-trimmed
* LSI - 32 KHz RC
* HSE - On-board crystal frequency is 12MHz
* LSE - 32.768 kHz
*/
#define STM32_BOARD_XTAL 12000000ul
#define STM32_HSI_FREQUENCY 16000000ul
#define STM32_LSI_FREQUENCY 32000
#define STM32_HSE_FREQUENCY STM32_BOARD_XTAL
#define STM32_LSE_FREQUENCY 32768
/* Main PLL Configuration.
*
* PLL source is HSE
* PLL_VCO = (STM32_HSE_FREQUENCY / PLLM) * PLLN
* = (12,000,000 / 12) * 336
* = 336,000,000
* SYSCLK = PLL_VCO / PLLP
* = 336,000,000 / 2 = 168,000,000
* USB OTG FS, SDIO and RNG Clock
* = PLL_VCO / PLLQ
* = 48,000,000
*/
#define STM32_PLLCFG_PLLM RCC_PLLCFG_PLLM(12)
#define STM32_PLLCFG_PLLN RCC_PLLCFG_PLLN(336)
#define STM32_PLLCFG_PLLP RCC_PLLCFG_PLLP_2
#define STM32_PLLCFG_PLLQ RCC_PLLCFG_PLLQ(7)
#