工具/软件:TI C/C++编译器
我使用 UART_openPort() API 打开端口,使用 UART_transmitBuffer()打印消息。
这也按设计工作、没有问题。
通过各种编辑,我删除了每个 UART_transmitBuffer(),除了在主循环之前出现的语句(因此整个程序中不会出现其他 UART 打印语句)。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
感谢您的回应!!
当您提到:"一种方法是在 vector= name 中进行拼写错误;这将得到警告、但您可能不会注意到。"
我将其确切地添加到哪里?
此外、这里是我的代码、如果你看到一些突出的东西(或者、如果你需要从函数中看到更多代码)、请告诉我-谢谢!!!
===========================
main.c:
===========================
void main (void)
{
/*设置看门狗计时器*/
WDTCTL = WDTPW | WDTHOLD;
/*初始化 MCU:
bsp_configureMCU()设置器件 IO 和计时
全局中断使能被设置为允许外设
来唤醒 MCU。 *
bsp_configureMCU();
/*打开端口进行通信*/
UART_openPort (&UARTPort);
/*设置 LED 引脚*/
GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN7);
GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN6);
GPIO_setAsOutputPin (GPIO_PORT_P5、GPIO_PIN7);
/* LED 初始设置*/
GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN7);
GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN6);
GPIO_setOutputLowOnPin (GPIO_PORT_P5、GPIO_PIN7);
/*配置按钮*/
buttonConfigure();
静态 uint32_t delayCounter = 0;
静态 uint16_t loopCounter = 0;
/*当它进入时,崩溃!! *
静态 uint8_t msg[]={"程序启动"};
UART_transmitBuffer (msg、sizeof (msg));
/* 主循环*/
while (1)
{
/*处理按钮*/
buttonProcess();
IF (delayCounter++> MAX_COUNTER)
{
delayCounter = 0;
GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN6);
loopCounter++;
}
}
}
===========================
button.c
===========================
void buttonConfigure( void )
{
GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P5、GPIO_PIN3);
/*设置边线*/
GPIO_selectInterruptEdge (GPIO_PORT_P5、GPIO_PIN3、GPIO_HIGH_TO_LOW_TRANSITION);
/*为此端口/引脚启用中断*/
GPIO_enableInterrupt (GPIO_PORT_P5、GPIO_PIN3);
/*清除中断*/
GPIO_clearInterrupt (GPIO_PORT_P5、GPIO_PIN3);
}
void buttonProcess (void)
{
/*清除位图*/
buttonInterruptStatusVal = 0x0000;
buttonInterruptStatusVal = GPIO_getInterruptStatus (GPIO_PORT_P5、GPIO_PIN3);
/*检查是否按下了按钮*/
if (buttonInterruptStatusVal)
{
GPIO_clearInterrupt (GPIO_PORT_P5、GPIO_PIN3);
/*切换 LED */
GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN7);
}
}
===========================
UART 设置的结构:
===========================
//设置 UART 传输的所有参数
CONST tUARTPort UARTPort =
{
//不接收消息,因此不需要回调
.pbReceiveCallback =空、
//不接收消息,因此不需要回调
.pbErrorCallback = 0、
//选择时钟源
.peripheralParameters.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK、
//时钟预分频器为 UCBRx = int (N / 16)、其中 N = clock_frequency / baud _rate
// N = 2000000 / 115200 = 17.36111
//int (N / 16)= int (17.36111 / 16)= int (1.0850694)= 1;
peripheralParameters.clockPrescalar = SMCLK_FREQ_MHz * 1000000 / 115200 / 16、
//控制过采样模式的 UCBRF 位
//UCBRF = int ((((N/16)- int (N/16))* 16)= int ((((17.36111/16)- int (17.36111/16))* 16)= int (1.36111)= 1
peripheralParameters.firstModReg = 1、
//请参阅用户指南中的表22-4以查找与 UCBRF 编号对应的寄存器值
// N 的小数部分= 0.36111
//在表中,0.36111 <--> 0x4A 或0x52
.peripheralParameters.secondModReg = 0x4A、
//控制奇偶校验位-请注意 eZ-FET 不支持奇偶校验位
peripheralParameters.parity = EUSCI_A_UART_NO_parity、
//最低或最高有效位优先
peripheralParameters.msborLsbFirst = EUSCI_A_UART_LSB_FIRST、
//选择一个或两个停止位
.peripheralParameters.numberofStopBits = EUSCI_A_UART_On_Stop_bit、
//选择是否使用多处理器/自动波特模式
peripheralParameters.uartMode = EUSCI_A_UART_MODE、
//选择过采样与低频率波特率模式
peripheralParameters.oversing= EUSCI_A_UART_oversing_BAUDRATE_generation
};
要回答您的问题:您可以使用"#pragma vector=定义 ISR (中断服务例程) vector"和_interrupt 关键字。
但我认为您不想这么做。 此代码(buttonProcess)正在轮询中断标志(IFG)。 没关系、但在这种情况下、您不应启用这些中断(IE)。 IFG 位的置位独立于它们相应的 IE 位。 (查看为您不关心的事件设置的 IFG 位是例程。)
摘要:删除此行:
> GPIO_enableInterrupt (GPIO_PORT_P5、GPIO_PIN3);