STM32 serial port receives hexadecimal number and converts it to decimal number (including negative number)

External device transmits hexadecimal number to STM32 microcontroller

For example, 0x09c4 represents 2500

        0xff38 stands for -200 (not 65336 since that is signed)

Serial port receive processing function

//接收到	5A A5 06 83 55 00 01 09 C4 代表2500
	
//接收到	5A A5 06 83 55 00 01 FF 38 代表-200
			if(USART_RX_BUF[0]==0X5A&&USART_RX_BUF[1]==0XA5&&USART_RX_BUF[2]==0X06&&USART_RX_BUF[3]==0X83&&USART_RX_BUF[4]==0X55&&USART_RX_BUF[5]==0X00&&USART_RX_BUF[6]==0X01)
	{
//		DAC1
		
		if((USART_RX_BUF[7]&0x80)==0x80)//负数
		{
			DAC1=USART_RX_BUF[7];
			DAC1=DAC1<<8;
			DAC1+=USART_RX_BUF[8];
			DAC1-=1;
			DAC1=~DAC1;
			DAC1=0-DAC1;
			
			
			
//			三、逆向操作将二进制的负数转为十进制。
//1、将二进制数减1,得到:11101100。
//2、将减1后的代码取反操作,得到:00010011。
//3、将取反后的代码换算成十进制,得到19。‘
//4、在计算结果19的基础上要加上-号,结果为-19.
			


		}
		else//正数
		{
			
			DAC1=USART_RX_BUF[7]*256;
			DAC1+=USART_RX_BUF[8];
	
		}
			

	}
	

Guess you like

Origin blog.csdn.net/qq_46226356/article/details/129667300