LM3S的GPIO操作相关库函数
1 1.内核时钟设置
2 SysCtlClockSet
3 2.片上设备时钟使能
4 SysCtlPeripheralEnable
5 3.GPIO设置
6 GPIODirModeSet/Get // Param3:1.输入(数字、模拟) 2.输出(数字) 3.硬件决定(数字第二功能)
7 GPIOPadConfigSet/Get // Param2:1.驱动强度(数字、模拟)
8 // Param3:1.推挽/开漏(数字) 2.模拟功能(模拟)
9 注:上述两个函数被封装成了以下函数做简化
10 GPIOPinTypeGPIOInput //输入、2mA、推挽_GPIO
11 GPIOPinTypeGPIOOnput //输出、2mA、推挽_GPIO
12 GPIOPinTypeGPIOOutputOD //输出、2mA、开漏_GPIO
13
14 GPIOPinTypeADC //输入、2mA、模拟_ADC
15 GPIOPinTypeComparator //输入、2mA、模拟_比较器
16 GPIOPinTypeCAN //硬件、8mA、推挽_CAN
17 GPIOPinTypeEthernetLED //硬件、8mA、推挽_以太网LED
18 GPIOPinTypeI2C //硬件、2mA、开漏弱上拉_I2C
19 GPIOPinTypeI2S //硬件、2mA、推挽_I2S
20 GPIOPinTypePWM //硬件、2mA、推挽_PWM
21 GPIOPinTypeQEI //硬件、2mA、推挽弱上拉_QEI
22 GPIOPinTypeSSI //硬件、2mA、推挽_SSI
23 GPIOPinTypeTimer //硬件、2mA、推挽_Timer
24 GPIOPinTypeUART //硬件、2mA、推挽_Uart
25 GPIOPinTypeUSBDigital //硬件、2mA、推挽_USB
26 4 IO口读写
27 GPIOPinRead/Write //Pin数据读写
28
29
30
31 ..\..\driverlib_lm3s;..\..\INC_lm3s
32 G:\Keil\ARM\driverlib_lm3s\rvmdk\DriverLib.lib
33 ------------------------------------------------------------
34 GPIO用作中断的操作流程
35
36 1.系统时钟配置 SysCtlClockSet
37 2.GPIO设备时钟打开 SysCtlPeripheralEnable
38
39 3.Pin脚功能设置 GPIOPinTypeInput
40
41 4.Pin脚中断触发模式设置 GPIOIntTypeSet //0.片内外设中断模式配置
42
43 5.Pin脚中断允许 GPIOPinIntEnable //1.使能片内外设的具体中断
44 6.内设中断允许 IntEnable //2.使能片内外设的总中断
45 7.MCU总中断允许 IntMasterEnable //3.使能MCU的总中断
46
47 中断服务程序
48 1.读取中断源 GPIOPinIntStatus
49 2.清除中断源 GPIOPinIntClear //M3的内核中断,不需要手动清除
50 3.功能操作 自定义功能
51
52
53 //***********
54 1.中断模式设置
55 2.外设具体中断使能
56 3.外设总中断使能
57 4.MCU总中断使能
58
59 ----------------------------------------------------------------
60 UART的操作流程
61 1.系统时钟配置 SysCtlClockSet
62 2.GPIO设备时钟打开 SysCtlPeripheralEnable
63 3.UART设备时钟打开 SysCtlPeripheralEnable
64 4.GPIO复用引脚设定为Tx和Rx GPIOPinTypeUART
65 5.1UART工作参数配置 UARTConfigSetExpClk
66 [5.2] 若使用UART中断模式,则需配置
67 5.2.1 Tx和Rx引脚中断允许 UARTIntEnable
68 5.2.2 UART功能启动 UARTEnable
69 5.2.3 内设中断允许 IntEnable
70 6.UART收发
71 6.1 Block模式: (将NoBlock模式的4个函数封装成2个)
72 直接发送字符 UARTCharPut
73 直接接收字符 UARTCharGet
74 6.2 NoBlock模式:(使用FIFO)
75 等待Rx_FIFO有数据 UARTCharsAvail
76 等待Tx_FIFO有数据 UARTSpaceAvail
77 Block发送字符 UARTCharPutNonBlocking
78 Block接收字符 UARTCharGetNonBlocking (注:使用此函数,必须先查询UARTCharsAvail)
79 6.3 INT模式:(中断服务函数)
80 UART中断清除 UARTIntClear
81 使用Block/NoBlock模式发送和接收字符
82
83
84
85 ----------------------------------------------------------------
86 PWM的操作流程
87 1.系统时钟设置 SysCtlClockSet
88 2.PWM模块时钟设置 SysCtlPWMClockSet
89
90 3.GPIO设备时钟打开 SysCtlPeripheralEnable
91 4.PWM模块时钟打开 SysCtlPeripheralEnable
92
93 5.GPIO设置为硬件指定(PWM) GPIOPinTypePWM
94 6.Pin脚配置为PWM功能 GPIOPinConfigure
95
96 7.PWM发生器计数模式设置 PWMGenConfigure
97 8.PWM发生器周期设置 PWMGenPeriodSet
98 9.PWM发生器脉宽设置 PWMPulseWidthSet
99
100 10.PWM输出管脚使能 PWMOutputState
101 11.PWM启动 PWMGenEnable
102
103
104
105 ----------------------------------------------------------------
106 SysTick的操作流程
107 1.系统时钟设置 SysCtlClockSet
108
109 2.SysTick周期设置 SysTickPeriodSet//减法计数器,归零后自动重装
110 3.SysTick启动 SysTickEnable
111
112 4.MCU总中断开启 IntMasterEnable
113
114 5.SysTick中断服务函数
115 void SysTick_ISR()
116 {
117 //SysTick是系统内设,硬件自动清除中断,无须手动清除
118 ....//功能代码
119 }
120
121 -------------------------------------------------------------
122 Timer的操作流程
123 32bit 定时器
124 32bit RTC定时器
125 16bit 定时器
126 16bit 捕获器(边沿计数:计算有几个边沿;边沿定时:计算前后边沿的时间差)
127 16bit PWM
128
129 1.系统时钟设置 SysCtlClockSet
130 2.片上设备时钟使能 SysCtlPeripheralEnable
131
132 3.定时器工作模式设置 TimerConfigure
133 4.定时器载入值设置 TimerLoadSet
134
135 5.定时器中断使能 TimerIntEnable
136 6.外设中断总使能 IntEnable
137 7.MCU总中断使能 IntMaskEnable
138
139 8.定时器启动 TimerEnable
140
141 Timer中断服务函数
142 void Timer_ISR()
143 {
144 //手工清除中断状态
145 TimerIntClear();
146 ...//功能代码
147 }
148
149 -----------------------------
150 ADC操作流程
151
152 1.系统时钟设置 SysCtlClockSet
153 2.ADC所在GPIO外设时钟打开 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
154 3.IO口配置为ADC功能 GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3);
155 4.ADC外设时钟打开 SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC);
156 5.ADC采样序列配置 ADCSequenceConfigure(ADC0_BASE, 3, DC_TRIGGER_PROCESSOR, 0);
157 6.ADC采样序列步进配置 ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
158
159 // 启动AD的采样序列发生器3
160 ADCSequenceEnable(ADC0_BASE, 3);
161
162 // 清除中断标志
163 ADCIntClear(ADC0_BASE, 3);