• 直接使用单片机的USART发送数据


    一、使用USART发送数据

      我们在写单片机程序的时候,在Debug时,往往要用到串口输出信息,这是会使用printf打印出我们想要的信息来,但是printf有一个弊端,就是输出打印时间较长。这样在一些对时间精度要求非常高的场合,使用printf将会带来一系列问题,这时,如果使用单片机的USART自定义一个协议,直接发送数据到上位机,将会得到我们想要的效果。下面对怎样使用USART发送数据做一个整理。

    1、发送单个字符

    void USART1_PutChar(u8 ch)
    {
    USART_SendData8(USART1,(u8)ch);
    
    while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
    
    while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
    }

    2、发送固定长度的字符串

    void USART1_PutStrLen(u8 *buf,u16 len)
    {
    for(;len > 0 ; len--)
    {
        USART_SendData8(USART1,*buf++);
    
        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
    }
    
    while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
    }

    3、发送任意长度的字符串

    void USART1_PutStr(u8 *buf)
    {
    while(*buf)
    {
        USART_SendData8(USART1,*buf++);
    
        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
    }
    while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
    }

    二、如何发送16bit的数据

      单片机(STM8)的USART发送的是8bit的数据,所以如果要发送16bit的数据,则需要将16bit的数据转换为8bit的高低两个字节进行发送,需做如下处理。

    u16 data;
    u8 high_byte,low_byte;
    high_byte=data>>8;
    low_byte=data;

    则经过这样的转换之后,就可以直接使用USART进行发送了。

    三、使用翻转电平的方式测量程序执行时间

      我们想要知道某一段代码的执行时间,可以通过示波器来测量,在需要测量的代码处做一个翻转电平的程序,就可以通过示波器来查看程序的执行时间了。代码如下:

     u8 toggle_flag=1;
    
    if(toggle_flag)
    {
        GPIO_SetBits(GPIOC,GPIO_Pin_0); 
        toggle_flag=0;
    }
    else
    {
        GPIO_ResetBits(GPIOC,GPIO_Pin_0);
        toggle_flag=1;
    }
    岁月蹉跎,怠慢了整个人生!
  • 相关阅读:
    对多分类采用10折交叉验证评估实验结果
    对二分类采用10折交叉验证评估实验结果
    对回归采用10折交叉验证评估实验结果
    在多分类任务实验中 用torch.nn实现 𝑳𝟐 正则化
    在多分类任务实验中手动实现 使用 𝑳𝟐 正则化
    随学随用的python-note
    Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
    Scala写排序可以说是简洁又明了
    Scala中的apply实战详解
    Scala单例对象、伴生对象实战详解
  • 原文地址:https://www.cnblogs.com/Tangledice/p/8149880.html
Copyright © 2020-2023  润新知