首先是MCU用于iNav的各种功能的引脚的分配计划:
一、PPM接收机输入引脚,需要使用一个复用有定时器的引脚,我这里选择了PA0,对应选择的是TIM2_CH1。
修改target/FLYESF401/target.c文件,里面定义了MCU要使用什么引脚上的哪一个定时器的哪一个道道。
里面有一个静态的数组,这里我已经把所有的定时器都清掉了,(当然也可以改):
consttimerHardware_ttimerHardware[]={}
在里面加入PPM接收机决定使用的引脚和时钟通道等
consttimerHardware_ttimerHardware[]={
DEF_TIM(TIM2,CH1,PA0,TIM_USE_PPM,0,0),//S1_IN
}
就完成了在PPM引脚的定义分配了。对应的还要有:
二、固定翼模式下的无刷电调的PWM输出通道的定时器和引脚,要留意,固定翼模式下,无刷电调的输出定时器不能和舵机PWM输出用同一个定时器的不同通道,所以我选择使用PB7, PB6这两个引脚,分别对应TIM4_CH2, TIM4_CH1,作为电调的PWM输出。而相应的,使用PA6、PA7、PB0、PB1及对应的TIM3_CH1、TIM3_CH2、TIM3_CH3、TIM4_CH4来作为4个舵机PWM输出。
于是修改过的timerHardware[] 像下面:
consttimerHardware_ttimerHardware[]={
DEF_TIM(TIM2,CH1,PA0,TIM_USE_PPM,0,0),//S1_IN
DEF_TIM(TIM4,CH2,PB7,TIM_USE_MC_MOTOR|TIM_USE_FW_MOTOR,0,0),//S5_OUTMOTOR,SERVOorLED
DEF_TIM(TIM1,CH1,PB6,TIM_USE_MC_MOTOR|TIM_USE_FW_MOTOR,0,0),//S6_OUT
DEF_TIM(TIM3,CH1,PA6,TIM_USE_MC_MOTOR|TIM_USE_MC_SERVO|TIM_USE_FW_SERVO,0,0),//S1_OUTD1_ST7
DEF_TIM(TIM3,CH2,PA7,TIM_USE_MC_MOTOR|TIM_USE_MC_SERVO|TIM_USE_FW_SERVO|TIM_USE_LED,0,0),//S2_OUTD1_ST2
DEF_TIM(TIM3,CH3,PB0,TIM_USE_MC_MOTOR|TIM_USE_FW_SERVO,0,0),//S3_OUTD1_ST6
DEF_TIM(TIM3,CH4,PB1,TIM_USE_MC_MOTOR|TIM_USE_FW_SERVO,0,0),//S4_OUTD1_ST1
}
timerHardware还包括了软串口的定义等。
完成定时器引脚使用和分配后,接下来要修改target.h来决定固件有多少功能和接口要用。
一般来说,原来从其它TARGET抄来的target.h基本都可以清除或注释掉,在这个开发板上,我计划用一个I2C接口来串接姿态传感器(运动传感器)MPU6050,大气压力传感器BMP280,如果有可能,还可以接上HMC5883磁盘盘(多轴飞行器需要使用磁罗盘),SPI口就不需要了,然后可以使用到的片上UART只有两个,其中一个将用来接GPS,另一个可以留来接蓝牙模块以方便现场调机。因此基于串口的其它功能包括遥测输出、图传控制都可以不计划使用了。
target.h文件里主要还要定义几样硬件相关的内容(宏定义):
飞控板的识别,这个自己命名就好了,我这里命名为FLYESF401
FLASH_PAGE_SIZE STM32芯片的内部flash容量,以字节为单位,所以是0x4000,256KB.
HSE_VALUE 板上晶振的频率,这个非常重要,没有定义时,默认会用8MHz,而实际板上的晶振是25MHz,会引起固件无法启动。
LED0的引脚, 这里用了板上的LED指示灯,使用的是PC13
BEEPER的引脚,选一个可用的GPIO脚就行了,我选择的是PA14
所以target.h从progmaonce开始就如下:
#pragmaonce
#ifndefFLYESF401
#defineFLYESF401
#endif
#defineFLASH_PAGE_SIZE((uint32_t)0x4000)
#ifndefHSE_VALUE
#defineHSE_VALUE25000000
#endif
#defineTARGET_BOARD_IDENTIFIER"FY40"
#defineUSBD_PRODUCT_STRING"FlyYes!401"
#defineLED0PC13
#defineBEEPERPA4
//#defineBEEPER_INVERTED
//#defineUSE_I2C_PULLUP
#defineUSE_I2C
后面的,可以直接参考仓库里的,主要就是启动需要的功能,去掉不需要的功能。
定制到这里,还是不能编译链接出可用的固下来的,接下来要去定制链接的flash布局和功能选择开关,后续。