tm4c123g c语言,Tm4c123GX(tiva)入门详细教程
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)入门详细教程相关推荐
- spring入门详细教程(五)
前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...
- Spring入门详细教程(四)
前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...
- Spring入门详细教程(三)
前言 本篇紧接着spring入门详细教程(二),建议阅读本篇前,先阅读第一篇和第二篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/101 ...
- Spring入门详细教程(二)
前言 本篇紧接着spring入门详细教程(一),建议阅读本篇前,先阅读第一篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/1016553 ...
- ThinkJS框架入门详细教程(二)新手入门项目
一.准备工作 参考前一篇:ThinkJS框架入门详细教程(一)开发环境 安装thinkJS命令 npm install -g think-cli 监测是否安装成功 thinkjs -v 二.创建项目 ...
- NMAP入门详细教程
NAMP入门详细教程 一.功能: 网络扫描和嗅探. 二.原理: 使用TCP/IP协议栈指纹准确地判断目标主机的相关信息. 三.作用: 识别活跃主机 识别开放端口以及相关的服务 识别主机的系统指纹 路由 ...
- Pandas入门详细教程
作者:luanhz 来源:小数志 导读 本文主要是对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀"的盛誉. 行文二级目录 01 关于 ...
- numpy入门详细教程(一)
本讲主要介绍对numpy库和numpy库的N维数组对象:ndarray的基本了解.更多内容请看numpy入门详细教程(二) numpy: NumPy是一个开源的Python科学计算基础库,包含: • ...
- python数据科学系列:pandas入门详细教程
导读 前2篇分别系统性介绍了numpy和matplotlib的入门基本知识,今天本文自然是要对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀&q ...
- Tm4c123GX(tiva)入门详细教程
TM4C123GX系列 学了几个月的Tiva,总的来说这个款单片机功能还是比较强大的.下面我将以TM4C123GH6PM为例介绍其基本资源及工程建立,点亮板卡上的LED灯以及对基本的时钟配置.PWM. ...
最新文章
- 亲身经历,在实验室不要乱按按钮!!
- Activity has leaked window that was originally added 问题解决
- Metro风格的Java组合框(JMetro)–重新介绍
- 2016腾讯安全挑战赛第一轮-PC游戏方向
- 极光推送java demo_极光推送- 3 分钟 Demo - 极光文档
- php二进制保存到本地,C# 将二进制字符串保存到本地
- 上海市XXX区信息委门户网站集成项目总结
- 重构(Refactoring)技巧读书笔记 之三
- Hash和Bloom Filter
- Linux虚拟文件系统(内核初始化一)
- 乔治城大学计算机专业,Georgetown的Computer Science「乔治城大学计算机科学系」
- 淘宝店铺运营,店铺访客增加但是浏览量减少这是为什么,应该怎样解决?
- 树状数组(Binary Indexed Tree),看这一篇就够了
- 《日瓦戈医生》读后感
- Vue组件通信(父传子、子传父、兄弟通信)
- CGAN之条件生成对抗网络(Matlab)
- 嘉为蓝鲸CMP云管平台入选Gartner《中国云管理工具市场指南》
- C++ 使用string的头文件和要求
- EOS智能合约开发系列(19): 合约应当开源
- 安装mysql 配置环境变量
热门文章
- cpu顶盖怎么看步进_【有趣】第19期:如何从CPU顶盖获取有用信息(上)?
- 【科研作图】软件推荐资源汇总PPT瑞思拜!
- 基于单片机出租车计价器设计
- 全网解析视频接口自行测试
- 综述金属功能材料在计算机技术中的应用,金属功能材料杂志
- 【全网世界区划最全整理输出之第一部分】全世界所有国家的行政区划整理,省市信息,已按照国家,省,市排好序,可直接复制使用,第一部分4006条,总条数:21088
- swagger常用注解
- 计量经济学笔记2---最大似然估计
- matlab解超静定方程,超定方程和最小二乘法 | 学步园
- 网络TCP/IP基础(IP地址网络汇总与规划)