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:UART 重新映射不起作用

Guru**** 633810 points
Other Parts Discussed in Thread: MSP-TS430RHL20, MSP430FR2522
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1086840/msp430fr2522-uart-remap-not-working

部件号:MSP430FR2522
“线程”中讨论的其它部件:MSP-TS430RHL20,, 测试

我已将 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,&param);

  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 针脚实际上没有连接到接头针脚。  我正在寻找信号出现在报头上。  太令人沮丧了