[二] Nuttx移植-星瞳pyboard开发板

一、Nuttx配置文件

  1. Nuttx配置文件位置:
    - 位于nuttx/configs内部的各个文件夹中,一个文件夹对应一个开发板。比如,stm32f4discovery这样的stm官方发布的开发板。但是自带的开发板的配置文件中并没有我手上这块星瞳的pyboard stm32f405rgt6开发板的配置文件。所以要自己配置咯。
  2. 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)

#
  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值