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

2019-04-15 18:18发布

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