Tm4c123GX(tiva)入门详细教程

2023-10-27

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 <stdio.h>

#include <stdint.h>

#include <stdbool.h>

#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波。源码看附录。

     https://img-blog.csdnimg.cn/20190624170408169.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMjYzNzk2,size_16,color_FFFFFF,t_70 ​    

 //设置PWM时钟为系统时钟的1分频

      SysCtlPWMClockSet(SYSCTL_PWMDIV_1);

//配置PWM0模块

SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);

//使用B系列的 GPIO口输出PWM

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

//相应的GPIOPWM功能

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tm4c123GX(tiva)入门详细教程 的相关文章

  • 05-STM32F1 - 串行通信1-UART(3),printf,scanf重定向

    05 STM32F1 串行通信UART xff0c printf xff0c scanf重定向 在C 语言标准库中 xff0c fputc 函数是printf 函数内部的一个函数 xff0c 功能是将字符ch 写入到文件指针file所指向文
  • UART协议

    UART协议 简介 UART是通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART xff0c 是一种异步收发传输器 是设备间进行异步通信的关键
  • UART一对多通信的方法

    通常 xff0c uart为单对单通信 xff0c 当用到一对多时可以用RS485 然而有时候我们MCU的uart口只剩一个 xff0c 又要接多个uart的外围芯片 xff0c 这时如果转成RS485需要加多个485收发器 xff0c 成
  • 1、串口(UART/COM/TTL/RS232/RS485)

    目录 串口简介 串行通讯制式 UART 2 1 简介 2 2 电平标准 TTL RS232 RS485 2 3 电平转换 xff08 重点讲解RS232 TTL xff09 USB转TTL USB转RS232 USB转RS485 RS232
  • ESP32+WiFi+UART数据传输测试

    刚开始使用ESP32芯片 xff0c 摸索着实现了一个数据传输的功能 xff0c 记录下来以免忘记 实现功能 使用ESP32在服务器与下位机之间传输数据 xff0c 整体的流程图如下所示 如图所示 xff0c 下位机与ESP通过串口连接 x
  • STM32 HAL UART 使用关键思路(无代码,但是很关键)

    1 到底使用哪种方式 xff0c 或者说有哪几种方式 xff1f STM32 中的 UART 允许使用不同的发送 TX 和接收 RX 模式进行配置 xff0c 有什么区别和优势 xff1f xff1a 轮询模式 xff08 简单来说就是无
  • UART, IIC, SCI, SPI, 232, 485, 422, CAN, SDIO, GPIO, MODBUS, TCP/IP汇总简介

    UART IIC SCI SPI 232 485 422 CAN SDIO GPIO MODBUS TCP IP汇总简介 UART xff1a Universal Asynchronous Receiver Transmitter xff1
  • arduino学习——UART串口通信

    Serial begin 初始化串口 用作串口的启动 xff0c 常放置在setup xff08 xff09 中 原型 xff1a Serial begin speed Serial begin speed config 参数 xff1a
  • 一文理解UART通信

    还记得当年的打印机 xff0c 鼠标和调制解调器吗 他们都有巨大笨重的连接器和粗电缆 xff0c 并且必须拧到你的电脑上 这些设备正是使用UART协议与计算机进行通信 虽然USB几乎完全取代了旧的电缆和连接器 xff0c 但UART绝对没有
  • 串口通信协议 UART+I2C+SPI

    UART 异步 串行 全双工 I2C SPI 不同通信协议比较 UART UART协议详解 UART通信 xff0c 接收与发送 xff08 详细版 xff0c 附代码 xff09 UART串行通信详解 待整理 UART是Universal
  • HAL_UART_IRQHandler(UART_HandleTypeDef *huart)里面的中断接收函数

    目录 前言1 UART Receive IT2 HAL UART Receive3 HAL UART Receive IT 前言 看了很长时间串口中断的HAL库 xff0c 最容易混淆的就是函数的名称 xff0c 主要集中在UART Rec
  • UART串口通信

    串口是 串行接口 的简称 xff0c 即采用串行通信方式的接口 串行通信将数据字节分成一位一位的形式在一条数据线上逐个传送 xff0c 其特点是通信线路简单 xff0c 但传输速度较慢 因此串口广泛应用于嵌入式 工业控制等领域中对数据传输速
  • DSP CCS 12.00运用, 产生正弦波的图像 芯片:F28335

    1 首先建立新的项目 工程 2 参数选择 3 设置数据 保证与芯片得连接 4 整理思路 信号频率 1000 HZ 采样频率 20000 HZ 采样点数 128 5 代码 头文件的定义 include stdio h include math
  • 嵌入式Linux应用开发笔记:串口

    文章目录 目的 基础说明 开发准备 设备树 应用程序 应用程序与演示 代码 演示 总结 设备树文件 目的 串口 UART 是嵌入式设备中比较常用的功能 这篇文章将记录下应用程序中串口操作相关内容 这篇文章中内容均在下面的开发板上进行测试 新
  • 小白教程——Windows下用PHP写一个简单的登录注册页面(一)

    今天给入门级小白介绍一种以PHP作为后台环境做简单的登录注册页面 首先我们需要配置环境 我们不用专门去下载配置PHP环境 只需要用一个软件就一切搞定 那就是强大的wampserver官方网站 你可以在官网里面下载也可以直接在国内一些下载平台
  • UART通信原理

    UART 通信格式 串口全称叫做串行接口 通常也叫做 COM 接口 串行接口指的是数据一个一个的顺序传输 通信线路简单 使用两条线即可实现双向通信 一条用于发送 一条用于接收 串口通信距离远 但是速度相对会低 串口是一种很常用的工业接口 I
  • CCS软件的Graph功能

    如何正确使用CCS自带绘图Graph功能 Single Time使用演示 点击菜单栏Tools gt Graph gt Single Time 如图所示 点开后出现如下的对话窗口 下面对里面的每一项参数进行一下说明 Acquisition
  • 以字符串形式接收数字(uart)

    我正在尝试通过 uart 接收一个包装为字符串的数字 我发送数字 1000 所以我得到 4 个字节 空字符 但是 当我使用 atoi 将数组转换为数字并将整数与 1000 进行比较时 我并不总是得到正确的数字 这是我用于接收号码的中断处理函
  • 启用并测试 UART 的本地环回

    我正在尝试进行 UART 内部环回测试并提出以下更改 include
  • C语言UART通信(十六进制)

    我想向写入函数发送一个十六进制值 例如 0 90 这是因为需要通信的设备接收到的是十六进制数的命令 未使用的变量在测试时出现 并注释为丢失十六进制值 稍后将被删除 如何编写具有字符串以外的十六进制值的写入函数 对于初学者 请告诉我们如何通过

