智能车制作
标题:
超核v2.4库的一点使用心得
[打印本页]
作者:
yangguangyu
时间:
2013-11-10 11:26
标题:
超核v2.4库的一点使用心得
本帖最后由 yangguangyu 于 2013-11-10 11:33 编辑
从51开始一直用的都是keil软件,对keil的感情还是比较深的!玩到k60了,软件确实选择性挺大的,IAR,CW10.X和Keil。CW的各种问题(也许是人品问题),IAR用着又不是很习惯(但是大部分库都是用IAR开发的,这个也是当时用他的原因),最终又回到了keil。可能大部分的人接手k60都有这方面的经历吧!,库换来换去,软件换来换去。。。。
然后就一直用的超核的库(之前的版本都是针对keil的,现在2.4的库可以cw,keil,iar都兼容了),
自己本来也准备写库的,用到啥,就写那个模块,但是各种问题-写完用不了{:soso_e149:}桑心有没有。。。最后还是老老实实的用别人的库了。
下面讲讲超核库的一些使用心得:
(一)首先是时钟模块MCG,这个是一个芯片运行的基础。这个有2个部分可以用。一个是芯片内部的时钟源,另外还有外部晶振。超核的库初始化时钟还是比较方便的SystemClockSetup(ClockSource_EX50M,CoreClock_96M);一个函数就可以搞定了
[attach]52012[/attach]
这里ClockSource_IRC就代表用内部时钟源,ClockSource_EX50M这个代表用外部50M的晶振做时钟源,当然你要是用8M的就用ClockSource_EX8M。 说道这里给大家个建议吧!最好是用外部的晶振,内部晶振还是存在误差的,k60的一般超到200M感觉无压力啊!我用k60和k10都超到200M过,没有发现过热的情况,这个对做车来说小超一下还是不错的
{:soso_e151:}{:soso_e151:}{:soso_e151:}
(二)PIT(周期性定时模块)
PIT_InitStruct1.PIT_Interval = 500; //Setup a PIT 1000=1S,500=0.5S
PIT_InitStruct1.PITx = PIT0;
PIT_Init(&
IT_InitStruct1);
PIT_ITConfig(PIT0,PIT_IT_TIF, ENABLE); //enable PIT interrupt fun
NVIC_EnableIRQ(PIT0_IRQn);
这个地方就直接这么调用就可以了,超核的2.4的库和stm32有点类似了,都是用的这种结构体。看着也挺清爽的,这里貌似超核有相应的使用手册大家可以去下载,看看怎么调用相应的模块。我再说就有点多余了! 我说一下这个延时的时间的怎么改变,pit的最小调用时间是1ms,但是又写童鞋可能觉得不够,应为有很多人需要缩短进中断的时间,如果我想让他1us进一次中断应该怎么办呢?是不是给个0.001就可以了呢(0.001ms=1us)?呵呵,我当时就是这么想的,不过这个是错误的,单片机里的寄存器不可能认识这些小数的(咱们的这些值都是要赋给寄存器的)。这个在
PIT_Init()里是可以修改的
[attach]52013[/attach]
time = (PIT_InitStruct->;PIT_Interval)*(CPUInfo.BusClock/1000);
PIT->CHANNEL[PIT_InitStruct->;PITx].LDVAL = (uint32_t)time;//设置延时时间
这2句是关键time =CPUInfo.BusClock。如果BusClock是50MHZ的话LDVAL就赋值了50000000,单片机需要计数50000000才能够触发中断,而我们的芯片一秒产生脉冲就是50000000。触发中断的时间就是LDVAL/BusClock(单位S)
超核给的是(CPUInfo.BusClock/1000)那他就是1ms触发中断,如果我们需要0.5MS进行一次控制那就要把这个中断设置在us级的触发了,比如CPUInfo.BusClock/1000000就是1us级的触发再乘上PIT_Interval就是你要的时间了PIT_Interval=1000;那就是1ms了。
(三)systick
这个叫滴答定时器,其实他也就是一个定时器,我们一般都是用他来做延时用。以前51的一般都是用递加或者递减的方式延时,这个就谈不上精确了,而且在不同的频率下运行时间是不一样的。从ARM Cortex-M0内核开始,一直到现在的ARM Cortex-M4,这些内核中都搭载了systick滴答定时器,它放在了NVIC中,主要目的是为了给操作系统提供一个滴答中断。当然,毕竟它也是一个定时器,我们就可以利用它来做到精确的软件延时。systick是递减计数的,并且只有24位的寄存器所以延时要注意不要超过最大值对于1us级的触发不要超过nms<=0xffffff*8*1000/SYSCLK
好了,先这么多了,忽然感觉自己不是写东西的料,看着别人的写得都是很有条理,大家凑合看吧!最后附上超核最新库的地址
http://www.znczz.com/forum.php?mod=viewthread&tid=202246
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2