GPIO部分:
811的GPIO能够承受5V的电平,可以与5V供电的方面的交流。其中特别需要注意的是在1000以下的系列中,PB7\PC0\PC1\PC2\PC3与JTAG复用,对于811需要特别注意一旦锁死意味着芯片报废,对于1000以上的系列用到这些IO需要先进行解锁操作。
在流明的库里至少包含了27个关于GPIO的接口函数。他们分别用于实现:中断屏蔽、边沿触发方式选择、电平触发、弱上拉或者弱下拉、2,4,8ma的驱动能力的选择、开漏使能,AHB能等功能。
GPIO管脚可以被配置为多种模式,包括高阻输入、推挽输出、开漏输出等,其中开漏输出用于挂载总线。
GPIO在复位后是没有使能的,当需要的时候才使能,体现了其低功耗的设计。所以在操作GPIO的时候需要按照以下步奏:
1使能
2配置为输入、输出或者特殊功能模式
3读或者写GPIO
例子1(实现用KEY控制LED的亮灭)
#include "systemInit.h"
// 定义LED
#define LED_PERIPH SYSCTL_PERIPH_GPIOC
#define LED_PORT GPIO_PORTC_BASE
#define LED_PIN GPIO_PIN_5
// 定义KEY
#define KEY_PERIPH SYSCTL_PERIPH_GPIOC
#define KEY_PORT GPIO_PORTC_BASE
#define KEY_PIN GPIO_PIN_4
// 主函数(程序入口)
int main(void)
{
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MHz
SysCtlPeriEnable(LED_PERIPH); // 使能LED所在的GPIO端口
GPIOPinTypeOut(LED_PORT, LED_PIN); // 设置LED所在的管脚为输出
SysCtlPeriEnable(KEY_PERIPH); // 使能KEY所在的GPIO端口
GPIOPinTypeIn(KEY_PORT, KEY_PIN); // 设置KEY所在管脚为输入
for (;;)
{
if (GPIOPinRead(KEY_PORT, KEY_PIN) == 0x00) // 如果按下KEY
{
GPIOPinWrite(LED_PORT, LED_PIN, 0x00); // 点亮LED
}
else
{
GPIOPinWrite(LED_PORT, LED_PIN, 0xFF); // 熄灭LED
}
SysCtlDelay(10 * (TheSysClock / 3000)); // 延时约10ms
}
}