TM4C123GX系列

学了几个月的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,触发中断

定时器服务函数如下:

voidTimer0IntHandler(void)

{

TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);

//清除标志位

//这里写服务函数进行的操作

}

6. Uart

这里将uart设置波特率为115200,用的是A0和A1,

voidinitialize_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_tui32Port,uint8_tui8Pins);

检测上升沿或者下降沿。

源码可以看附录。

7. 总结

以上介绍了TM4C123GH6PM基本功能的使用。比较简单,读者可结合芯片手册进一步学习。

8. 附录

源码链接

https://download.csdn.net/download/qq_42263796/11256478

tm4c123g c语言,Tm4c123GX(tiva)入门详细教程相关推荐

  1. spring入门详细教程(五)

    前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...

  2. Spring入门详细教程(四)

    前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...

  3. Spring入门详细教程(三)

    前言 本篇紧接着spring入门详细教程(二),建议阅读本篇前,先阅读第一篇和第二篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/101 ...

  4. Spring入门详细教程(二)

    前言 本篇紧接着spring入门详细教程(一),建议阅读本篇前,先阅读第一篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/1016553 ...

  5. ThinkJS框架入门详细教程(二)新手入门项目

    一.准备工作 参考前一篇:ThinkJS框架入门详细教程(一)开发环境 安装thinkJS命令 npm install -g think-cli 监测是否安装成功 thinkjs -v 二.创建项目 ...

  6. NMAP入门详细教程

    NAMP入门详细教程 一.功能: 网络扫描和嗅探. 二.原理: 使用TCP/IP协议栈指纹准确地判断目标主机的相关信息. 三.作用: 识别活跃主机 识别开放端口以及相关的服务 识别主机的系统指纹 路由 ...

  7. Pandas入门详细教程

    作者:luanhz 来源:小数志 导读 本文主要是对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀"的盛誉. 行文二级目录 01 关于 ...

  8. numpy入门详细教程(一)

    本讲主要介绍对numpy库和numpy库的N维数组对象:ndarray的基本了解.更多内容请看numpy入门详细教程(二) numpy: NumPy是一个开源的Python科学计算基础库,包含: • ...

  9. python数据科学系列:pandas入门详细教程

    导读 前2篇分别系统性介绍了numpy和matplotlib的入门基本知识,今天本文自然是要对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀&q ...

  10. Tm4c123GX(tiva)入门详细教程

    TM4C123GX系列 学了几个月的Tiva,总的来说这个款单片机功能还是比较强大的.下面我将以TM4C123GH6PM为例介绍其基本资源及工程建立,点亮板卡上的LED灯以及对基本的时钟配置.PWM. ...

最新文章

  1. 亲身经历,在实验室不要乱按按钮!!
  2. Activity has leaked window that was originally added 问题解决
  3. Metro风格的Java组合框(JMetro)–重新介绍
  4. 2016腾讯安全挑战赛第一轮-PC游戏方向
  5. 极光推送java demo_极光推送- 3 分钟 Demo - 极光文档
  6. php二进制保存到本地,C# 将二进制字符串保存到本地
  7. 上海市XXX区信息委门户网站集成项目总结
  8. 重构(Refactoring)技巧读书笔记 之三
  9. Hash和Bloom Filter
  10. Linux虚拟文件系统(内核初始化一)
  11. 乔治城大学计算机专业,Georgetown的Computer Science「乔治城大学计算机科学系」
  12. 淘宝店铺运营,店铺访客增加但是浏览量减少这是为什么,应该怎样解决?
  13. 树状数组(Binary Indexed Tree),看这一篇就够了
  14. 《日瓦戈医生》读后感
  15. Vue组件通信(父传子、子传父、兄弟通信)
  16. CGAN之条件生成对抗网络(Matlab)
  17. 嘉为蓝鲸CMP云管平台入选Gartner《中国云管理工具市场指南》
  18. C++ 使用string的头文件和要求
  19. EOS智能合约开发系列(19): 合约应当开源
  20. 安装mysql 配置环境变量

热门文章

  1. cpu顶盖怎么看步进_【有趣】第19期:如何从CPU顶盖获取有用信息(上)?
  2. 【科研作图】软件推荐资源汇总PPT瑞思拜!
  3. 基于单片机出租车计价器设计
  4. 全网解析视频接口自行测试
  5. 综述金属功能材料在计算机技术中的应用,金属功能材料杂志
  6. 【全网世界区划最全整理输出之第一部分】全世界所有国家的行政区划整理,省市信息,已按照国家,省,市排好序,可直接复制使用,第一部分4006条,总条数:21088
  7. swagger常用注解
  8. 计量经济学笔记2---最大似然估计
  9. matlab解超静定方程,超定方程和最小二乘法 | 学步园
  10. 网络TCP/IP基础(IP地址网络汇总与规划)