TM4C123笔记(二、常用函数)

写在最前:博主19届电赛参赛,因为要用到TI的板子所以从0开始学习TM4C123,由于第一次接触所以很多地方都可能会有错误!欢迎指出~ QQ是1159806228 参赛题目是控制飞控组


TM4C123库函数存放有两个位置,一个是CPU本身一个是ROM,ROM里有更多函数,ROM里函数用前缀加以区分,本质一样。

#include "inc/hw_memmap.h"就是两类库函数的映射,简单说就是默认先在CPU里找函数,找不到就去ROM里找。

函数如ROM_SysCtlClockSet();前带了"ROM_"在TI库函数手册查的时候把这个前缀去掉即可。

即“ROM_SysCtlClockSet()“=”SysCtlClockSet()“仅仅是存放位置不同罢了

1. 时钟篇

·

SysCtlClockSet();

如:SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |SYSCTL_OSC_MAIN);

//函数意义:时钟选择;各参数:分频系数/有没有用PLL/用的什么晶振/时钟源

//分频系数SYSCTL_SYSDIV_1,SYSCTL_SYSDIV_2, SYSCTL_SYSDIV_3, …
SYSCTL_SYSDIV_64

//有没有用PLL:SYSCTL_USE_PLL ,SYSCTL_USE_OSC.

//外部晶振:(LaunchPad是16MHz)

SYSCTL_XTAL_4MHZ, SYSCTL_XTAL_4_09MHZ, SYSCTL_XTAL_4_91MHZ,

SYSCTL_XTAL_5MHZ, SYSCTL_XTAL_5_12MHZ, SYSCTL_XTAL_6MHZ,

SYSCTL_XTAL_6_14MHZ, SYSCTL_XTAL_7_37MHZ, SYSCTL_XTAL_8MHZ,

SYSCTL_XTAL_8_19MHZ, SYSCTL_XTAL_10MHZ, SYSCTL_XTAL_12MHZ,

SYSCTL_XTAL_12_2MHZ, SYSCTL_XTAL_13_5MHZ, SYSCTL_XTAL_14_3MHZ,

SYSCTL_XTAL_16MHZ, SYSCTL_XTAL_16_3MHZ, SYSCTL_XTAL_18MHZ,

SYSCTL_XTAL_20MHZ, SYSCTL_XTAL_24MHZ, or SYSCTL_XTAL_25MHz.

//时钟源(这个暂时没明白每个的准确指代…那个int是什么意思没搞懂):SYSCTL_OSC_MAIN,

SYSCTL_OSC_INT, SYSCTL_OSC_INT4, SYSCTL_OSC_INT30, or SYSCTL_OSC_EXT32.

·

SysCtlPeripheralEnable

如:SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

//使能外设,不仅是GPIO,还有串口定时器等

2. GPIO篇

·

GPIOPinTypeGPIOOutput

如:GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);

//GPIO输出配置:port主地址+偏移量

·

GPIOPinWrite

如:GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 1);

//显然是控制GPIO输出高低电平

·

SysCtlPeripheralReady

//检测外设时钟配置好没:一般这么用↓

while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF))
{ }

·

GPIOPinTypeGPIOInput

如:GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_4);

//配置IO口输出

·

GPIOPadConfigSet

如:GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);

//输出设置:

//GPIO_PIN_TYPE_STD_WPU弱上拉

GPIO_PIN_TYPE_STD_WPD弱下拉

GPIO_PIN_TYPE_STD为推挽引脚

GPIO_PIN_TYPE_OD为开漏

GPIO_PIN_TYPE_ANALOG模拟输入

GPIO_PIN_TYPE_WAKE_HIGH高电平唤醒

GPIO_PIN_TYPE_WAKE_LOW低电平唤醒

·

GPIOPinRead

GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4);

//读GPIO

·

3.其他

·

FPULazyStackingEnable();

FPUEnable();

//使能浮点单元,TM4有专门的FPU所以使能了这个可以给之后的浮点计算减少CPU负担

·

SysCtlDelay(SysCtlClockGet() / n / 3);

//延时,延时时间=1/n秒

//解释: TI论坛上的解释粘过来:
SysCtlDelay(SysCtlClockGet()/1000/3) 这个函数执行的结果就是延时1ms,无论你的系统时钟是多少,当然你的系统时钟是不能低于3K的。 SysCtlClockGet()函数返回的值是系统的频率,也就是1S钟的CLOCK个数,这个个数/1000就是1ms系统时钟的个数,由于SysCtlDelay函数一个循环判断执行需要3个CLOCK时钟,所以系统时钟/3000就表示系统执行1ms的时间。 由此可以看出这个函数执行的结果就是延迟1ms. 在不同的系统时钟下,调用该函数都是延迟1ms.

·

UARTprintf(“Hello,world!\n”);

(这个在uartstdio.c中,非官方库,我是在examples看到这个的)

//类似printf,和原子给32的那个printf函数一个意思,默认串口1输出

//记得先把串口1配置好再用!

//要修改默认输出串口:uartstdio.c文件126行可以修改

//也可以直接用下面函数替代,这样就不用引用uartstdio.c啦(毕竟这个不是TI官方库),参数:字符串地址、字节数

void UARTSend(const uint8_t *pui8Buffer, uint32_t ui32Count)
{
// Loop while there are morecharacters to send.
while(ui32Count–)
{
// Write the next characterto the UART.
ROM_UARTCharPutNonBlocking(UART0_BASE,*pui8Buffer++);
}
}

如:UARTSend((uint8_t *)"\033[2JEnter text: ",16);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值