百无一用程序员

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

CF

准备

编译器

编译器可以在ARM官网下载,地址:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

CF2.5版本需要使用7.2.1版本,下载时选择GNU Arm Embedded Toolchain: 7-2017-q4-major

CF源码

位于Github上,地址:https://github.com/cleanflight/cleanflight

编译

查看编译目标

$ make targets

编译NAZE

$ make TARGET=NAZE
...
Linking NAZE
Notice: STM32F1 based targets will be unsupported soon.
Memory region         Used Size  Region Size  %age Used
           FLASH:      128475 B       126 KB     99.57%
    FLASH_CONFIG:          0 GB         2 KB      0.00%
             RAM:       19056 B        20 KB     93.05%
       MEMORY_B1:          0 GB         0 GB      -nan%
   text    data     bss     dec     hex filename
 127199    1272   17784  146255   23b4f ./obj/main/cleanflight_NAZE.elf
Creating HEX ./obj/cleanflight_2.5.0_NAZE.hex

NAZE

NAZE硬件版本

NAZE头文件中定义了硬件版本号,不同版本硬件略有差异:

typedef enum nazeHardwareRevision_t {
    UNKNOWN = 0,
    NAZE32, 		// Naze32 and compatible with 8MHz HSE
    NAZE32_REV5, 	// Naze32 and compatible with 12MHz HSE
    NAZE32_SP 		// Naze32 w/Sensor Platforms
} nazeHardwareRevision_e;

三种硬件类型中,NAZE32为Rev4及之前版本,NAZE32_SP为REV5的升级版,此版本在REV5的基础上增加了SPI Flash。

项目 REV5之前版本 REV5版本
Buzzer驱动 使用开漏的PNP管驱动 使用NPN管驱动
MAG_INT PB12 PC14
MPU_INT PB13 PC13
ACC_ADXL345 不支持 支持

注:NAZE_SP版本如果启用了UART3,那么就不能使用I2C设备了。所以NAZE配置文件中默认不启用UART3。

NAZE中定义使用I2C2,对应SCL引脚为PB10,SDA引脚为PB11:

#define USE_I2C
#define USE_I2C_DEVICE_2
#define I2C_DEVICE              (I2CDEV_2)

确定硬件版本

不同版本的是根据PC15引脚决定的,在lib\main\STM32F4\Drivers\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rcc.文件中实现如下:

void SetSysClock(bool overclock)
{
    #if defined(CJMCU)
        RCC_CFGR_PLLMUL = RCC_CFGR_PLLMULL9;
    #else
        RCC_CFGR_PLLMUL = GPIOC->IDR & GPIO_IDR_IDR15 ? hse_value = 12000000, RCC_CFGR_PLLMULL6 : RCC_CFGR_PLLMULL9;
    #endif
}

NAZE硬件根据PC15引脚的值决定HSE外部晶振频率,当拉高时为12MHz,否则为8Mhz。接下来在硬件检测函数中,根据外部晶振频率决定硬件版本,REV5为12MHz。

void detectHardwareRevision(void)
{
    if (hse_value == 8000000)
        hardwareRevision = NAZE32;
    else if (hse_value == 12000000)
        hardwareRevision = NAZE32_REV5;
}

NAZE配置文件中定义了USE_HARDWARE_REVISION_DETECTION,在硬件检测完成后还会调用updateHardwareRevision更新硬件版本,这个函数中根据是否检测到SPI硬件决定将REV5硬件类型升级为NAZE32_SP

void updateHardwareRevision(void)
{
#ifdef USE_SPI
    uint8_t detectedSpiDevice = detectSpiDevice();
    if (detectedSpiDevice == SPI_DEVICE_MPU && hardwareRevision == NAZE32_REV5)
        hardwareRevision = NAZE32_SP;
#endif
}
posted on 2019-12-07 10:42  psbec  阅读(417)  评论(0)    收藏  举报