基于TIVA库函数的TM4C1294XL使用笔记|TI单片机


本文由CECEHANG原创,采用署名-非商业性使用-相同方式共享 4.0 国际版 (CC BY-NC-SA 4.0)协议。
因为比赛原因接触到了TI公司的TM4C1294的单片机,在学习过程中有不少收获,故将学习时的笔记整理出来,供大家参考。本文在很多问题上写的并不详细,适合那些使用过其他ARM-Cortex M4系列的单片机的人,利用本文快速入手TI公司的TM4C系列单片机。刚接触单片机的新人,不建议阅读此文。本人能力有限,难免有遗漏或错误之处,请多包涵,欢迎斧正。
转载请注明文章来源:

CSDN博客地址: http://blog.csdn.net/u010495967

本人邮箱:[email protected]

TM4C1294是TI公司推出的基于ARM Cortex M4内核的MCU,其开发板售价大约150元人民币。个人比较喜欢的是TI公司的单片机配套的文档资料很全面,包括CPU的datasheet以及库函数手册等等,写的都很好。着重介绍下TI公司的一个软件TIVA ware,里面有与该开发板有关的许多例子,供大家学习参考。可以很方便地入手这块板子。但缺点就是使用这个单片机的人不多,关于该单片机的讨论及远没有STM32那么多。

以上所说的文档及软件都可以在TI官网上搜索“TM4C1294XL”中下载到,为了便于大家使用,个人将这些文档做了个合集,链接放在本文下方。

开发环境搭建

我是使用MDK5.0进行开发,下载好TIVAware之后,在里面的example--board--1294xl文件夹中能找到各种例子。使用MDK打开其中的.uvproj文件,会跳出一个弹窗说找不到相应的CPU,不用理它,直接进行编译下载即可。程序里面的driverlib.lib文件已经包含了库函数所用的代码,也可以自己添加库函数代码,库函数的源文件及头文件在tivaware文件夹中的driverlib文件夹可以找到。

TM4C资源介绍

CortexTM-M4 120-MHz CPU ----TM4C1294NCPDTI

1 MB Flash / 256 kB RAM / 6 kBEEPROM

12-bit SAR ADC (2MSPS),Comparators,Timers and DMA

8-/16-/32-bit EPI

2 CAN Modules

QSSI/UART/I2C

开发板还有一个复位按键、一个唤醒按键、两个用户按键以及四个LED,还有以太网接口等外设。

TM4C1294XL的ROM中包含基本的驱动库,比如GPIO的库、TIMER的库等等以及boot loader,boot loader可以看做启动程序所必须的文件。由于这个特性,可以减少FLASH资源的占用。在ROM中的库函数一般来说与平常所见的库函数相比只是多了ROM_的前缀,其他相同。

A boot loader is a computerprogram that loads an operating system or some other system software for thecomputer after completion of the power-on self-tests; it is the loader for theoperating system itself. Within the hard reboot process, it runs after completionof the self-tests, then loads and runs the software. A boot loader is loadedinto main memory from persistent memory, such as a hard disk drive or, in someolder computers, from a medium such as punched cards, punched tape, ormagnetictape.

GPIO库函数使用笔记

初始化IO口

1.使能IO时钟

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);

SYSCTL_PERIPH_GPION代表N组IO

2.设置IO口复用类型

GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE,GPIO_PIN_0);

       GPIOPinTypeGPIOOutput表示设置该IO口为输出模式

常用的有:

GPIOPinTypeGPIOInput//输入模式

GPIOPinTypeGPIOOutputOD//开漏输出

设置IO电平输出电平

当IO为输出模式时,使用GPIOPinWrite函数能够设置IO的输出状态(高或低)。

例如:

GPIOPinWrite(GPIO_PORTN_BASE,GPIO_PIN_1, GPIO_PIN_1);

注意,设置IO口输出低电平时,第三个参数写0即可。但若设置IO口为高电平,则不能简单地将第三个参数写成1。而是,设置GPIO_PIN_0为高电平时,第三个写GPIO_PIN_0。GPIO_PIN_1设置高电平时写GPIO_PIN_1,以此类推。

读取IO口电平

利用GPIOPinRead函数读取IO口电平,其返回值是一个int32_t类型的数。例如读取某组IO口中GPIO_PIN_1的电平时,该IO为低电平则返回0,高电平返回GPIO_PIN_1而不是数字1,根据宏定义可知GPIO_PIN_1实际上是0x00000002。

