• 在MSP430上面实现printf串口打印


    背景:学习中科浩电的无人机,芯片上MSP430,想要实现printf函数,但对MSP430不是很熟悉。

    一、使用sprintf函数

    sprintf

    中科浩电无人机的代码

    /******************************************************************************
      * 函数名称:U2_UCA1_Send
      * 函数描述:以中断的方式发送数据
      * 输    入:
      * uint8_t *ptx:要发送的数据地址
      * uint8_t len:要发送的数据长度
      * 输    出:void
      * 返    回:void
      * 备    注:null
      *
      *
    ******************************************************************************/
    void U2_UCA1_Send(uint8_t* pTx, uint8_t len)
    {
        uint8_t i;
        
        // 等待串口空闲
        while(!Usart2.tx_idle)
            ;
        
        // 占用串口
        Usart2.tx_idle = 0;
        
        // 缓存要发送的数据
        for(i=0; i<len; i++)
        {
            Usart2.tx_buf[i] = pTx[i];
        }
        
        // 启动发送
        Usart2.tx_totle = len;
        Usart2.tx_cnt = 0;
        
        if(Usart2.tx_cnt < Usart2.tx_totle)
        {
            UCA1TXBUF = Usart2.tx_buf[Usart2.tx_cnt++];
        }
    }

     sprintf配合该传送函数实现串口打印

    应用时会出现bug

     sprintf(Buff, "yaw:%d
    pitch:%d
    roll:%d
    ",g_Attitude.yaw,g_Attitude.pitch,g_Attitude.roll);
    
    U2_UCA1_Send(Buff,sizeof(Buff));

    BUG:打印float型时,会出现问题——格式化类型的变量均与第一个变量的数值相同,不清楚是什么原因。

    二、利用stdarg.h下的va_start 函数和vsprintf 函数再配合串口(的DMA )发送功能来实现C 语言中的printf

    
    

    #include <stdio.h>
    #include <stdarg.h>
    #include "string.h"

    
    

    void usart_printf(const char *fmt,...);


    //
    串口打印函数 void usart_printf(const char *fmt,...) { static uint8_t tx_buf[256] = {0}; static va_list ap; static uint16_t len; va_start(ap, fmt); //return length of string //返回字符串长度 len = vsprintf((char *)tx_buf, fmt, ap); va_end(ap); U2_UCA1_Send(tx_buf, len); }
    //应用

      float buff[3];
      buff[0] = g_Attitude.yaw;
      buff[1] = g_Attitude.pitch;
      buff[2] = g_Attitude.roll;

      usart_printf("yaw:%f ",buff[0]);
      usart_printf("pitch:%f ",buff[1]);
      usart_printf("roll:%f ",buff[2]);

    效果很好!没有乱码的情况,且不需要其他操作。

  • 相关阅读:
    sql基础笔记备忘
    论坛---挂掉的思考
    http response
    跑步肋骨下方疼
    Golang
    svn rollback: 恢复到上一版本
    中国时区
    crontab
    初识redis
    siege
  • 原文地址:https://www.cnblogs.com/YiDongZhao/p/14460715.html
Copyright © 2020-2023  润新知