一、syscfg配置

        别的都保持默认,需要改的只有引脚。波特率默认是9600,串口的端口不要选错

二、代码讲解 

#include "ti_msp_dl_config.h"
#include "ti/driverlib/m0p/dl_core.h"
#include "stdio.h"
#include "string.h"

int a=100;

int main(void)
{
    SYSCFG_DL_init();

    while (1) {
        printf("Hello %d\r\n",a);
        delay_cycles(32000000);//等待一秒钟的时间
    }
}

/* 
 这个int fputc(int c,FILE* stream)函数在#include "stdio.h"这个头文件里面
 使用printf就需要使用fputc这个函数
*/
int fputc(int c, FILE* stream)//重定向函数
{
    DL_UART_Main_transmitDataBlocking(UART_0_INST,c);
    /*
    DL_UART_Main_transmitData();
    这个函数不是阻塞函数。
    当执行到这个函数的时候,它会把这个字符c发送给串口UART进行发送,把这个数据写入给寄存器之后就会返回,继续执行下面的程序
    但是此时还没有发送完成,只是发出了发送的请求,但是整个发送还没有完成
    DL_UART_Main_transmitDataBlocking();
    这个函数是一个阻塞函数。
    它会把这个字符发给那边串口的寄存器,等待串口发送完成后,它再执行后续的程序
    DL_UART_Main_transmitDataBlocking();//内容发送完了才执行下一步的程序
    DL_UART_Main_transmitDataBlocking();
    这两句话这么写是没有问题的
    DL_UART_Main_transmitData();//只是发送了一个发送请求,但是内容还未发送完
    DL_UART_Main_transmitData();
    但是要这么写就有问题了
    */
    return c;
}
/*如果只使用上面的fputc这个函数,那么就只能打印helloword这个字符串,不能打印后面的参数
所以我们要使用后面的fputs这个才能打印后面的参数
fputs和puts是同时定义的,如果只使用其中一个的话有时候会提示一个重定向的报错
*/
int fputs(const char* restrict s, FILE* restrict stream)
{
    uint16_t i,len;
    len=strlen(s);
    for (i=0; i<len; i++)
    {
        DL_UART_Main_transmitDataBlocking(UART_0_INST,s[i]);
    }  
    return len;
}

int puts(const char *_ptr)
{
    int count =fputs(_ptr, stdout);
    count +=fputs("\n", stdout);
    return count;
}

        效果展示 

 

 三、封装的打印代码

#include "ti_msp_dl_config.h"
#include "stdio.h"
#include "string.h"
#include "ti/driverlib/m0p/dl_core.h"//这个头文件我也不知道是干嘛的
void SendString(char *str)//这句话是单纯的发送一个字符串
{
    while (*str !='\0')
    {
        DL_UART_Main_transmitDataBlocking(UART_0_INST,*str++);
    }
}

int a=3507;
char txBuf[100];

int main(void)
{
    SYSCFG_DL_init();
    while (1) 
    {
        sprintf(txBuf, "MSPM0 %d\r\n", a);//把发送的内容MSPM03507存储到txBuf[100]这个里面
        SendString(txBuf);//发送的内容就是txBuf也就是MSPM03507
        //第一句只是一个打印内容的作用,第二句才是正式发送的内容
        delay_cycles(32000000);//等待一秒钟的时间
    }
}

四、封装代码的实用性 

        使用封装的代码的话,就可以不再使用上面的printf的底层函数,一句函数就完成了,使用便利。

        同时使用封装代码,可以跟几个不同的串口进行通信,需要修改的地方可以看基础篇的配置,在扩展篇里面只需要配置一下引脚,波特率默认是9600

#include "ti_msp_dl_config.h"
#include "stdio.h"
#include "string.h"
#include "ti/driverlib/m0p/dl_core.h"

void BT_SendString(char *str)//跟蓝牙通信的串口发送
{
    while (*str !='\0')
    {
        DL_UART_Main_transmitDataBlocking(UART_BT_INST,*str++);
    }
}

void OpenMv_SendString(char *str)//跟OpenMv通信的串口发送
{
    while (*str !='\0')
    {
        DL_UART_Main_transmitDataBlocking(UART_OpenMv_INST ,*str++);
    }
}

int a=3507;
char txBuf[100];
int main(void)
{
    SYSCFG_DL_init();
    while (1) 
    {
        sprintf(txBuf, "MSPM0 %d\r\n", a);//把发送的内容MSPM03507存储到txBuf[100]这个里面
        BT_SendString(txBuf);//跟蓝牙通信的串口发送
        OpenMv_SendString(txBuf);//跟OpenMv通信的串口发送
        delay_cycles(32000000);//等待一秒钟的时间
    }
}

 

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