tm4c123gxl库函数调包侠养成(一)——————基本系统时钟与delay函数

一、tm4的环境
本人使用的是ccs系统,安装教程网上很多,这里不一一赘述。ccs内部的集成允许tm4单片机编译下载调试仅靠数据线就可以完成,而不用独立的jlink,也算是其进步之处吧。
二、系统时钟的设定

SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ);

原型为:
void SysCtlClockSet(uint32_t ui32Config);
第一个参数:分频系数,系统再pll分频后会变为400mhz,接着有个降频为200mhz,这里的分频就是对200mhz的分频。像笔者这里配置的就是40mhz。
第二个参数:系统时钟源采用pll分频,或选择osc(主振荡器)
第三个参数:时钟源选择,这里是主振荡器作为osc
第四个参数:外部晶振,如果是tm4c123gxl的话,一般都是16mhz

这行代码便可以配置tm4的系统时钟,一般放在main函数的开头,是所有代码必须的一部分。这里与32的代码略有区别,正点原子家的代码中都没有使能系统时钟,而是默认的72mhz。
但笔者学业不精,并没有完全搞懂这一行代码,现在也只是一个会用但不能准确配置的状态。一般需要配置的,也就是第一个参数。tm4一般用的是40mhz到80mhz。所以分频系数一般是5和2_5;有关40mhz和80mhz,区别之一是80mhz的运算速度比40mhz快;但80mhz的延时函数会不准确,需要用到rom,这我们之后介绍。

三、功能时钟
在一般的单片机中,高端的单片机都会有许多功能,而如果你一打开单片机,所有功能就都打开,这样对于单片机的资源来说是一种浪费,因此采取默认关闭所有的功能外设,当单片机要用到某个功能时才打开对于外设。
对于打开外设,有代码:
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF))
;

这里的参数是相应的外设时钟,笔者这里写的是io口的时钟;
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF))
;

一句则是为了保证相应的外设时钟完全打开。

四、delay函数
delay函数,可是单片机的一大特色,但笔者这里做出警告,能不用delay的尽量不用delay,因为delay函数会导致在那一段时间内你的单片机处于一种暂停状态,这样会浪费资源,而且对单片机内部的运算(比如要时刻进行的pid)产生影响。
但delay函数是真的好用啊(真香~~~~)
函数:
SysCtlDelay(500(SysCtlClockGet()/3000));*
这便是delay函数的应用,原型为:
void SysCtlDelay(uint32_t ui32Count);
里面的参数,看起来是不是不得劲,但这就是tm4的代码逻辑,笔者来用自己的愚见解释一番;
这里的SysCtlClockGet()函数为获得当前的系统时钟,然后SysCtlClockGet()/3000就是1ms的时间(笔者没理解这一段,只是记住,关于其他时间自推),然后500*(SysCtlClockGet()/3000)就是延时500ms。****

注意:这是在系统时钟低于40mhz的情况下配置的,如果想要用到40mhz以上频率的延时,要进行配置
1.头文件包含
#include “driverlib/rom.h”
#include “driverlib/pin_map.h”
#include “driverlib/rom_map.h”
2.右击项目命,选properties,选择bulid,在arm compiler中的predefined symbols中,添加TARGET_IS_TM4C123_RB1的预定义

这样便可以使用ROM_SysCtlDelay(250*(SysCtlClockGet()/3000));的延时函数

注意:
delay函数不能delay到0,笔者这样尝试过,现象是单片机的程序会卡在这一步(伤心的回忆)

发布了10 篇原创文章 · 获赞 14 · 访问量 5507

猜你喜欢

转载自blog.csdn.net/qq_43725844/article/details/89023338