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

judy的头像
judy 发布于:周一, 07/02/2018 - 13:42 ,关键词:

一、使用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;
}

来源:Tangledice

围观 440