我将以下代码烧录到基本上通过微控制器的UCA0串行模块在每次中断时发送0xc5字符的器件上。出于某种原因,当我在示波器上观察引脚3.4时看不到输出。使用MSP430F5438A微控制器通过UART发送数据
#include "msp430x54xA.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//P3IN = 0x08; // P3.5 RXD input
P3OUT = 0x10; // P3.4 TXD output
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600=3.41 (see User's Guide)
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS_3+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3, interrupts enabled
__no_operation(); // For debugger
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
UCA0TXBUF = 0xc5;
}
的代码是这里的代码稍加修改的版本:https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/166345
为什么我看不到相应的引脚输出?
编辑以添加新的代码,而不必中断:
#include "msp430x54xA.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//P3IN = 0x08; // P3.5 RXD input
P3OUT = 0x10; // P3.4 TXD output
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600=3.41 (see User's Guide)
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS_3+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
while (1) {
UCA0TXBUF = 0xc5;
__delay_cycles(25000000);
}
}
从数据表中使用的寄存器的总结:
什么你在做什么来提高中断? –
,直到你有它的工作不使用中断。一次走一步,在跑步之前走路。首先尝试TX,只是爆炸的东西。确认你有正确的设置/速度。然后从一个愚蠢的终端tx,看到rx通过回显它的作用。然后轮询中断并清除它并完全理解它,最后将中断启用到内核中。 –
你有什么部分完成? –