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.

launchPad TMS570ls12x 的SCI始终无输出

硬件平台:launchPad TMS570ls12x

软件:我是按照HAL code generator 的帮助文档中的教程操作的,结果成功了,串口功能使用正常,但是该教程是针对SCI2的,

如图一:

所以我照葫芦画瓢,重新新建了CCS工程,以及使用HAL code generator 使能了SCI,

如图二

main.c代码如下

/* USER CODE BEGIN (0) */
/* USER CODE END */

/* Include Files */

#include "sys_common.h"

/* USER CODE BEGIN (1) */
#include "gio.h"
#include "reg_sci.h"
#include "sci.h"

#define TSIZE1 10
uint8 TEXT1[TSIZE1]= {'H','E','R','C','U','L','E','S',' ',' '};
#define TSIZE2 18
uint8 TEXT2[TSIZE2]= {'M','I','C','R','O','C','O','N','T','R','O','L','L','E','R','S',' ',' '};
#define TSIZE3 19
uint8 TEXT3[TSIZE3]= {'T','E','X','A','S',' ','I','N','S','T','R','U','M','E','N','T','S','\n','\r'};

void sciDisplayText(sciBASE_t *sci, uint8 *text, uint32 length);
void wait(uint32 time);

#define UART sciREG
/* USER CODE END */

/** @fn void main(void)
* @brief Application main function
* @note This function is empty by default.
*
* This function is called after startup.
* The user can use this function to implement the application.
*/

/* USER CODE BEGIN (2) */
void wait(uint32 time);

/* USER CODE END */

int main(void)
{
/* USER CODE BEGIN (3) */
gioInit();
sciInit();
while(1)
{
sciDisplayText(UART,&TEXT1[0],TSIZE1); /* send text code 1 */
sciDisplayText(UART,&TEXT2[0],TSIZE2); /* send text code 2 */
sciDisplayText(UART,&TEXT3[0],TSIZE3); /* send text code 3 */
gioToggleBit(gioPORTB, 1);
gioToggleBit(gioPORTB, 2);
wait(5000000);

}
/* USER CODE END */

return 0;
}


/* USER CODE BEGIN (4) */
void sciDisplayText(sciBASE_t *sci, uint8 *text,uint32 length)
{
while(length--)
{
while ((UART->FLR & 0x4) == 4); /* wait until busy */
sciSendByte(UART,*text++); /* send out text */
};
}


void wait(uint32 time)
{
while(time)
{
time--;
}
}
/* USER CODE END */

然后生成了代码,并在main函数中参照SCI2修改了相应的代码.但是用示波器测量SCITX端口发现始终为低电平,没有任何数据信号.

