主题中讨论的其他器件:TM4C123GH6PM
工具/软件:Code Composer Studio
您好!
我正在使用基于 ARMCortex
-M4F 的 MCU TM4C123G LaunchPad
评估套件,我编写了一个代码,以更好地展示 TM4C123GH6PM 和 Tiva API 的工作方式。
我从资源探索中导入了闪烁代码、并对其进行了修改。 当我调试代码时、它不能像我预期的那样工作。 PF_2每20ms 更改一次它的状态(正如我所期望的那样)、但 PF_1有一种陌生的行为、在 PF_2变为高电平10ms 后变为高电平、20ms 后变为低电平并返回高电平、20ms 后变为低电平。 在 PF_2的"低电平"状态下也会发生同样的情况。
我认为我的代码有错误、但我不知道这是 GPIO 函数问题还是其他问题。
代码:
/*
* PORT_A:PORT_B:PORT_C:
*
* VALV_3 PA_5 VALV_1 PB_0 VALV_11 PC_7
* VALV_4 PA_6 VALV_2 PB_1 VALV_13 PC_6
* VALV_5 PA_7 VALV_12 PB_6 VALV_15 PC_4
* VALV_7 PA_3 VALV_14 PB_7 VALV_16 PC_5
* VALV_8 PA_2 VALV_18 PB_3
* VALV_9 PA_6 VALV_20 PB_2
*
* PORT_F:PORT_D:
*
* VALV_6 PF_1 VALV_9 PD_6
* VALV_17 PF_3
* VALV_19 PF_2
*
*
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_ints.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"
#include "driverlib/interrupt.h"
#define VALV_1 GPIO_PIN_0
#define VALV_2 GPIO_PIN_1
#define VALV_3 GPIO_PIN_5
#define VALV_4 GPIO_PIN_6
#define VALV_5 GPIO_PIN_7
#define VALV_6 GPIO_PIN_1
#define VALV_7 GPIO_PIN_3
#define VALV_8 GPIO_PIN_2
#define VALV_9 GPIO_PIN_6
#define VALV_10 GPIO_PIN_4
#define VALV_11 GPIO_PIN_7
#define VALV_12 GPIO_PIN_6
#define VALV_13 GPIO_PIN_6
#define VALV_14 GPIO_PIN_7
#define VALV_15 GPIO_PIN_4
#define VALV_16 GPIO_PIN_5
#define VALV_17 GPIO_PIN_3
#define VALV_18 GPIO_PIN_3
#define VALV_19 GPIO_PIN_2
#define VALV_20 GPIO_PIN_2
#define VALV_A VALV_3|VALV_4|VALV_5|VALV_7|VALV_8|VALV_9
#define VALV_B VALV_1|VALV_2|VALV_12|VALV_14|VALV_18|VALV_20
#define VALV_C VALV_11|VALV_13|VALV_15|VALV_16
#define VALV_D VALV_9
#define VALV_F VALV_6|VALV_17|VALV_19
volatile int timer = 0;
volatile signed int Flag1 = 1;
volatile signed int flag2 = 1;
volatile int32_t x;
空 Timer0Isr(){
Timer++;
TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
}
空 TimerInit(){
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_TIMER0)){}
TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
TimerIntRegister (TIMER0_BASE、TIMER_A、Timer0Isr);
内部使能(INT_TIMER0A);
TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
IntPrioritySet (INT_TIMER0A、0x00);
}
void GPIOInit(){
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOA)){}
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOB)){}
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOC)){}
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOD)){}
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOF)){}
GPIOPinTypeGPIOOutput (GPIO_Porta_base、VALV_A);
GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE、VALV_B);
GPIOPinTypeGPIOOutput (GPIO_PORTC_BASE、VALV_C);
GPIOPinTypeGPIOOutput (GPIO_PORTD_base、VALV_D);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、VALV_F);
}
int main (空)
{
SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
IntMasterEnable();
GPIOInit();
TimerInit();
TimerEnable (TIMER0_BASE、TIMER_A);
TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ()/ 100000);
while (1){
如果(计时器= 1000){
Flag1 =-Flag1;
if (Flag1 = 1){
GPIOPinWrite (GPIO_PORTF_BASE、VALV_6、VALV_6);}
否则{
GPIOPinWrite (GPIO_PORTF_BASE、VALV_6、0x00);}
}
如果(定时器==2000){
flag2 =-flag2;
计时器= 0;
if (flag2 ==1){
GPIOPinWrite (GPIO_PORTF_BASE、VALV_19、VALV_19);
}
否则{
GPIOPinWrite (GPIO_PORTF_BASE、VALV_19、0x00);}
}
}
}