智能车制作

标题: 【开源】一份基于KSDK2.1的KV58模板工程 [打印本页]

作者: alexyzhov    时间: 2017-7-31 13:54
标题: 【开源】一份基于KSDK2.1的KV58模板工程
做车两年,感谢论坛上大佬们的无私贡献,让我学到了很多。今年用NXP官方出品的MCUxpresso SDK(原KSDK)撸的KV58,感觉资料和文档相当短缺,对初学者来说不是很易用。前期投入了不少精力才完成了底层配置,这个过程也让我对Kinetis有了更深刻的理解。本工程是基于KSDK例程模板修改而来,优化了原工程滥用宏定义导致时钟频率计算不正常的不便利,模仿lpld提供了软硬两个延时函数。已完成常见智能车制作常见模块的初始化配置,可结合KSDK手册参考阅读,了解KSDK的使用。同时附上一些自己今年陆陆续续移植的驱动,常见或者不常见的,成品或半成品,L3G4200D/NRF24L01/ST7735/SSD1351/OV7725/TVP5150/VL53L0X/ADNS9800。限于不便透露我们的源代码,就不提供单独的例程了,需要的可以自己移植。
作者: alexyzhov    时间: 2017-7-31 13:54
红领巾KV58 模板.zip
链接: https://pan.baidu.com/s/1c1vGBW 密码: mfdh
作者: alexyzhov    时间: 2017-7-31 13:54
接下来解析一下这个工程。

时钟部分:
/board/src/clock_config.c
如果想超频,修改这个文件里的
mcgConfig_BOARD_BootClockRUN.pll0Config.prdiv和vidv改变pll的预分频和倍频系数,以改变MCG的输出;
再注意配置simConfig_BOARD_BootClockRUN.clkdiv1,对Core、Bus、FlexBus、FastPeripheral/Flash配置合适的分频系数。(注意KV58的Flash频率不能超过32.5Mhz!)

管脚复用部分:
/board/src/pin_mux.c
具体复用表参见datasheet pinout一章,推荐使用PORT_SetPinMux而不是工程中多用的PORT_SetPinConfig设置复用功能!

外设初始化部分:
/board/src/board.c
常见外设功能的初始化代码集中在这个文件内。可以参考着代码和KSDK手册熟悉库的使用。
注意:KSDK默认外设库的FTM操作很坑,一是PWM精度只有100,二是CnV的触发和同步方式非常坑爹。
本人修改了几行底层代码。现在工程里PWM精度默认10000,同时每调用一次FTM_UpdatePwmDutycycle,都会强制触发Software Trigger,重装时间点设置为计数器溢出时。如果不想深入了解,直接调用函数就行。如果想自己修改,请阅读RM关于FTM部分的内容,CnV等寄存器的缓冲机制,以及Enhanced PWM Synchronization Mode的同步状态机。

最后一点,外设初始化的时候多要提供一个总线频率,如I2C_MasterInit(I2C1, &I2C1_config, SystemBusClock);
此时,需要确认待初始化的外设是挂载在哪条内部总线上的(读Reference Manual相关章节可以知晓),然后提供当前这条内部总线的频率。工程在clock_config.c中完成MCG、SIM初始化后调用了经过修改的SystemCoreClockUpdate()函数,会自动根据预设的分频系数和有源晶振频率计算各个总线的频率值,外设初始化时直接调用即可。如果提供了错误的初始化频率,可能会导致外设的工作频率不正常。

附可调用的频率变量列表:
SystemCoreClock - CPU内核频率,默认235Mhz
SystemFlexBusClock - FlexBus频率
SystemBusClock  - BUS频率
SystemFlashClock    - FLASH频率(事实上由于KV58的Flash和Bus共用一个分频系数,意味着FlashClock==BusClock)
SystemMCGFFClock - MCGFF时钟频率,一个低速时钟,用于给舵机FTM模块提供低频时钟源,实现低频率的PWM输出(50HZ)
作者: shizun    时间: 2017-7-31 13:59
顶~666
作者: ggchasing    时间: 2017-7-31 14:03
大神啊~6666
作者: alexyzhov    时间: 2017-7-31 14:05
补充一点,工程模板时钟是利用50Mhz外部有源晶振,以PLL倍频的方式产生的MCG时钟,芯片工作在高性能模式,并且默认我在sys_init里就打开了fpu和所有IO的时钟门控。如果有低功耗需求,请根据自己实际需求修改。MCG的状态转移需要遵循特定的顺序,KSDK的函数内部实现了这个顺序,不需要额外操心。直接设置目的模式就行。

我自己测试模板全速运行程序主板电流7V@200mA左右,主要是LDO太多,比较费电。功耗包括KV58和7725。
作者: MY三木    时间: 2017-8-1 10:36
用KEx Tools配置时钟和引脚复用很方便
作者: cs538138    时间: 2017-8-30 13:53
大牛
作者: 混森蓝兽    时间: 2017-8-30 15:03
这个就很6
作者: 缘忆海韵    时间: 2017-8-30 15:51
这个是M7内核啊,666




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2