请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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);" }