学了几个月的Tiva,总的来说这个款单片机功能还是比较强大的。下面我将以TM4C123GH6PM为例介绍其基本资源及工程建立,点亮板卡上的LED灯以及对基本的时钟配置、PWM、uart、Timer等方面来做简要说明。
注:编译器默认开启FPU功能
源码链接
https://download.csdn.net/download/qq_42263796/11256478
1.基本资源
TM4C123GH6PM,具有最高主频80MHz,100指令速度,256k闪存,8个串口,2个PWM模块,4个PWM发生器,可以产生16路PWM波,6个16/32位通用定时器,和6个32/64位通用定时器。
具体可以查看datasheet。
2. 建立一个TIVA工程
在这里默认CCS已经安装好了,我用的是CCS8。
下载Tivaware,网址为:
http://www.ti.com.cn/tool/cn/SW-TM4C?keyMatch=tivaware&tisearch=Search-CN-Everything
如果不是内存特别小,建议下载完全版。
下载后,安装的位置建议和CCS路径一致。我安装的位置如下图所示。
安装完成后打开CCS,这里安装好后还需要link Tivaware。如图,打开Resource Explorer Classic。
然后点击+号位置,添加刚刚安装的Tivaware。然后重启CCS。
接下来新建一个工程。File->New->CCS Project
在创建工程页面选择所用板卡的型号,注意选择Connection。结果如下图所示。
这样一个工程就新建完成了。
3. 额外情况
Tivaware的库没有link成功,编译报错,那么需要自己手动添加。手动添加步骤如下。
右击工程名字,选择properties。如下
然后依次选择CCS Build->ARM Compiler->include Options,点击+号,browser添加tivaware文件。
然后是添加driverlib。ARM Linker,Flie Search Path。步骤同上。路径如下图所示。
点击OK,然后点击Apply and Close。这样手动配置就完成了。
4. 点亮LED灯
首先配置时钟为80MHz(默认主频16MHz)。源码看附录。
//使用PLL倍频到400MHz经过5分频得到80MHz SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
获取当前时钟频率,
clk=SysCtlClockGet();
延时,这里的延时是每三个时钟周期计数一次,所以要除以3。
SysCtlDelay(SysCtlClockGet()*0.2/3); //0.2s
我们用的板卡的灯引脚对应为PF1,PF2,PF3,使能外设,设置引脚方向为输出。
//使能TOMER0外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //使能外设
//使能GPIOF外设 PF1 PF2 PF3
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
点灯,代码如下。红绿蓝依次点亮。
while(1)
{
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 2);
SysCtlDelay(SysCtlClockGet()*0.2/3); //0.2s
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 4);
SysCtlDelay(SysCtlClockGet()*0.2/3); //0.2s
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 8);
SysCtlDelay(SysCtlClockGet()*0.2/3); //0.2s
}
所用头文件如下:
#include
#include
#include
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
4. PWM
如图所示,Tiva的PWM模块,两个PWM模块,4个PWM发生器gen,还有死区发生器,可产生16路PWM波。源码看附录。
//设置PWM时钟为系统时钟的1分频
SysCtlPWMClockSet(SYSCTL_PWMDIV_1);
//配置PWM0模块
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
//使用B系列的 GPIO口输出PWM波
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
//相应的GPIO口PWM功能
GPIOPinConfigure(GPIO_PB4_M0PWM2);
GPIOPinConfigure(GPIO_PB5_M0PWM3);
//配置引脚为PWM功能
GPIOPinTypePWM(GPIO_PORTB_BASE,GPIO_PIN_4|GPIO_PIN_5);
// GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_6);
//配置PWM发生器
PWMGenConfigure(PWM0_BASE, PWM_GEN_0,PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
//配置PWM周期,发生器0
PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 4096);
//配置PWM占空比
PWMPulseWidthSet(PWM0_BASE,PWM_OUT_2, 500);
PWMPulseWidthSet(PWM0_BASE,PWM_OUT_3, 1500);
//配置死区时间
PWMDeadBandEnable(PWM0_BASE, PWM_GEN_0,12,12); //100ns
//使能PWM0输出
PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT| PWM_OUT_3_BIT,true);
//使能PWM发生器模块
PWMGenEnable (PWM0_BASE,PWM_GEN_0);
5.TimerA
二话不说直接贴代码。
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
//使能TIMER0
//TimerConfigure(TIMER0_BASE, TIMER_CFG_ONE_SHOT);//单次计数模式
TimerConfigure(TIMER0_BASE, TIMER_CFG_A_PERIODIC);//周期性计数模式
TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);//周期性计数模式
TimerLoadSet(TIMER0_BASE, TIMER_A,SysCtlClockGet() / 10 - 1);//计数频率10HZ
IntEnable(INT_TIMER0A);//NVIC
//使能TIMER0A
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
//TIMEOUT标志位触发中断
IntMasterEnable();
//为定时器指定中断处理函数
TimerIntRegister(TIMER0_BASE,TIMER_A,Timer0IntHandler);
//master interrupt enable API for all interrupts
TimerEnable(TIMER0_BASE, TIMER_A);
//TIMER0A开始计数,当计数值等于TimerLoadSet,触发中断
定时器服务函数如下:
void Timer0IntHandler(void)
{
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
//清除标志位
//这里写服务函数进行的操作
}
6. Uart
这里将uart设置波特率为115200,用的是A0和A1,
void initialize_uart()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
UARTClockSourceSet(UART0_BASE,UART_CLOCK_PIOSC);
GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);
UARTStdioConfig(0,115200,16000000);
}
使用这个库函数就可以在电脑终端收到信息。
UARTprintf("hello wcs");
7. Button
思路就是使用GPIOPinRead(uint32_t ui32Port, uint8_t ui8Pins);
检测上升沿或者下降沿。
源码可以看附录。
7. 总结
以上介绍了TM4C123GH6PM基本功能的使用。比较简单,读者可结合芯片手册进一步学习。
8. 附录
源码链接
https://download.csdn.net/download/qq_42263796/11256478