一、采用串口接收中断接收数据
1.如何将接收的字符转为数字显示在LCD上,或者怎么处理这些字符数字进行四则运算呢?
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
char temp1[4],temp2[6],temp3[13];
if(huart->Instance == USART1)
{
sscanf((char*)usart_box,"%4s",temp1);
sscanf((char*)usart_box,"%*5s%4s",temp2);
sscanf((char*)usart_box,"%*10s%12s",temp3);
u8 lenth=sizeof(temp3)/sizeof(temp3[0]);
u32 data[12]={0};
for(u8 i=0;i<lenth;i++)
{
data[i]=char_transfer_int(temp3[i]);
}
float expense=cost(time1, time2);
sprintf(text,":%s:%d:%.2f",car[0].id,park_hour,expense);
HAL_UART_Transmit(&huart1,(u8*)text,strlen(text), 50);
memset(usart_box,'\0',strlen((char*)usart_box));
HAL_UARTEx_ReceiveToIdle_IT(&huart1, usart_box, 30); //最后一定要重新开启串口读
}
}
u32 char_transfer_int(char str) //char 转 int
{
switch(str)
{
case '0':
return 0;
break;
case '1':
return 1;
break;
case '2':
return 2;
break;
case '3':
return 3;
break;
case '4':
return 4;
break;
case '5':
return 5;
break;
case '6':
return 6;
break;
case '7':
return 7;
break;
case '8':
return 8;
break;
case '9':
return 9;
}
二:可通过sprintf函数的形式将float、int类型的数据通过串口转发出去。
sprintf(text,":%s:%d:%.2f",car[0].id,park_hour,expense);
HAL_UART_Transmit(&huart1,(u8*)text,strlen(text), 50);