工具/软件:Code Composer Studio
我尝试使用 SysTick 来创建延迟。但只有第一个 LED 始终亮起...
我的代码如下所示。
#include
#include "tm4c123ghp6.h"
void SysTick Init (void);//初始化 SysTick 计时器
void SysTick 等待(unsigned long delay1);
void SysTK_Wait10ms (unsigned long delay1);//等待时间
//***** 2.全球声明部分*****
//函数原型:定义的每个子例程
//Next[8]数组代表8个输入和下一个状态转换
//第一个数组元素代表000个输入,第二个数组元素代表001个输入,依此类推,最多111个(第八个输入)
//输入位表示- MSB=步进传感器、中间位=南传感器、LSB =西传感器
//FSM[9]={
//{输出到六个信号 LED (TrafficLights_Cars)、输出到两个行人 LED (TrafficLights_Ped)、以10ms 为单位的时间、Next[8]阵列元素(Next States)}、
//…………………
无符号长整型输入;
//***** 3.子例程部分*****
int main (void){
volatile unsigned long delay;
GPIO_PORTB_AMSEL_R=0x00;//禁用端口 B 上的模拟
GPIO_Porte _AMSEL_R=0x00;//禁用端口 E 上的模拟
GPIO_PORTB_PCTL_R=0x00000000;//启用常规 GPIO
GPIO_Porte _PCTL_R=0x00000000;//启用常规 GPIO
GPIO_PORTB_DIR_=0x1F;// PB0-5上的输出
GPIO_Porte _DIR_=0x00;// PE0-2上的输入
GPIO_PORTB_AFSEL_R=0x00;//禁用备用功能
GPIO_Porte _AFSEL_R=0x00;//禁用备用功能
GPIO_PORTB_DEN_R=0x1F;//在 PB0-5上启用数字 I/O
GPIO_Porte _DEN_R=0x07;//在 PE0-2上启用数字 I/O
while (1){
GPIO_PORTB_DATA_R=0x01;
SysTK_Wait10ms (100);
GPIO_PORTB_DATA_R=0x02;
SysTK_Wait10ms (100);
}
}
void SysTick Init (void){
NVIC_ST_CTRL_R = 0;//在设置期间禁用 SysTick
NVIC_ST_CTRL_R = 0x00000005;//使用内核时钟启用 SysTick
}
//延迟参数以80 MHz 内核时钟的单位表示。 (12.5ns)
void SysTick 等待(unsigned long delay2){
NVIC_ST_RELOAD_R = delay2-1;//等待计数
NVIC_ST_CURRENT_R = 0;//写入当前的任何值都会清除
while ((NVIC_ST_CTRL_R&0x00010000)=0){//等待计数标志
}
}
// 800000*12.5ns 等于10ms
void SysTK_Wait10ms (无符号长 delay1){
unsigned long i;
for (i=0;<delay1; i++){
SysTick 等待(800000);//等待10ms
}
}