STM32串口接收十六进制数转为十进制数(包含负数)

外部设备传输给STM32单片机十六进制数

例如0x09c4 代表2500

        0xff38  代表-200(并不是65336,因为这是有符号的)

串口接收处理函数

//接收到	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];
	
		}
			

	}
	

你可能感兴趣的:(嵌入式学习,stm32,单片机,嵌入式硬件)