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.
我已将 MSP430FR2522插入 MSP-TS430RHL20评估板的插座中。 我修改了环回示例项目,使 UART 在 P1.4和 P1.5上工作。 我已通过示波器确认波特率为115200。 我无法在 P2.0和 P2.1上使用 UART。 当我调用重映射功能时,我在 UART 传输引脚上看不到任何传输数据。 我确认正在通过仿真器设置重映射位 USCIA0RMP。 我在 board.h 中创建了#define 以启用或取消重映射功能。
有什么想法,为什么这不起作用?
/*--版权所有---- BSD
*版权所有(c) 2017,德州仪器(TI)公司
*保留所有权利。
*
*以源代码和二进制格式重新分发和使用,有无
*允许修改,但前提是符合以下条件
*符合:
*
** 重新发布源代码必须保留上述版权
* 注意,此条件列表和以下免责声明。
*
* *二进制形式的再发行必须复制上述版权
* 注意,本条件列表和中的以下免责声明
* 随分发提供的文档和/或其他材料。
*
** 德州仪器(TI)公司的名称和的名称
* 其贡献者可用于认可或推广衍生产品
* 未经事先书面许可。
*
*本软件由版权所有者和贡献者“按原样”提供
*以及任何明示或暗示的担保,包括但不限于
*对适销性和特定产品适用性的暗示保证
*宗旨不可否认。 在任何情况下,版权所有者或都不应
*任何直接,间接,偶然,特殊,
*模范或后果性损害(包括但不限于
*采购替代货物或服务;失去使用,数据或利润;
(*或业务中断),但基于任何责任理论,
*无论是合同,严格责任还是侵权行为(包括疏忽或)
*否则)因本软件的使用而产生的任何后果,
*即使被告知可能会发生此类损坏。
*--/版权-*/
//**********************************************
//! 使用 EUSCI_A_UART_init API 进行 EUSCI_A0外部环回测试
//!
//! 说明:本演示将 TX 连接到 MSP430 UART 的 RX
//! 示例代码显示寄存器的正确初始化
//! 和中断接收和传输数据。
//!
//! SMCLK = MCLK = BRCLK = DCOCLKDIV =~1MHz,ACLK = 32.768kHz
//!
//!
//! MSP430FR2xx_4xx 板
//! -----
//! RST -| UCA0TXD|---|
//! | | ||
//! | | ||
//! | UCA0RXD|---|
//! |||
//!
//! 此示例使用以下外围设备和 I/O 信号。 您必须这样做
//! 查看这些内容并根据需要更改您自己的主板:
//! -UART 外设
//! - GPIO 端口外设(用于 UART 引脚)
//! UCA0TXD
//! UCA0RXD
//!
//! 本示例使用以下中断处理程序。 以使用此示例
//! 在您自己的应用程序中,必须将这些中断处理程序添加到
//! 矢量表。
//! - USCI_A0_Vector。
//**********************************************
#include "driverlib.h"
#包括"Board.h"
UINT16_t i;
UINT8_t RXData = 0,TXData = 0;
UINT8_t 检查=0;
#define timer_clock_FREQ (CS_getSMCLK()) //大约16 MHz
#define timer_target_FREQ (6000) //约6 kHz
#define timer_count (timer_clock_FREQ / timer_target_FREQ)
#define CS_MCLK_desed_frequency_in_kHz (16000U)
#define CS_MCLK_FLREF_Ratio ((uint16_t)(CS_MCLK_NEWD_FREQUENCY _IN_kHz/32.768f))
/*
=================================================================
** 函数:ConfigureClocks
**说明:初始化 CPU 时钟信号
** 输入:无
** 产出:无
=================================================================
*
void ConfigureClocks( void )(无效配置锁定[作废
{
//UINT32_t clockValueSM,clockValueM,clockValueA;
//将 FRAM 等待状态设置为1以进行16 MHz 操作-在切换为16 MHz 之前
FRAMCtl_configureWaitStateControl( FRAMCTL_ACCESS_TIME 循环_1);
//设置 DCO FLL 参考(输入时钟)=出厂微调内部32768 Hz REFO
cs_initClockSignal (CS_FLLREF,CS_REFOCLK_SELECT,CS_clock _diver_1);
//将 MCLK 和 DCO 频率设置为16MHz
cs_initFLSettle (CS_MCLK_NEWed_frequency_in_kHz,CS_MCLK_FLREF_Ratio);
//设置 SMCLK 频率分配器
cs_initClockSignal (CS_SMCLK,CS_DCOCLKDIT_SELECT,CS_Clock_diver_1);
//清除所有 OSC 故障标志
cs_clearAllOscar FlagsWithTimeout( 1000 );
//验证时钟设置是否符合预期
//clockValueSM = CS_getSMCLK();
//clockValueM = CS_getMCLK();
//clockValueA = CS_getACLK();
//配置 CLK 引脚-以便它们可以与示波器配合使用
GPIO 设置外围模块功能输出引脚(GPIO 端口 MCLK,GPIO 引脚,MCLK,GPIO 功能 MCLK);
GPIO 设置外围模块功能输出引脚( GPIO 端口 SMCLK,GPIO 引脚_SMCLK,GPIO 功能_SMCLK );
}
主无效(无效)
{
//停止监视计时器
WDT_A_HOLD (WDT_A_BASE);
配置 Clocks();
//配置 UART 引脚
GPIO _setAsPeripheralModuleFundionInputPin( GPIO 端口_UCA0TXD,GPIO PIN_UCA0TXD,GPIO 功能_UCA0TXD );
GPIO _setAsPeripheralModuleFundionInputPin( GPIO 端口_UCA0RXD,GPIO PIN_UCA0RXD,GPIO 功能_UCA0RXD );
//配置 CLK 引脚-以便它们可以与示波器配合使用
GPIO 设置外围模块功能输出引脚(GPIO 端口 MCLK,GPIO 引脚,MCLK,GPIO 功能 MCLK);
GPIO 设置外围模块功能输出引脚( GPIO 端口 SMCLK,GPIO 引脚_SMCLK,GPIO 功能_SMCLK );
/*
*禁用 GPIO 通电默认高阻抗模式以激活
*先前配置的端口设置
*
PMM_unlockLPM5();
EUSCI_A_UART_INITAL 参数参数参数={0};
param.selectClockSource = EUSCI_A_UART_CLOCKSURCE_SMCLK;
PARAM.clockPrescalar =8;
PARAM.firstModRe=10 ;
param.secondModReg = 247;
Param.parity = EUSCI_A_UART_NO_parity;
Param.msborLsb 第一 个= EUSCI_A_UART_LSA_FIRST;
Param.numberofStopBits = EUSCI_A_UART_ONE 停止位;
Param.uartMode = EUSCI_A_UART_MODE;
Param.oversampling = EUSCI_A_UART_oversampling_BAUDRATE_generation;
EUSCI_A_UART_INIT (EUSCI_A0_BASE,¶m);
EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);
#ifdef remap_UART
//将 UART 移至下引脚-如果使用较低的 LIN 计数包
EUSCI_A_UART_remappins (EUSCI_A0_BASE,EUSCI_A_UART_REMAP_PINs_true);
#endif
EUSCI_A_UART_ClearInterrupt (EUSCI_A0_BASE,EUSCI_A_UART_Receive 中断);
EUSCI_A_UART_ClearInterrupt (EUSCI_A0_BASE,EUSCI_A_UART_Transmit 中断);
//启用 USCI_A0 RX 中断
EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE,EUSCI_A_UART_receive_interrupt);
EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE,EUSCI_A_UART_Transmit 中断);
//启用全局中断
__enable_interrupt ();
同时(1)
{
//增加 TX 数据
TXData = 0x55;
//将数据加载到缓冲区
EUSCI_A_UART_传输 数据(EUSCI_A0_BASE,TXData);
__delay_cycles (5000);
// while (检查!= 1);
//check = 0;
}
}
//**********************************************
//
//这是 USCI_A0中断向量服务例程。
//
//**********************************************
#IF 定义(__TI_Compiler_version__)||定义(__IAR_SYSTEMS _ICC__)
#pragma vector=USI_A0_vector
中断
#Elif Defined (__GNUC _)
__attribute__(中断(USCI_A0_Vector))
#endif
EUSCI_A0_ISR 无效(无效)
{
交换机(__evo_in_range (UCA0IV,USCI_UART_UCTXCPTIFG))
{
案例 USCI_NONE:中断;
案例 USCI_UART_UCRXIFG:
RXData = EUSCI_A_UART_receiveData (EUSCI_A0_BASE);
//检查值
IF (!(RXData = TXData))
{
While (1);
}
检查=1;
休息;
案例 USCI_UART_UCTXIFG:中断;
案例 USCI_UART_UCSTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
}
}
#ifndef __Board_H__
#define __Board_H__
#define remap_UART
#ifdef remap_UART
#define GPIO 端口_UCA0RXD GPIO 端口 P2 //引脚 7 - UART RX
#define GPIO 引脚 UCA0RXD GPIO 引脚1
#define GPIO 功能_UCA0RXD GPIO 主模块功能
#define GPIO 端口_UCA0TXD GPIO 端口 P2 //引脚 8 - UART TX
#define GPIO PIN_UCA0TXD GPIO 引脚0
#define GPIO 功能_UCA0TXD GPIO 主模块功能
#else
#define GPIO 端口_UCA0RXD GPIO 端口 P1
#define GPIO 引脚_UCA0RXD GPIO 引脚5
#define GPIO 功能_UCA0RXD GPIO 主模块功能
#define GPIO 端口_UCA0TXD GPIO 端口 P1
#define GPIO PIN_UCA0TXD GPIO 引脚4
#define GPIO 功能_UCA0TXD GPIO 主模块功能
#endif
#define GPIO 端口 MCLK GPIO 端口 P1 //引脚19 -
#define GPIO 引脚 MCLK GPIO 引脚3
#define GPIO 功能 MCLK GPIO 辅助模块功能
#define GPIO 端口 SMCLK GPIO 端口 P1 //引脚20 -
#define GPIO 引脚 SMCLK GPIO 引脚2
#define GPIO 功能 SMCLK GPIO 辅助模块功能
#endif //__Board_H__
只是为了魔术和迷信:在启用 UART 之前尝试上移再映射调用,甚至可以在分配引脚功能之前上移。
这是我最终要做的事——重新映射,然后分配,再配置 EUSCI——尽管我不记得看到这样的建议。 (在 I2C 启用后,我曾尝试移动其引脚分配,但 I2C 反应不佳,但 I2C 相当不寻常。)
我解决了这个问题。 MSP-TS430RHL20评估板上的所有20个 CPU 针脚都连接到两个10针单排管座。 我认为 PDF 文件中的打印伪影表明 CPU 针脚8未连接到针脚8实际上不是打印伪影。 CPU 针脚实际上没有连接到接头针脚。 我正在寻找信号出现在报头上。 太令人沮丧了