随机推荐

  • 搭建CentOS在线yum源镜像服务器

    说明 操作系统 CentOS 6 7 Nginx版本 1 8 0 rsync版本 3 0 6 IP地址和端口 192 168 3 100 8080 目标 同步CentOS镜像站点的内容到此服务器 通过配置http服务器 提供yum服务 一
  • Python——math库常用的数学函数

    在使用math库前 要用import导入该库 上图为math库中常用的一些数学函数 下面给出具体实例 例1 import math a eval input 请输入一个负数 print a math fabs a 输出结果 例2 impor
  • 【LeetCode刷题】237 删除链表中的节点

    题目 请编写一个函数 用于 删除单链表中某个特定节点 在设计函数时需要注意 你无法访问链表的头节点 head 只能直接访问 要被删除的节点 题目数据保证需要删除的节点 不是末尾节点 示例 这题其实真的简单 只能直接访问到给定要删除的节点 本
  • 设置Tab键为4个空格 Java开发手册规范之tab键设置

    设置Tab键为4个空格 在阿里的Java开发手册 一 编程规约 三 代码格式 第5条提到 强制 采用4个空格缩进 禁止使用tab字符 IDEA中勿勾选 Use tab character eclipse中必选 insert spaces f
  • [JAVEee]SpringBoot项目的创建

    SpringBoot可以更好的开发Spring项目 本文章将使用idea社区版来演示创建项目的过程与注意事项 SpringBoot的优点 SpringBoot中内置快速添加依赖的功能 能够便捷的集成各种框架 帮助开发 内置运行容器 无需配置
  • Linux top里面%CPU和us%的解释

    有的同学会把 CPU和us 搞晕 也就是下图所示在top的时候查看cpu的信息 这时有的同学会问 这两个CPU到底哪个是对的 其实都是对的 只是表达的意思不一样 官方解释如下 Cpu s 34 0 us 用户空间占用CPU百分比 CPU 上
  • 2023华为OD机试真题【最小调整顺序次数】

    问题描述 给定一个队列 但是这个队列比较特殊 可以从头部添加数据 也可以从尾部添加数据 但是只能从头部删除数据 输入一个数字n 会依次添加数字1 n 也就是添加n次 但是在添加数据的过程中 也会删除数据 要求删除必须按照1 n按照顺序进行删
  • 13 二叉树:建立存储结构(前序输入次序) &&二叉树专题

    目录 首先讲讲指针的引用 然后我们再复习一下typedef的用法 然后我们来创建二叉树 二叉树的建立 首先二叉树的存储结构 实际用代码体现 分为顺序存储和链式存储两种 但一般情况我们都用链式存储结构 部分内容转自指针的引用 MAGDB的博客
  • ChatGPT还有哪些不足?

    从技术角度来看 ChatGPT作为一个基于神经网络的自然语言处理模型 其优势在于能够处理大量的语言数据 并生成自然流畅的语言表达 ChatGPT还可以通过对话历史的分析 对当前对话进行上下文感知和情境推理 从而提供更加个性化和智能化的回答
  • Lua 输出可变参数列表内容

    在 Lua 中有8种基本数据类型 nil boolean number string user data function thread table 数据类型 描述 nil 表示一个无效值 boolean 包含两个值 false 和 tru
  • 第三章:关系数据库标准语言SQL

    模式数据定义语言 Schema Data Definition lanuage DDL 外模式数据定义语言 Subschema Data Definition lanuage 外模式DDL 数据存储有关的描述语言 Data storage
  • fedora常用命令

    fedora经验总结 新手必看 一 常用技巧 1 在linux中设置环境变量的方法 如果命令在环境变量已经设置的路径下 在终端命令行输入该命令的文件名和参数 如需要参数 回车即可 如果不在已设路径下 命令前需要加上完整的路径 每次都这样会很
  • Kotlin学习笔记

    1 方法中的参数 有var val 与没有的区别 fun A var name String fun A name String 有var val 表示是当前类的一个属性 无var val 表示是当前方法的一个参数 2 Kotlin中各种声
  • yolov5txt格式的labels转为coco的json格式

    最近在学习ppyoloe 标签文件的格式是coco的json格式 需要把yolov5的txt文件转为json 以下代码即可实现 import os import json import cv2 import random import ti
  • python创建学生类姓名学号_python定义一个学生类,包括学号、姓名和出生日期三个属性(数据成员);包括一个用...

    匿名用户 1级 2018 11 09 回答 import datetime class student def init self Sno Sname Sbarthday Sfaction self Sage 0 self Sgarde 优
  • 代码审计-Java项目&Filter过滤器&CNVD分析&XSS跨站&框架安全

    文章目录 Demo Filter 过滤器引用 Demo ST2框架 组件安全 CNVD Jeesns XSS跨站绕过 CNVD 悟空CRM Fastjson组件 Demo Filter 过滤器引用 Filter Javaweb三大组件之一
  • 【报错】jpa 双向映射导致栈溢出&Jackson的常用注解

    org springframework http converter HttpMessageNotWritableException Could not write JSON Infinite recursion StackOverflow
  • c++ 内存存储 解决char*p, char p[]的问题

    栈 通常用于编译期间就能确定存储大小的变量的存储区 用于在函数作用域内创建 在离开作用域后自动销毁的变量的存储区 有种说法是默认大小1M 堆 通常用于那些在编译期间不能确定存储大小的变量的存储区 它的存储空间是不连续的 一般由malloc
  • python学习—第一步—聪明方法学python

    目录 学习参考资料 遇到的一些小问题 python环境配置与基本语法 python安装与vscode绑定 python常量与变量 常量 变量 python运算符与函数 运算符 函数 局部变量与全局变量 控制流 python数据结构 序列Li
  • Tm4c123GX(tiva)入门详细教程

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