请教一下大家,SCI的使用跟SCI2有什么需要特别注意的地方么?

  • 我这是哪里没注意到,二产生的错误么

  • 您好,

    检查下相应的gpio配置是否正确。

  • 我是使用hcg生成的代码,gpio配置应该是没有问题,相关配置如图所示

  • void sciInit(void)
    {
    /* USER CODE BEGIN (2) */
    /* USER CODE END */
    
        /** @b initialize @b SCI */
    
        /** - bring SCI out of reset */
        sciREG->GCR0 = 0U;
        sciREG->GCR0 = 1U;
    
        sciREG->GCR1 &= ~(1<<8u);
    
        /** - Disable all interrupts */
        sciREG->CLEARINT    = 0xFFFFFFFFU;
        sciREG->CLEARINTLVL = 0xFFFFFFFFU;
    
        /** - global control 1 */
        sciREG->GCR1 =  (uint32)((uint32)1U << 25U)  /* enable transmit */
                      | (uint32)((uint32)1U << 24U)  /* enable receive */
                      | (uint32)((uint32)1U << 5U)   /* internal clock (device has no clock pin) */
                      | (uint32)((uint32)(1U-1U) << 4U)  /* number of stop bits */
                      | (uint32)((uint32)0U << 3U)  /* even parity, otherwise odd */
                      | (uint32)((uint32)0U << 2U)  /* enable parity */
                      | (uint32)((uint32)1U << 1U)  /* asynchronous timing mode */
                      | (uint32)((uint32)1U << 16U);
    
        /** - set baudrate */
        sciREG->BRS = 520U;  /* baudrate */
    
        /** - transmission length */
        sciREG->FORMAT = 8U - 1U;  /* length */
    
        /** - set SCI pins functional mode */
        sciREG->PIO0 = (uint32)((uint32)1U << 2U)  /* tx pin */
                     | (uint32)((uint32)1U << 1U); /* rx pin */
    
        /** - set SCI pins default output value */
        sciREG->PIO3 = (uint32)((uint32)0U << 2U)  /* tx pin */
                     | (uint32)((uint32)0U << 1U); /* rx pin */
    
        /** - set SCI pins output direction */
        sciREG->PIO1 = (uint32)((uint32)0U << 2U)  /* tx pin */
                     | (uint32)((uint32)0U << 1U); /* rx pin */
    
        /** - set SCI pins open drain enable */
        sciREG->PIO6 = (uint32)((uint32)0U << 2U)  /* tx pin */
                     | (uint32)((uint32)0U << 1U); /* rx pin */
    
        /** - set SCI pins pullup/pulldown enable */
        sciREG->PIO7 = (uint32)((uint32)0U << 2U)  /* tx pin */
                     | (uint32)((uint32)0U << 1U); /* rx pin */
    
        /** - set SCI pins pullup/pulldown select */
        sciREG->PIO8 = (uint32)((uint32)1U << 2U)  /* tx pin */
                     | (uint32)((uint32)1U << 1U);  /* rx pin */
    
        /** - set interrupt level */
        sciREG->SETINTLVL = (uint32)((uint32)0U << 26U)  /* Framing error */
                          | (uint32)((uint32)0U << 25U)  /* Overrun error */
                          | (uint32)((uint32)0U << 24U)  /* Parity error */
                          | (uint32)((uint32)0U << 9U)  /* Receive */
                          | (uint32)((uint32)0U << 8U)  /* Transmit */
                          | (uint32)((uint32)0U << 1U)  /* Wakeup */
                          | (uint32)((uint32)0U << 0U);  /* Break detect */
    
        /** - set interrupt enable */
        sciREG->SETINT = (uint32)((uint32)0U << 26U)  /* Framing error */
                       | (uint32)((uint32)0U << 25U)  /* Overrun error */
                       | (uint32)((uint32)0U << 24U)  /* Parity error */
                       | (uint32)((uint32)0U << 9U)  /* Receive */
                       | (uint32)((uint32)0U << 1U)  /* Wakeup */
                       | (uint32)((uint32)0U << 0U);  /* Break detect */
    
        /** - initialize global transfer variables */
        g_sciTransfer_t[0U].mode   = (uint32)0U << 8U;
        g_sciTransfer_t[0U].tx_length = 0U;
    	g_sciTransfer_t[0U].rx_length = 0U;
    
        /** - Finaly start SCI */
        sciREG->GCR1 |= 0x80U;
    
    
    /* USER CODE BEGIN (3) */
    /* USER CODE END */
    }

    这是HCG生成的SCI初始化代码

  • Hi Chongyang,

    检查一下SCI Port配置,将TX pin配置成输出看一下,检查一下是不是复用关系没有选对?

    另外,根据你选用的芯片型号,看一下对应的数据手册,Check一下,是不是SCI存在复用关系,而SCI2没有被复用?

  • 您好,关于引脚复用问题,我在手册上看到,好像是使能了某一种功能,自动禁用另一种功能.是这样么?我的代码都是通过HCG生成的,我只使能了GIO和SCI功能

  • 确实是引脚复用的问题,我犯了个低级错误!有复用功能的引脚是需要设置

  • Hi Chongyang,

    你的问题解决了吗?如果解决了,麻烦结贴,最好能分享一下你的最新配置,谢谢。

  • hi 你好,我该怎么结贴呢?采用某一回答作为答案么?

  • Hi chongyang,

    很高兴你的问题得以解决,显示你已经结贴,谢谢。