今天熟悉了一下LM提供的StellarisWare固件库,感觉跟STM32的固件库有很大的差异,使用上有点像Windows平台API函数的意思,使用外设的时候到对应的固件库看看有啥函数可以用就行了。
原来没接触过LM3的芯片,所以循序渐进先摸索了一下最基本的系统时钟和GPIO。
1.系统时钟
LM3的主振荡器可以连接一个1~8.192MHz的外部晶体,同时内部集成有一个PLL,PLL 输出频率固定为200MHz,由于LM3的最高运行频率为 50MHz,因此如果要使用PLL,则至少要进行4以上的分频。系统时钟设置对应的固件库是sysctl,具体使用方法见后面的程序示例。
2.GPIO
GPIO模块由多个8位端口组成,GPIO管脚可以被配置为多种工作模式,比如高阻输入、推挽输出、开漏输出等等。GPIO设置对应的固件库是gpio,具体使用方法见后面的程序示例。
3.示例程序
int main(void)
{
SysCtlClockSet(SYSCTL_USE_OSC | //不采用PLL
SYSCTL_OSC_MAIN | //主振荡器
SYSCTL_XTAL_8MHZ | //8MHz晶振
SYSCTL_SYSDIV_1); //不分频,结果为8M
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //打开PF时钟
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, 0x01); //设PF为输出
while(1)
{
GPIOPinWrite(GPIO_PORTF_BASE,(GPIO_PIN_0),0x01); //F0高电平
delay(5000000); //延时
GPIOPinWrite(GPIO_PORTF_BASE,(GPIO_PIN_0),0x00); //F0低电平
delay(5000000); //延时
}
}
SysCtlClockSet函数-进行时钟设置;
SysCtlPeripheralEnable函数-在使用GPIO模块之前必须首先要使能;
GPIOPinTypeGPIOOutput函数-将PF设为输出;
在While里不断的反转PF0电平,实现LED的闪烁。
上面的程序为8M主频,如果要实现全速50MHz,可以进行如下更改:
SysCtlClockSet(SYSCTL_USE_PLL | //采用PLL,200MHz
SYSCTL_OSC_MAIN | //主振荡器
SYSCTL_XTAL_8MHZ | //8MHz晶振
SYSCTL_SYSDIV_4); //4分频,结果为50M
改变设置后,可以看到开发板上的LED闪烁频率明显变快了,证明主频的确提高了。
最后附上源代码,是MDK的。这里顺便提一下,如果不会建MDK的工程,随便找个例子,照猫画虎就行了。