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.

[参考译文] MSP432P401R:UART 崩溃

Guru**** 2553260 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/706062/msp432p401r-uart-crash

器件型号:MSP432P401R

我正在使用红色 launchpad、下面的程序中显示了一个奇怪的问题。

我正在创建一个完全没有头脑的 UART 缓冲区、但我只能在它在未处理的中断存根中崩溃之前发送128个字符。 我不确定正在发生什么情况。 我不认为它正在使用任何堆栈、但它看起来好像我在某个地方过度运行内存...

/*
*对 FET 开关进行编程以进行桥接仿真
* UART 测试
*
*使用的端口
:*端口 J:引脚2 &3 -晶振

*端口1:引脚2和3反向通道 UART
*

*
**//
* DriverLib 包括*/
#include 

/*标准包括*/
#include 
#include 
#include 
#include 
#include 

void ExecuteCommand (char *cmd);
int getData (char *cmd、char *name);
void waitForSerial (void);


/* UART 配置参数。 这些是配置参数
、*使 eUSCI 成为 UART 模块以115200波特率运行。 这些
*值是使用 TI *
在
以下位置提供的在线计算器计算的:* software-dl.ti.com/.../index.html
*
/ const eUSCI_UART_Config uartConfig =
{
EUSCI_A_UART_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
156、 // BRDIV =
4、 // UCxBRF =
0、 // UCxBRS =
EUSCI_A_UART_NO_奇 偶校验、 //无奇偶校验
EUSCI_A_UART_LSB_FIRST、 // MSB 第一
个 EUSCI_A_UART_One_stop_bit、 //一个停止位
EUSCI_A_UART_MODE、 // UART 模式
EUSCI_A_UART_oversampling_BAUDRATE_generation
};

//过采样};//其他速率
* 9600
* BRDIV:156
* UCXBRF:4
* UCXBRS:0
*过采样:1
*
38400
* BRDIV:39
* UCXBRF:1
* 115XBRS:0
*过采样:1



*
UCXBRS:1 * UCBRDIV:1 * UCBRDIV:1 * 1 * UCBRC200 * UCBRDIV:1 * 1 * UCBRDIV:1 * 1 * 37
*过采样:1
*
*/

char TXData[256];
volatile INT8_t TXIdx =-1;//无传输

uint8_t RXData;
uint8_t RXIdx = 0;
char RXLine[64];

volatile int ii;
//命令
//发送方式 使用定界符<>
#define hello_CMD "hello"

//数据的下降时间模式
#define MODE_CMD "mode"

//数据点之间的延迟
#define DELAY_CMD "delay"

//跳过
#define STEP_CMD "STEP"

#define INFO_CMD"INFo"

#define MAX_MODE (7)

volatile



Mode = 0的数据点数;int 步骤8;int
int Count = 0;

int main (void)
{
int i;

/*停止看门狗*/
MAP_WDT_A_HOLDTimer();

//![简单 CS 配置]
/*为外设/晶体使用配置引脚、为输出配置 LED */
MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_PJ、
GPIO_PIN3 | GPIO_PIN2、GPIO_PRIMARY_MODULE_FUNCTION);

MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、
GPIO_PIN2 | GPIO_PIN3、GPIO_PRIMARY_MODULE_FUNCTION);// UART



/*以防用户想要使用 getACLK、getMCLK 等函数、
*让我们在代码中设置时钟频率。
*
cs_setExternalClockSourceFrequency (32000、48000000);

/*在非旁路模式下启动 HFXT 而不超时。 开始之前
*我们必须将 VCORE 更改为1以支持48MHz 频率*/
MAP_PCM_setCoreVoltageLevel (PCM_VCORE1);
MAP_FlashCtl_setWaitState (FLASH_BANK0、1);
MAP_FlashCtl_setWaitState (FLASH_BANK1、1);
CS_startHFXT (false);

/*将 MCLK 初始化为 HFXT (有效48MHz)*/
MAP_CS_initClockSignal (CS_MCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1);
// UART 限制为24MHz……
MAP_CS_initClockSignal (CS_SMCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_2);

/*配置 UART 模块*/
MAP_UART_initModule (EUSCI_A0_BASE、uartConfig);

/*启用 UART 模块*/
MAP_UART_enableModule (EUSCI_A0_BASE);

/*启用中断*/
MAP_UART_enableInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_receive_interrupt|EUSCI_A_UART_transmit 中断);

MAP_Interrupt_enableInterrupt (INT_EUSCIA0);

/*启用主中断*/
MAP_Interrupt_enableMaster();

//调试
waitForSerial();
strcpy (TXData、"Hello、World!\r\n");

TXIdx = 0;


while (1)
{

if (TXIdx =-1){
计数=计数+步长;

sprintf (TXData、"\n\r\n%d"、Count);
对于(i=0;i "x");="" }="" txidx="0;" check="" for="" outgoing="" serial="" if="" (txidx="=" 0)="" start="" the="" transmission="" map_uart_transmitdata(eusci_a0_base,="" txdata[txidx++]);="" while()="" *="" eusci="" a0="" uart="" isr="" void="" euscia0_irqhandler(void)="" uint32_t="" status="MAP_UART_getEnabledInterruptStatus(EUSCI_A0_BASE);" map_uart_clearinterruptflag(eusci_a0_base,="" status);="" if(status="" &="" eusci_a_uart_receive_interrupt_flag)="" rxdata="MAP_UART_receiveData(EUSCI_A0_BASE);" else="" (status="" eusci_a_uart_transmit_interrupt_flag)="" ready="" to="" transmit="" next="" byte="" -1)="" return;="" (txdata[txidx]="=" '\0')="" done="" transmitting="" waitforserial(void)="" wait="" go="" -1...="" while="" !="-1);" }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没关系。

    很难获得大于128的索引以及带符号的 uint8_t! ^μ A)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Keith、

    感谢您的回答。