智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1255|回复: 0
打印 上一主题 下一主题

超核v2.4库的一点使用心得

[复制链接]

7

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
513
威望
309
贡献
144
兑换币
126
注册时间
2012-9-17
在线时间
30 小时
跳转到指定楼层
1#
发表于 2013-11-10 11:26:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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);一个函数就可以搞定了

这里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()里是可以修改的

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



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-5 23:25 , Processed in 0.075184 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表