天天看点

TMS570ls3137之串口使用一.串口输出二.串口中断接收数据

一.串口输出

1)打开hcg图形配置软件,建立新工程后,选择driver enable选项,选中“Enable SCI2 driver”,如下图1所示:

TMS570ls3137之串口使用一.串口输出二.串口中断接收数据

2)在SCI2 选框中选择“SCI/LIN port”选项,勾选TX-pin 为输出,如下图2所示:

TMS570ls3137之串口使用一.串口输出二.串口中断接收数据

3)以上设置完毕后即可生成代码。

4)在sys_main.c中编写以下代码:

int my_printf(char *fmt,...)
{
    char *p;
    va_list ap;
    //获取第一个实际参数的起始地址
    va_start(ap,fmt);
    //分析fmt指向的字符串
    for(p = fmt;*p;p++)
    {
        if(*p == '%')
        {
            p++;
            switch(*p)
            {
            //整形十进制数
            case 'd':
                printf("%d",va_arg(ap,int));
                、、sciSendByte(scilinREG,va_arg(ap,int));
                break;
            //字符
            case 'c':
                printf("%c",va_arg(ap,int));
                break;
            //字符串
            case 's':
                printf("%s",(char *)va_arg(ap,int));
                break;
            //浮点数
            case 'f':
                printf("%f",va_arg(ap,double));
                break;
            //%
            case '%':
                putchar('%');
                break;

            }

        }
        else{
            //putchar(*p);
            sciSendByte(scilinREG,(*p));
        }
        //sciSendByte(scilinREG,(*p));
    }
    //将ap赋值为NULL
    va_end(ap);
    return 0;
}


/* USER CODE END */

int main(void)
{
/* USER CODE BEGIN (3) */
    sciInit();
    int num = 0;
    //_enable_IRQ();
    while(1)
    {
        my_printf("printf 串口打印成功!!!");
    }
/* USER CODE END */

    return 0;
}
           

编译生成代码后烧录至开发板,波特率为默认的9600,观察串口打印信息.

注:以上为测试串口输出使用,这里有编写好的串口输出文件,只需修改#define putchar© sciSendByte(scilinREG,c);

串口寄存器地址即可使用,直接调用printf即可实现串口输出。

https://download.csdn.net/download/weixin_42259397/12493360

二.串口中断接收数据

1)打开HCG,在以上的配置的基础上,点击进入VIM Channel 0-31 中勾选串口中断选项,如下图3所示:

TMS570ls3137之串口使用一.串口输出二.串口中断接收数据

2)然后进入串口配置的界面SCI2 ,使能RX中断,配置收发数据格式,如下图4,5所示:

TMS570ls3137之串口使用一.串口输出二.串口中断接收数据
TMS570ls3137之串口使用一.串口输出二.串口中断接收数据

3)完成以上配置后生成代码后,在sys_main.c中代码编写如下:

#include "sys_common.h"

/* USER CODE BEGIN (1) */
#include "sci.h"
/* 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) */

/* USER CODE END */

int main(void)
{
/* USER CODE BEGIN (3) */
	sciInit();
	_enable_IRQ();
	while(1);
/* USER CODE END */
    return 0;
}
           

在中断处理的函数中,注释掉其他代码,只保留接收中断进入函数:

case 11U:
        /* receive */
//   		byte = (uint8)(scilinREG->RD & 0x000000FFU);

//           if (g_sciTransfer_t[1U].rx_length > 0U)
//           {
//               *g_sciTransfer_t[1U].rx_data = byte;
                /*SAFETYMCUSW 567 S MR:17.1,17.4 <APPROVED> "Pointer increment needed" */
//				g_sciTransfer_t[1U].rx_data++;
//                g_sciTransfer_t[1U].rx_length--;
//                if (g_sciTransfer_t[1U].rx_length == 0U)
//                {
                    sciNotification(scilinREG, (uint32)SCI_RX_INT);
//               }
//           }
        break;
           

在回调函数“void sciNotification(sciBASE_t *sci,uint32_t flags)”中增加以下代码:

void sciNotification(sciBASE_t *sci,uint32_t flags)
{
	unsigned char byte = sci->RD;
	sciSendByte(sci,byte);
}
           

以上完成后,编译后烧录开发板,打开串口调试助手,通过串口工具发送hello,然后串口打印出“hello”