stm32发送16进制的数组总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leibihui0556/article/details/76767922

关于STM32如何串口输出16进制的数值,然后在串口调试助手上显示,很多人是用printf(“%02x”,A)语句,但是在串口调试助手上显示的是ACSII码,不是我们要的HEX数据,在这里我们用另外一种方法来在这件事情。
直接用寄存器来做,下面看代码:

USART_SendData(USART1,0x00) ;
USART_SendData(USART1,0x01) ;
USART_SendData(USART1,0x02) ;         这样通过上位机收到的只是02并不是00 01 02

因为数据还来不及发送,数据就被后面来的数据覆盖了,所以收到的数据是02,不是00 01 02

USART_SendData(USART1,0x00) ;
delay_ms(1);
USART_SendData(USART1,0x01) ;
delay_ms(1);
USART_SendData(USART1,0x02) ;
delay_ms(1);                                      这样收到的才是00 01 02

在这里,功能是实现了,但是延时其实是一个不是很好的方法,需要系统在等待,浪费太多的时间。下面的方法是我后来改良的方法。原理就是等待发送完后继续发送下一个数据,没有过多的等待。方法是来自论坛的,http://www.openedv.com/posts/list/24107.htm

void UartASendStr (u8 *pucStr, u8 ulNum) 
{ 
u8 i; 
for(i = 0;i<ulNum;i++) 
{ 
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);  
    USART_SendData(USART1,*pucStr++); 
}  
} 

void ACK(u8 func) 
{ 
u8 data[5]; 
data[0]=0x0c; 
data[1]=0xAA; 
data[2]=0x00; 
data[3]=0xFF; 
data[4]=0x0F; 
UartASendStr(data,5); 
}

上面这个代码发送完后可以在串口的调试助手上hex格式显示。有不懂的可以问我,企鹅1003061094

刚刚入门stm32,还有很多东西需要学习,过几天我会介绍一下modbus的主机是怎么工作的,还有将会上传我的源代码,初学者,动力来自压力。

猜你喜欢

转载自blog.csdn.net/leibihui0556/article/details/76767922