本文由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