主题中讨论的其他器件:MSP430F5438A
工具/软件:Code Composer Studio
大家好、我对 MSP430微控制器非常陌生。 现在、我发现很难使用 MSP430 driverlib 运行 USCI uartA1反向通道来回显字符。 这是我从示例代码中获取的代码、并对使用 UART 反向通道进行了细微更改。 希望我可以解决这个问题。 我认为我做的一切都正确、请告诉我哪里出错了。
/*-版权所有-、BSD
*版权所有(c) 2017、德州仪器(TI)公司
*保留所有权利。
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
** 源代码的重新分发必须保留上述版权
* 注意、此条件列表和以下免责声明。
*
* *二进制形式的再发行必须复制上述版权
* 请注意、中的此条件列表和以下免责声明
* 随分发提供的文档和/或其他材料。
*
* *德州仪器公司的名称和名称均不相同
* 其贡献者可用于认可或推广衍生产品
* 未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者"按原样"提供
*以及任何明示或暗示的保证、包括但不限于:
*特定适销性和适用性的隐含保证
*不承认目的。 在任何情况下、版权所有者不得或
*派遣国应对任何直接、间接、偶然、特殊、
*典型或必然的损害(包括但不限于
*采购替代货物或服务;丧失使用、数据或利润;
*或业务中断)、无论原因是什么以及任何责任理论、
*无论是合同、严格责任还是侵权行为(包括疏忽或)
*否则)因使用本软件而以任何方式产生、
*即使被告知可能会发生此类损坏。
*--/版权--*/
//
//! 此示例展示了如何将 UART 模块配置为环回
//! 验证接收到的数据是否已发送。
//!
//! MSP430F5438A
//! --------
//! RST -| P3.4/UCA0TXD|---|
//! | | ||
//! | | ||
//! | P3.5/UCA0RXD|---|
//! | |
//!
//!
//! 此示例使用以下外设和 I/O 信号。 您必须执行的操作
//! 查看这些内容并根据您自己的董事会的需要进行更改:
//! UART 外设
//! - GPIO 端口外设(用于 UART 引脚)
//! UCA0TXD
//! UCA0RXD
//!
//! 此示例使用以下中断处理程序。 来使用该示例
//! 在您自己的应用程序中、您必须将这些中断处理程序添加到
//! 矢量表。
//! - USCI_A0_Vector。
//
#include "driverlib.h"
//
//
//选择波特率
//
//
#define BAUD_RATE 9600
//
//
//初始化接收到的数据
//
//
uint8_t receivedData = 0x00;
//
//
//初始化传输数据
//
//
uint8_t transmitData = 0x00;
uint8_t check = 0;
void main (void)
{
//停止 WDT
WDT_A_HOLD (WDT_A_base);
//P3.4、5 = USCI_A0 TXD/RXD
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P4、
GPIO_PIN4 + GPIO_PIN5
);
//波特率= 9600、时钟频率= 1.048MHz
//UCBRx = 109、UCBRFx = 0、UCBRSx = 2、UCOS16 = 0
USCI_A_UART_initParam param ={0};
param.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 109;
param.firstModReg = 0;
param.secondModReg = 2;
param.parity = USCI_A_uart_no_parity;
param.msborLsbFirst = USCI_A_UART_LSB_FIRST;
param.numerofStopBits = USCI_A_UART_One_STOP_BIT;
param.uartMode = USCI_A_UART_MODE;
param.oversaming= USCI_A_UART_LOW_FREQUENCY BAUDRATE_generation;
if (STATUS_FAIL = USCI_A_UART_init (USCI_A1_BASE、¶m)){
返回;
}
//启用 UART 模块以进行操作
USCI_A_UART_ENABLE (USCI_A1_BASE);
//启用接收中断
USCI_A_UART_clearInterrupt (USCI_A1_base、
USCI_A_UART_receive_interrupt);
USCI_A_UART_enableInterrupt (USCI_A1_BASE、
USCI_A_UART_receive_interrupt);
_enable_interrupt ();
while (1)
{
transmitData = transmitData+1; //增加 TX 数据
//将数据加载到缓冲区中
USCI_A_UART_transmitData (USCI_A1_base、
传输数据);
while (check!= 1);
CHECK = 0;
}
}
//
//
//这是 USCI_A0中断矢量处理例程。
//
//
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A1_BASE
_interrupt
#Elif defined (_GNU_)
__attribute__((中断(USCI_A1_base))
#endif
空 USCI_A1_ISR (空)
{
开关(_偶数_IN_RANGE (UCA1IV、4)){
//Vector 2 - RXIFG
案例2:
接收数据= USCI_A_UART_receiveData (USCI_A1_BASE);
if (!(receivedData = transmitData)) //检查值
{
while (1);
}
支票=1;
中断;
默认值:break;
}
}