1294的时钟配置

使用SysCtlClockFreqSet来配置1294的时钟

时钟源

1. PrecisionInternal Oscillator (PIOSC).:片上时钟 16MHz

2. MainOscillator (MOSC):由外部晶振提供

3. Low-FrequencyInternal Oscillator (LFIOSC):33KHz,睡眠模式使用

4. HibernationModule RTC Oscillator (RTCOSC) Clock Source不详


例:

          ui32SysClkFreq =SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |SYSCTL_CFG_VCO_480), 120000000);

代表使用主时钟,外部晶振25MHz,通过PLL倍频到480MHz,然后设置时钟为120000000即120MHz。

注意:外部晶振数值不能选错。

SYSCTL_OSC_MAINto use an external crystal or oscillator.

SYSCTL_OSC_INTto use the 16-MHz precision internal oscillator.

SYSCTL_OSC_INT30to use the internal low frequency oscillator.

SYSCTL_OSC_EXT32to use the hibernate modules 32.786-kHz oscillator. This option is

only availableon devices that include the hibernation module.

PLL倍频可以选择320MHz和480MHz

该函数返回值为配置的时钟频率,单位为Hz。

外部中断

配置过程

以PJ0的中断为例

1.设置引脚为INPUT模式

2.配置中断寄存器

GPIOIntRegister(GPIO_PORTJ_BASE,PortJIntHandler);

中断服务子程序的函数名可以自定,然后在.s的启动文件中更改中断向量表 把PortJIntHandler写进去



在向量表前一行写上 EXTERN

3.配置中断触发方式

   GPIOIntTypeSet(GPIO_PORTJ_BASE,GPIO_PIN_1,GPIO_FALLING_EDGE);

4.使能GPIO中断

GPIOIntEnable(GPIO_PORTJ_BASE,GPIO_PIN_1);

要想使能中断还要通过库函数进行中断使能及Master使能,如下:

    IntEnable(INT_GPIOJ);

     IntMasterEnable();

5.清除中断标志位

6.编写中断服务子程序函数

其他中断配置方法流程类似。

Timer

PWM


PWM初始化流程

以PWM1通道为例,由引脚图可知PWM1对应着PF1引脚。

1.使能PWM和GPIOF时钟

2.设置PF1,复用PF1

    GPIOPinConfigure(GPIO_PF1_M0PWM1);

    GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_1);

注意复用IO的库函数写法,其他复用函数请查看库函数手册

3.PWMGEN设置

PWMGenConfigure(PWM0_BASE,PWM_GEN_0,PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);

4.设置PWM周期占空比

PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 64000);

PWMPulseWidthSet(PWM0_BASE,PWM_OUT_0,          PWMGenPeriodGet(PWM0_BASE, PWM_GEN_0)/ 4)

;//产生占空比为25%的PWM,等同于PWMPulseWidthSet(PWM0_BASE,PWM_OUT_0, 16000)注意PWMGenPeriodGet函数用法。

注意:每个PWMGenraator产生的两路PWM频率相同,但占空比可以不同。

关于PWM频率的设置,因为PWM内部的负责计数寄存器只有16位,所以保存在里面的数字不能大于65535。这就限制了PWM的频率不能低于时钟频率/65535。若想产生更低的频率,则必须对PWM进行预分频,预分频函数为PWMClockSet,在使能PWM时钟后紧接着调用该函数。例如,系统主时钟为120MHz,设置分频系数为2,即

PWMClockSet(PWM0_BASE,PWM_SYSCLK_DIV_2)

然后设置

PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 64000);

PWMPulseWidthSet(PWM0_BASE,PWM_OUT_0, 32000);

则该PWM周期为:120M / 2 /64000 = 937.5Hz

占空比为 32000 / 64000 = 50%。

5.使能PWMGEN

6.设置PWM输出状态

PWMGenEnable(PWM_BASE,PWM_GEN_0);

PWMOutputState(PWM_BASE,(| PWM_OUT_1_BIT), true);

该开发板无DAC,可用PWM加外部电路实现DAC的功能。


CECEHANG

2016年10月4日


-----------------------------文件下载分割线------------------------------------------------

TM4C1294资料合集下载地址

解压密码:blog.csdn.net/u010495967

备用地址

 密码:za0s

解压密码:blog.csdn.net/u010495967

-----------------------------支持我的分割线------------------------------------------------

支付宝

[email protected]




猜你喜欢

转载自blog.csdn.net/u010495967/article/details/52733227